|
kg equ p3.1 ;档位选择控制 k equ p3.2 ;门控开关控制 res equ p3.3;4040复位 e equ p3.5 ;lcd rs rw equ p3.6;lcd rw rs equ p3.7;lcd e org 0000h mov sp,#60h setb res ;4040清零 ;显示屏初始化 setb e mov p1,#00000001b ;清屏 acall enable mov p1,#00001100b ;显示器开、光标开、闪烁开 acall enable mov r0,#0efh tt: nop djnz r0,tt ;延时 mov tmod,#00000101b ;清计数器及计数ram start: mov p0,#0ffh mov p2,#0ffh mov tl0,#00h mov th0,#00h jb kg,ghz ;读档位控制开关,为1转为另一档 clr res ;使4040可计数 setb tr0 ;启动计数器0 setb k ;开计数开关并延时1s,mcu时钟频率为12.8m mov r1,#08h time01: mov r2,#0ffh time02: mov r3,#0ffh time03: djnz r3,time03 djnz r2,time02 djnz r1,time01 mov r1,#01h time11: mov r2,#027h time12: mov r3,#0ffh time13: djnz r3,time13 djnz r2,time12 djnz r1,time11 mov r1,#01h time21: mov r2,#01h time22: mov r3,#33h time23: djnz r3,time23 djnz r2,time22 djnz r1,time21 ;nop ;时间精确调整 clr k ;关计数开关 nop nop nop clr tr0 ;关计数器0 ;读入计数值 mov 20h,p0 mov 21h,p2 mov 22h,tl0 mov 23h,th0 mov a,22h swap a mov 22h,a anl 21h,#0fh anl a,#0f0h orl 21h,a mov a,23h swap a mov 23h,a anl 22h,#0fh anl a,#0f0h orl 22h,a anl 23h,#0fh setb res ajmp count ghz: clr res ;使4040可计数 setb tr0 ;启动计数器0 setb k ;开计数开关并延时4s,mcu时钟频率为12.8m mov r1,#020h time01g: mov r2,#0ffh time02g: mov r3,#0ffh time03g: djnz r3,time03g djnz r2,time02g djnz r1,time01g mov r1,#01h time11g: mov r2,#09ch time12g: mov r3,#0ffh time13g: djnz r3,time13g djnz r2,time12g djnz r1,time11g mov r1,#01h time21g: mov r2,#01h time22g: mov r3,#0dfh time23g: djnz r3,time23g djnz r2,time22g djnz r1,time21g nop ;时间精确调整 clr k ;关计数开关 nop nop nop clr tr0 ;关计数器0 ;读入计数值 mov 20h,p0 mov 21h,p2 mov 22h,tl0 mov 23h,th0 ;将计数值乘16 mov a,21h swap a mov 21h,a anl a,#0f0h mov a,20h swap a mov 20h,a anl 20h,#0f0h anl a,#0fh orl 21h,a setb res ;多(四)字节二转十,入口r0为二进制低位字节地址指针,r7为字节数,出口r1为bcd码结果低位字节地址指针 count: mov r0,#20h mov r1,#30h mov r7,#04h bmbcd: mov a,r0 mov r5,a mov a,r1 mov r6,a mov a,r7 mov r3,a inc r3 clr a clbcd: mov @r1,a inc r1 djnz r3,clbcd mov a,r7 mov b,#08h mul ab mov r3,a lp0: mov a,r5 mov r0,a mov a,r7 mov r2,a clr c lp1: mov a,@r0 rlc a mov @r0,a inc r0 djnz r2,lp1 mov a,r6 mov r1,a mov a,r7 mov r2,a inc r2 lp2: mov a,@r1 addc a,@r1 da a mov @r1,a inc r1 djnz r2,lp2 djnz r3,lp0 mov r0,#30h mov r1,#24h abc:mov a,@r0 anl a,#00001111b orl a,#30h mov @r1,a mov a,@r0 anl a,#11110000b rl a rl a rl a rl a orl a,#30h inc r1 mov @r1,a inc r0 inc r1 cjne r0,#036h,abc ;从高往底判断,不是0就开始显示 mov 02eh,#20h mov r1,#02dh cjne @r1,#030h,mhz;2d mov @r1,#020h dec r1 cjne @r1,#030h,mhz;2c mov @r1,#020h dec r1 cjne @r1,#030h,mhz;2b mov @r1,#020h dec r1 cjne @r1,#030h,mhz;2a mov @r1,#020h dec r1 cjne @r1,#030h,khz;29 mov @r1,#020h dec r1 cjne @r1,#030h,khz;28 mov @r1,#020h dec r1 cjne @r1,#030h,khz;27 mov @r1,#020h dec r1 cjne @r1,#030h,hz;26 mov @r1,#020h dec r1 cjne @r1,#030h,hz;25 mov @r1,#020h dec r1 cjne @r1,#030h,hz;24 ajmp no_ok mhz: mov r0,#23h mov @r0,#4dh;23 dec r0 mov @r0,#48h;22 dec r0 mov @r0,#7ah;21 dec r0 mov @r0,#20h;20 mov a,02ch mov 02dh,a mov a,02bh mov 02ch,a mov a,02ah mov 02bh,a mov 02ah,#2eh ajmp hz00 khz: mov r0,#23h mov @r0,#4bh;23 dec r0 mov @r0,#48h;22 dec r0 mov @r0,#7ah;21 dec r0 mov @r0,#20h;20 mov a,029h mov 02ah,a mov a,028h mov 029h,a mov a,027h mov 028h,a mov 027h,#2eh ajmp hz00 hz: mov r0,#23h mov @r0,#48h;23 dec r0 mov @r0,#7ah;22 dec r0 mov @r0,#20h;21 dec r0 mov @r0,#20h;20 hz00:mov 10h,#053h; mov 011h,#49h; mov 012h,#47h mov 013h,#4eh mov 014h,#41h mov 015h,#4ch mov 016h,#20h mov 017h,#46h mov 018h,#52h mov 019h,#45h mov 01ah,#51h mov 01bh,#55h mov 01ch,#45h mov 01dh,#4eh mov 01eh,#43h mov 01fh,#59h ajmp ok no_ok:;没有信号时显示的数据 mov 010h,#4eh mov 011h,#4fh mov 012h,#20h mov 013h,#49h mov 014h,#4eh mov 015h,#50h mov 016h,#55h mov 017h,#54h mov 018h,#20h mov 019h,#53h mov 01ah,#49h mov 01bh,#47h mov 01ch,#4eh mov 01dh,#41h mov 01eh,#4ch mov 01fh,#21h mov r0,#20h bbb: mov @r0,#020h inc r0 cjne r0,#030h,bbb ok: acall display ajmp start display: mov r0,#010h ;显示第一行 mov p1,#00111000b ;8位2行5x7点阵 acall enable mov p1,#00000110b ;文字不动,光标自动右移 acall enable mov p1,#10000000b ;写入显示起始地址(第一行第一个位置) acall enable display1 :mov p1,@r0 ;第一行第n个位置 acall write inc r0 cjne r0,#020h,display1 ;显示第二行 mov p1,#00000100b ;文字不动,光标自动左移 acall enable mov p1,#00111100b ;8位2行5x10点阵 acall enable mov p1,#0ceh ;写入显示起始地址(第二行第十五个位置) acall enable display2: mov p1,@r0 ;第二行第15个位置 acall write inc r0 cjne r0,#02eh,display2 ret enable: clr rs ;写入控制命令的子程序 clr rw clr e acall delay setb e ret write: clr rs ;显示一个字符的子程序 setb rs ;rs=1 clr rw ;rw=0 clr e ;e=0 acall delay setb e ;e=1 ret delay: mov p1,#0ffh ;判断液晶显示器是否忙的子程序 clr rs setb rw clr e nop setb e jb p1.7,delay ;如果p1.7为高电平表示忙就循环等待 ret end 谁能翻译成下c程序啊,求求大家了  我看不懂汇编
|