|
也可以是一下,我还没有这样想过,外接电路可能会麻烦一些。 高手指点一下,这是两个小时的产品 db7 equ p1.7 db6 equ p1.6 db5 equ p1.5 db4 equ p1.4 rs equ p1.1 rw equ p1.2 e equ p1.3 stb equ p3.5 clk equ p3.4 l_e equ p3.3 dat equ p3.2 up equ p3.1 dow equ p3.0 nb equ p3.7 ptt equ p1.0 tx_nl equ 53h tx_a equ 54h rx_nl equ 56h rx_a equ 57h ch equ 58h fx100 equ 59h fx10 equ 5ah ;************************************************************* ;ok. ^_^ ;************************************************************* org 0000h ajmp start org 0080h start: mov fx100,#05h mov fx10 ,#00h acall lcdstart mov a,#01h;清屏 lcall lcd_c lcall wellcome lcall delay_ll lcall lcd_dat lcall r_dat lcall rx ;*************************************************************** ;key ;*************************************************************** key: mov c,ptt jnc ptt_1 lcall rx mov c,up jnc up_1 mov c,dow jnc dow_1 lcall dat_dat mov a,#86h lcall lcd_c mov a,ch da a swap a anl a,#0fh add a,fx100 add a,#30h lcall lcd_d mov a,ch da a anl a,#0fh add a,fx10 add a,#30h lcall lcd_d sjmp key ptt_1: mov c,ptt lcall tx jnc $ sjmp key up_1: mov c,up lcall up_dat jnc $ sjmp key dow_1: mov c,dow lcall dow_dat jnc $ sjmp key ;***************************************** wellcome: mov a,#80h lcall lcd_c mov r0,#10h mov r1,#00h mov dptr,#tab_lcd3 lcd_dat_3: setb rs mov a,r1 movc a,@a+dptr lcall lcd_d inc r1 djnz r0,lcd_dat_3 mov dptr,#tab_lcd4 mov a,#0c0h lcall lcd_c mov r0,#10h mov r1,#00h lcd_dat_4: setb rs mov a,r1 movc a,@a+dptr lcall lcd_d inc r1 djnz r0,lcd_dat_4 ret ret ;********************************************************** ;lcd子程序 ;********************************************************** lcdstart: mov a,#101000b lcall lcd_c mov a,#10b lcall lcd_c mov a,#01h lcall lcd_c mov a,#1111b lcall lcd_c mov a,#110b lcall lcd_c lcd_dat: mov a,#80h lcall lcd_c mov r0,#10h mov r1,#00h mov dptr,#tab_lcd1 lcd_dat_1: setb rs mov a,r1 movc a,@a+dptr lcall lcd_d inc r1 djnz r0,lcd_dat_1 mov dptr,#tab_lcd2 mov a,#0c0h lcall lcd_c mov r0,#10h mov r1,#00h lcd_dat_2: setb rs mov a,r1 movc a,@a+dptr lcall lcd_d inc r1 djnz r0,lcd_dat_2 ret lcd_c: ;送指令 lcall busy clr rs clr rw setb e mov c,acc.7 mov db7,c mov c,acc.6 mov db6,c mov c,acc.5 mov db5,c mov c,acc.4 mov db4,c clr e setb e mov c,acc.3 mov db7,c mov c,acc.2 mov db6,c mov c,acc.1 mov db5,c mov c,acc.0 mov db4,c clr e ret lcd_d: ;送数据 lcall busy setb rs clr rw setb e mov c,acc.7 mov db7,c mov c,acc.6 mov db6,c mov c,acc.5 mov db5,c mov c,acc.4 mov db4,c clr e setb e mov c,acc.3 mov db7,c mov c,acc.2 mov db6,c mov c,acc.1 mov db5,c mov c,acc.0 mov db4,c clr e ret busy: setb db7 clr rs setb rw w1: setb e mov c,db7 jc w1 ret ;************************************ ;rf_dat ;************************************ r_dat: clr l_e clr c mov a,#05h sw: clr dat setb clk nop nop mov r3,#06h clr clk rl a rl a s_r: rlc a mov dat,c setb clk nop nop clr clk djnz r3, s_r mov r3,#08h mov a,#00h s_r2: rlc a mov dat,c setb clk nop nop clr clk djnz r3, s_r2 setb dat setb clk nop nop clr clk clr dat setb l_e nop nop clr l_e nop nop clr a ret ;**************************************************** rx: mov a,#8eh lcall lcd_c mov a,#52h lcall lcd_d mov a,#58h lcall lcd_d mov r3,#3 mov a,#00h rl a rl a rl a rl a rl a ;clr p1.0 nh: rlc a mov dat,c setb clk nop nop clr clk djnz r3,nh mov r3,#8 mov a,rx_nl nl: rlc a mov dat,c setb clk nop nop clr clk djnz r3,nl mov a,rx_a mov r3,#7 rl a na: rlc a mov dat,c setb clk nop nop clr clk djnz r3,na clr dat setb clk nop nop clr clk setb l_e nop nop clr l_e clr a clr c mov r0 ,#08h mov a,#01h rx_1: setb clk rlc a mov dat ,c clr clk djnz r0,rx_1 setb stb nop nop clr stb ret ;========================================= tx: mov a,#8eh lcall lcd_c mov a,#54h lcall lcd_d mov a,#58h lcall lcd_d mov r3,#3 mov a,#00h rl a rl a rl a rl a rl a sd_h: rlc a mov dat,c setb clk nop nop clr clk djnz r3,sd_h mov r3,#8 mov a,tx_nl sd_m: rlc a mov dat,c setb clk nop nop clr clk djnz r3,sd_m mov a,tx_a mov r3,#7 rl a sd_l: rlc a mov dat,c setb clk nop nop clr clk djnz r3,sd_l clr dat setb clk nop nop clr clk setb l_e nop nop clr l_e clr a clr c mov r0 ,#08h mov a,#30h tx_1: rlc a mov dat ,c setb clk nop clr clk djnz r0,tx_1 setb stb nop nop clr stb ret ;********************************************************** ;dat ;********************************************************** up_dat: mov a,ch inc a cjne a,#21,x1 mov a,#10 x1: mov ch ,a ret dow_dat: mov a,ch mov r0,a djnz r0,x2 mov r0,#10 mov a,r0 x2: mov ch,a ret dat_dat: mov a,ch mov dptr,#f_rnl movc a,@a+dptr mov rx_nl,a mov a,ch mov dptr ,#f_ra movc a,@a+dptr mov rx_a,a mov a,ch mov dptr,#f_tnl movc a,@a+dptr mov tx_nl,a mov a,ch mov dptr,#f_ta movc a,@a+dptr mov tx_a,a clr a ret ;******************************************************************* ; ;******************************************************************* delay_ll: mov r3,#09fh dly_7: mov r4,#1fh dly_6: lcall delay_l djnz r4,dly_6 djnz r3,dly_7 ret delay_s: mov r1,#0ah dly_1: mov r0,#0ffh djnz r0,$ djnz r1,dly_1 ret delay_l: mov r1,#0fh dly_2: mov r0,#19h djnz r0,$ djnz r1,dly_2 ret tab_lcd1: db 46h,4dh,20h,32h,39h,2eh,36h,30h,30h,20h,20h,31h,30h,4bh,48h,7ah tab_lcd2: db 54h,4bh,2dh,36h,33h,30h,20h,42h,59h,20h,42h,47h,37h,59h,44h,4fh tab_lcd3: db 20h,2ah,2ah,20h,57h,45h,4ch,4ch,43h,4fh,4dh,45h,20h,2ah,2ah,20h tab_lcd4: db 48h,41h,50h,50h,59h,20h,44h,49h,59h,20h,42h,47h,37h,59h,44h,4fh f_rnl: db 3eh,3eh,3eh,3eh,3eh, 3eh,3eh,3eh,3eh,3eh, 3eh,3eh,3fh,3fh,3fh, 3fh,3fh,3fh,3fh,3fh f_ra: db 34h,35h,36h,37h,38h, 39h,3ah,3bh,3ch,3dh, 3eh,3fh,00h,01h,02h, 03h,04h,05h,06h,07h f_tnl: db 2eh,2eh,2eh,2eh,2eh, 2eh,2eh,2eh,2eh,2eh, 2eh,2eh,2eh,2eh,2eh, 2eh,2eh,2eh,2eh,2eh f_ta: db 06h,07h,08h,09h,0ah, 0bh,0ch,0dh,0eh,0fh, 10h,11h,12h,13h,14h, 15h,16h,17h,18h,19h e
|