本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
MSEC EQU 20H; 定义内存单元
SECOND EQU 21H;
MIN EQU 22H;
HOUR EQU 23H;
ORG 0000H ;
LJMP MAIN
ORG 000BH ;定时器0中断向量
LJMP CONT
MAIN:MOV SP,#3FH ;设置栈底
MOV TMOD,#01H; 定时器工作模式
MOV TH0,#3CH; 初值高位
MOV TL0,#0B0H; 初值低位
MOV IE ,#82H; 开中断,启动
MOV SECOND,#00H;计数器清0
MOV MIN,#00H;
MOV HOUR,#00H;
MOV MSEC,#14H;
MOV 35H,#00H;显示缓存清0
MOV 34H,#00H;
MOV 33H,#00H;
MOV 32H,#00H;
MOV 31H,#00H;
MOV 30H,#00H;
SETB TR0; 启动定时器
START: LCALL DISP; 调用显示子程序
SJMP START; 等待定时器中断
DISP: MOV R0,#30H;显示子程序
MOV R7,#00H; 时间初值
MOV R2,#06H;
MOV R3,#20H;
MOV A,@R0;
DISP1:MOV DPTR,#TAB;字形表首址
MOVC A,@A+DPTR;读字形码
MOV P0,A;送p0口
MOV A,R3;位码
MOV P2,A;
DJNZ R7,$;延时
DJNZ R7,$;延时
RR A;下一位数字
MOV R3,A;
INC R0;读下一个数值
MOV A,@R0;
DJNZ R2,DISP1;
RET;
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
CONT: PUSH ACC ;中断服务程序
MOV TH0,#3CH; 重装定时器初值
MOV TL0,#0B0H;
DJNZ MSEC,RN;
MOV MSEC,#14H; 中断次数计数器20次,
INC SECOND; 秒加1
MOV A,SECOND;
MOV R1,#31H;
LCALL BINBCD; 调用转换BCD码子程序
MOV A,SECOND;
CJNE A,#60,RN;达到60秒,分加1
MOV A,#00;
MOV SECOND,A
MOV R1,#31H
LCALL BINBCD;
MOV A,MIN;
INC A
MOV MIN,A;
MOV R1,#33H;
LCALL BINBCD;
MOV A,MIN ;达到60分,小时加1
CJNE A,#60,RN;
MOV A,#00H;
MOV MIN,A;
MOV R1,#33H;
LCALL BINBCD;
MOV A,HOUR;
INC A
MOV HOUR,A;
MOV R1,#35H;
LCALL BINBCD;
MOV A,HOUR;
CJNE A,#24,RN;
MOV A,#00H
MOV HOUR,A;
MOV R1,#35H
LCALL BINBCD
RN: POP ACC
RETI;
BINBCD: ;BIN->BCD转换子程序
MOV B,#10
DIV AB;
MOV @R1,A;
DEC R1
MOV A,B;
MOV @R1,A;
RET
END
[ 此帖被风度尔在2010-12-13 20:58重新编辑 ]
|