傻大方


首页 > 学习 >

课程设计|课程设计LED点阵电子钟( 二 )



按关键词阅读: 电子钟 点阵 LED 课程设计


通过本次的课程设计 , 加深了我们对单片机的理解 , 使得我们更加熟悉单片机的程序编写 。
九、单片机系统源程序;
= ;
Program Name: Led Matrix Clock;
Writer: Gun;
Function: Display the time and the day ;
Last edit time: 2011/6/21 SCAU;
=;
=定义引脚和数据存储区=SECOND EQU 30HMIN EQU 31HHOUR EQU 32HDAY EQU 33HMON EQU 34H;
YEAR EQU 35HFLAG EQU 37H;
=ORG 0000H;
LJMP MAIN;
ORG 。

8、 001BHAJMP SHIJIAN;
ORG 0090H;
=主程序=MAIN:;
=初始化时间=MOV SECOND,#40H;
MOV MIN,#15H;
MOV HOUR,#09H;
MOV DAY,#22H;
MOV MON,#6H;
MOV YEAR,#11H;
=MOV FLAG,SECOND;
Flag用于控制秒点闪烁INC FLAG;
MOV P1,#0FFH;
关显示MOV P2,#00H;
MOV P3,#00H;
MOV IE,#88H;
设置中断 , 定时100msMOV TMOD,#10H;
设T1工作于模式1MOV 20H,#0AH;
重置中断次数 , 10次即一秒SETB ET1;
允许T1中断SETB。

9、EA;
允许CPU中断MOV TH1,#3CH;
赋初值MOV TL1,#0B0H;
SETB TR1;
开中断XS:LCALL DISPLAY;
调用显示子程序MOV A,SECOND;
CJNE A,#50H,XS;
若为50秒即滚动显示日期LCALL DIS_DAY;
调用显示日期子程序AJMP XS;
循环 , 等待中断;
=中断程序=SHIJIAN:PUSH PSW;
保护现场 PUSH ACC;
CLR TR1;
关中断MOV TH1,#3CH;
重新赋初值MOV TL1,#0B0H;
DJNZ 20H,RETURN;
1s未到,返回MOV 20H,#0AH;
够了就重置MOV A,#01H;
ADD A,SECOND;


10、秒加一DA A;
MOV SECOND,A;
转化为BCD码CJNE A,#60H,RETURN;
秒不为60就返回MOV SECOND,#00H;
够60就秒置零MOV A,#01;
ADD A,MIN;
分加一DA A;
MOV MIN,A;
转化为BCD码CJNE A,#60H,RETURN;
分不为60就返回MOV MIN,#00H;
够60就置零MOV A,#01H;
ADD A,HOUR;
时加一DA A;
MOV HOUR,A;
CJNE A,#24H,RETURN;
同上,日处理MOV HOUR,#00H;
MOV A,#01H;
ADD A,DAY;
DA A;
MOV DAY,A;
CJNE A,#30H,RET 。

11、URN;
同上,月处理MOV DAY,#01H;
MOV A,#01H;
ADD A,MON;
DA A;
MOV MON,A;
CJNE A,#12H,RETURN;
同上,年处理MOV MON,#01H;
MOV A,#01H;
ADD A,YEAR;
DA A;
MOV YEAR,A;
RETURN:SETB TR1;
开中断POP ACC;
恢复现场POP PSW;
RETI;
=显示时间子程序=DISPLAY:MOV R1,#32H;
显示时MOV DPTR,#TAB;
读表MOV R3,#0FEH;
列控制LCALL DIS1;
左屏显示子程序MOV P2,#00H;
关显示MOV R1,#31H;
显示分MOV DPTR, 。

12、#TAB;
MOV R3,#0FBH;
列控制LCALL DIS2;
右屏显示子程序MOV P3,#00H;
关显示MOV A,SECOND;
CJNE A,FLAG,DIS_KONG;
若flag与当前的秒相同就显示秒点LCALL DIS_MIAO;
显示秒点RET;
=左屏显示子程序=DIS1: MOV R2,#6;
要显示两位数字共6列MOV B,#3;
一位数字3列MOV A,R1;
取入口地址R1对应的值MOV R0,#00H;
XCHD A,R0;
低位存在R0,高位存在ASWAP A;
MUL AB;
获得对应值表的首地址MOV R4,A;
R4暂存D_0:MOV A,R4;
MOVC A,A+DPTR;
取表数据 。

13、MOV P2,A;
显示INC R4;
下一个数据MOV P1,R3;
开显示MOV A,R3;
RL A;
指向下一列MOV R3,A;
CJNE R2,#4,D_1;
第一位数是否显示完 , 否就继续MOV A,R0;
是就把低位值赋给A查表MOV B,#3;
MUL AB;
MOV R4,A;
D_1:LCALL DELAY;
延时MOV P2,#00H;
DJNZ R2,D_0;
MOV P1,#0FFH;
RET;
=右屏显示子程序=DIS2: MOV R2,#6;
跟左屏功能一样 , P2显示换为P3MOV B,#3;
MOV A,R1;
MOV R0,#00H;
XCHD A,R0;
SWAP A;
MUL AB;
MOV R4, 。

14、A;
D_2:MOV A,R4;
MOVC A,A+DPTR;
MOV P3,A;
INC R4;
MOV P1,R3;
MOV A,R3;
RL A;
MOV R3,A;
CJNE R2,#4,D_3;
MOV A,R0;
MOV B,#3;
MUL AB;
MOV R4,A;
D_3:LCALL DELAY;
MOV P3,#00H;
DJNZ R2,D_2;
MOV P1,#0FFH;
RET;
=秒点为空=DIS_KONG:MOV FLAG,A;
INC FLAG;
RET;
=显示秒点子程序=DIS_MIAO:MOV P1,#7FH;
显示秒点数据MOV P2,#66H;
LCALL DELAY;
MOV P2,#00H;
MOV。

15、P1,#0FEH;
MOV P3,#66H;
LCALL DELAY;
MOV P3,#00H;
RET;
=显示日期子程序=DIS_DAY:MOV R1,#38H;
要滚动的数据存储首地址MOV R0,#32H;
保存当前的时LCALL SAVE_DAY;
调用保存子程序MOV R1,#00H;
保存分割用的字符数据INC R1;
MOV R1,#66H;
INC R1;
MOV R1,#66H;
INC R1;
MOV R1,#00H;
INC R1;
MOV R0,#31H;
保存当前的分LCALL SAVE_DAY;
调用保存子程序;
=TODAY IS 20=MOV R2,#28H;
保存要显示的字符“Today is。

16、20”MOV DPTR,#ZIFU;
查表CLR A;
DD:MOVC A,A+DPTR;
MOV R1,A ;
INC R1;
CLR A;
INC DPTR;
DJNZ R2,DD;
=年=MOV R0,#35H;
保存当前年数据LCALL SAVE_DAY;


稿源:(未知)

【傻大方】网址:/a/2021/0625/0022584250.html

标题:课程设计|课程设计LED点阵电子钟( 二 )


上一篇:维修|维修资金申请报告

下一篇:多彩的光2|新课标沪科版中考复习专题:第四章《多彩的光(2)》附答案