No.25094 作者:fangqi923 邮件:fangqi@sina.com ID:10742 登陆:1次 文章数:13篇 最后登陆IP:61.240.13.67 最后登陆:2003/5/15 18:04:32 注册:2003/3/31 23:24:53 财富:141 发帖时间:2003/4/15 3:51:42 发贴者IP:210.52.160.203 标题:fangqi923:老古请帮我看看我写的这个程序,是不是可以实现我昨天和你说的那个功能! 摘要:No.25094老古请帮我看看我写的这个程序,是不是可以实现我昨天和你说的那个功能! 我没有用到中断,你看看可以吗?我想了一夜!希望你有时间能够帮我看看,我觉得理论上应该是可以的! $INCLUDE (C8051F020.INC) ;P1口输出BCD码, P2口的0,1,2,3输出位地址数据,P2口的5,6分别为设置键,P2口的7键为输出键 低电平有效 ;---------------------------------------------- SELECT_KEY EQU P2.5 ;位置选择键 T_KEY EQU P2.6 ;调整键 JDQ EQU P2.7 ;输出键 S_DATA DATA 50H ;秒 M_DATA DATA 51H ;分 H_DATA DATA 52H ;时 T_DATA DATA 53H ;计数器 ;程序从0000H单元开始 ORG 0000H LJMP MAIN ;------------------------------------------ ;设置中断跳转程序地址入口 ORG 000BH;T0定时中断0入口地址 LJMP DS0ZD;跳转到T0中断程序 ;------------------------------------------- ;主程序开始设置各个寄存器和初始值,使之按一定的要求来完成 MAIN: MOV OSCXCN,#66H MOV WDTCN,#0DEH MOV WDTCN,#0ADH MOV XBR0,#04H MOV XBR1,#1EH MOV XBR2,#40H MOV P1MDOUT,#0FFH;两口复位 MOV P2MDOUT,#0FFH MOV CKCON,#08H MOV OSCICN,#08H WAIT: MOV A,OSCXCN JNB ACC.7,WAIT MOV SP,#70H MOV R0,#00H MOV R1,#00H MOV R2,#00H ;秒个位 MOV R3,#00H ;秒十位 MOV R4,#00H ;分个位 MOV R5,#00H ;分十位 MOV R6,#00H ;时个位 MOV R7,#00H ;时十位 MOV S_DATA,#00H MOV M_DATA,#00H MOV H_DATA,#00H MOV T_DATA,#00H MOV TMOD,#02H ;T0采用方式2 自动装载 MOV TL0,#06H ;定时器初值 MOV TH0,#06H SETB EA SETB ET0 SETB TR0 ;********************循环程序开始************************ START: LCALL FEN LCALL XSCX00 LCALL KEY ;LCALL CONTROL AJMP START ;------------------------------------------------- FEN: MOV A,S_DATA LCALL HEX_BCD MOV R3,A MOV R2,B ; MOV A,M_DATA LCALL HEX_BCD MOV R5,A MOV R4,B ; MOV A,H_DATA LCALL HEX_BCD MOV R7,A MOV R6,B RET ;------------------------------------------------- ;显示程序开始1 XSCX00:;显示程序,将需要显示的位数和需要显示的数据起始地址写入再将BCD码表写入DPTR PUSH ACC MOV A,#00H MOV R0,#02H;将要显示数据的起始地址写入R0(这里是从分钟开始) MOV DPTR,#ZB0;将LED码表写入DPTR MOV R1,#04H;将所需要的显示位数写入R1 XSCX01: MOV A,@R0;将数据传到A MOVC A,@A+DPTR;将所需要显示的BCD码写入A MOV P1,A;将BCD码传到P1口 MOV A,P2;将位地址读入A CJNE A,#0FFH,GUO;检查位地址是0FFH,若不是则跳过,若是运行下一步 MOV P2,#01H;将第一位传到P2口 LJMP TIAOGUO;跳转到TIAOGUO GUO: RL A;A中内容左移一位 MOV P2,A;将位地址传出到P2口 TIAOGUO: LCALL YS0 INC R0 DJNZ R1,XSCX01 MOV P2,#0FFH POP ACC RET ;--------------------------------------------- ;------------------------------------------------- ;显示程序开始2 只显示分钟,不显示小时 XSCX01:;显示程序,将需要显示的位数和需要显示的数据起始地址写入再将BCD码表写入DPTR PUSH ACC MOV A,#00H MOV R0,#02H;将要显示数据的起始地址写入R0(这里是从分钟开始) MOV DPTR,#ZB0;将LED码表写入DPTR MOV R1,#02H;将所需要的显示位数写入R1 XSCX01: MOV A,@R0;将数据传到A MOVC A,@A+DPTR;将所需要显示的BCD码写入A MOV P1,A;将BCD码传到P1口 MOV A,P2;将位地址读入A CJNE A,#0FFH,GUO;检查位地址是0FFH,若不是则跳过,若是运行下一步 MOV P2,#01H;将第一位传到P2口 LJMP TIAOGUO;跳转到TIAOGUO GUO: RL A;A中内容左移一位 MOV P2,A;将位地址传出到P2口 TIAOGUO: LCALL YS0 INC R0 DJNZ R1,XSCX01 MOV P2,#0FFH POP ACC RET ;--------------------------------------------- ;------------------------------------------------- ;显示程序开始3 只显示小时,不显示分钟 X ......
>>返回讨论的主题
|