单片机课程动静态显示设计方案_第1页
单片机课程动静态显示设计方案_第2页
单片机课程动静态显示设计方案_第3页
单片机课程动静态显示设计方案_第4页
单片机课程动静态显示设计方案_第5页
已阅读5页,还剩24页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程动静态显示设计方案一、设计任务与要求1.1设计背景随着科学技术的开展和电子技术产业结构调整,单片机开始迅速开展,由于家用电器逐渐普及,市场对于智能时钟限制系统的需求也越来越大.单片机以其芯片集成度高、处理功能强、可靠性高等优点,成功应用于工业自动化、智能仪器仪表、家电产品等领域.近些年,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求.多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等.单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉.但是却很少知道它的部结构以及工作原理.由单片机作为数字钟的核心限制器,可以通过

2、它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来.通过键盘可以进行定时、校时功能.输出设备显示器可以用液晶显示技术和数码管显示技术.单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试.1.2课程设计目的通过?单片机原理与应用?课程设计,使学生掌握单片机及其扩展系统设计进一步加深单片机及其扩展系统设单片机=数码管显示计和应用的理解1.3设计要求1、主电路系统由秒信号发生器、“时、分、秒计数器、译码器及显示器、校时电路、整点报时电路组成2、秒信号产生器是整个系统的时基信号,它直接决定计时系统

3、的精度,一般用石英晶体振荡器加分频器来实现.将标准秒信号送入“秒计数器,“秒计数器采用 60 进制计数器,每累计 60 秒发出一个“分脉冲信号,该信号将作为“分计数器的时钟脉冲.“分计数器也采用 60 进制计数器,每累计 60 分钟,发出一个“时脉冲信号,该信号将被送到“时计数器.“时计数器采用 24 进制计时器,可实现对一天 24 小时的累计3、译码显示电路将“时、“分、“秒计数器的输出状态菁七段显示译码器译码,通过六位 LED 七段显示器显示出来4、校时电路时用来对“时、“分、“秒显示数字进行校对调整的二、总体方案设计2.1电路的总体原理框图根据以上的电子时钟的设计要求可以分为以下的几个硬

4、件电路模块:单片机模块、数码显示模块与按键模块,模块之间的关系图如下面得方框电路图 1 所示时间调整器图 1 硬件电路方框图2.2实现时钟计时的根本方法利用 STC 系列单片机的可编程定时/计数器、中断系统来实现时钟计数.(1)计数初值计算:把定时器设为工作方式 1,定时时间为 50ms,那么计数溢出 20 次即得时钟计时最小单位秒,而 100 次计数可用软件方法实现.假设使用 T/C0,方式 1,50ms 定时,fosc=12MHz.贝 U 初值 X 满足(216-X)X1/12MHzX12ds=50000sX=1553A100003CB0H(2)采用中断方式进行溢出次数累计,计满 20 次

5、为秒计时(1 秒);(3)从秒到分和从分到时的计时是通过累加和数值比拟实现.2.3电子钟的时间显示电子钟的时钟时间在六位数码管上进行显示,因此,在部 RAW 设置显示缓冲区共 8个单元.LED8LED7LED6LED5LED4LED3LED2LED137H36H35H34H33H32H31H30H时十位时个位分隔分十位分个位分隔秒十位秒个位2.4 电子钟的时间调整3 个按键通过程序限制来完成电子钟的时间调整.A 键按一次调整时,按第二次调整分钟,第三次推出时间调整;B 键对小时或分钟进行加一;C 键对小时或分钟进行减一;2.5 总体方案介绍2.5.1 计时方案利用 STC89C52 单片机部的

6、定时/计数器进行中断时,配合软件延时实现时、分、秒的计时.该方案节省硬件本钱,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提升,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用.2.5.2 限制方案STC89C52 勺 P0 口和 P1 口外接由八个 LED码管(LED8LED1)构成的显示器,用 P0 口作 LED的段码输出口,P1 口作八个 LED 数码管的位控输出线,P3 口外接四个按键AB、C 构成键盘电路.STC89C52是一种低功耗,高性能的CMOS眩微型计算机.它带有8KFlash可编程和擦除的只读存储器(EPROM,该器件采用 AT

7、MEL 勺高密度非易失性存储器技术制造,与工业上标准的 80C51 和 80C52 的指令系统及引脚兼容,片 Flash 集成在一个芯片上,可用与解决复杂的问题,且本钱较低.简易电子钟的功能不复杂,采用其现有的 I/O 便可完成,所以本设计中采用此的设计方案.三、数字钟的硬件设计3.1 最小系统3.1.1 芯片分析STC89C52片机弓 I 脚图如下:,川_0U1叩njftnn中UM醛XTA12,口加D3也即值相以依眶RSTPQMDTP21WP2.W悭密加pStfFF23W11MEP21JAt2函他SUBP2OI4m科德Fl灯P3IFRXDpi.ipj.irrKjDMJP3J/1MTHPlJ用

8、国NFFl4P3,UDP1P3J5H1PlJ5恒P1.7P却底T39DO/1B38Ply7iMz35g/9壬口.J4DEyR 吟四_BIy因31PSj凝R叩,q24国25351J?3gId12*IQu*PU614肉16Lirfi图 3-1STC89C52 弓唧图MCS-51 单片机是标准的 40 引脚双列直插式集成电路芯片,其各引脚功能如下:VCC+5V 电源.VSS 接地.RST 复位信号.当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作.XTAL1 和 XTAL2 外接晶体引线端.当使用芯片部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时

9、,用于接外部时钟脉冲信号.P0 口:P0 口为一个 8 位漏极开路双向 I/O 口,当作输出口使用时,必须接上拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入“1,使 FET 截止,以预防锁存器为“0状态时对引脚读入的干扰.P1 口:P1 口是一个部提供上拉电阻的 8 位双向 I/O 口,它不再需要多路转接电路 MUX因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1,使输出驱动电路的 FET 截止.P2 口:P2 口电路比 P1 口电路多了一个多路转接电路 MUX 这又正好与 P0 口一样.P2口可以作为通用的 I/O 口使用,这时

10、多路转接电路开关倒向锁丰存器 Q 端.P3 口: P3 口特点在于,为适应引脚信号第二功能的需要,增加了第二功能限制逻辑.当作为 I/O 口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通.当输出第二功能信号时,该位应应置“1,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出,具体第二功能如表 3-1 所示.P3 引脚兼用功能P3.0串行通讯输入(RXDP3.1串行通讯输出(TXD)P3.2外部中断 0(INTO)P3.3外部中断 1(INT1)P3.4定时器 0 输入(T0)P3.5定时器 1 输入(T1)P3.6外部数据存储器写选通

11、 WRP3.7外部数据存储器写选通 RD表 3-1P3 端口引脚兼用功能表3.1.2 晶振电路右图所示为时钟电路原理图,在 AT89S51 芯片部有一个高增益反相放大器,其输入端为芯片引脚 XTAL1,输出端为引脚 XTAL2 而在芯片部,XTAL1 和 XTAL2 之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器.时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号.图 3-2 晶振电路3.2 数码显示模块设计显示器普遍地用于直观地显示数字系统的运行状态和工作数据,根据材料及产品工艺,单片机应用系统中常用的显示器有:发光二极管 LED 显示器、液晶 LCD 显

12、示器、CRT 显示器等.LED 显示器是现在最常用的显示器之一,如下列图所示.发光二极管LEDLED 由特殊的半导体材料神化钱、磷神化钱等制成,可以单独使用,也可以组装成分段式或点阵式 LEDLED 显示器件半导体显示器.分段式显示器LEDLED 数码管由 7 7 条线段围成 8 8 字型,每一段包含一个发光二极管.外加正向电压时二极管导通,发出清楚的光.只要按规律限制各发光段亮、 灭,就可以显示各种字形或符号.LEDtLEDt 码管有共阳、共阴之分.图是共阳式、共阴式 LEDLED 数码管的原理图和符号.共阳极T段数码首图 3-5 共阳式、共阴式 LED 数码管的原理图和数码管的符号图系统采

13、用动态显示方式,用 P0 口来限制 LED 数码管的段控线,而用 P2 口来限制其位控3-4LED 显示器的符号图线.动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉.四、系统软件设计4.1 软件设计分析在编程上,首先进行了初始化,定义程序的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时.分.秒,在显示初值之后,进入主循环.在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能.4.2 源程序清单DISBE

14、GEQU30HCALBEQUP1.7TIMCONEQU2FHORG0000HLJMPMAINORG0003HRETI;程序开始;关外中断 0I_TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H;显示数0123456789 不亮 C-A;存数01234567890AH0BH0CH0DH;STAB 表,启动时显示 2021 年 06 月 07 日、A01-01-15学号用STAB:DB0AH,0AH,0AH,0AH,0AH,0AH,05H,01H,0CH,01H,00H,0CH,01H,00H,0DH,0AH

15、,0AHDB07H,00H,0CH,06H,00H,0CH,03H,01H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AHDLY1M:MOVR6,#14H;1 毫秒延时DL_LOOP:MOVR7,#19HDL_LOOP1:DJNZR7,DL_LOOP1DJNZR6,DL_LOOPRETDLY20M:CLRCALB;20 毫秒延时LCALLD_II_PLAYLCALLD_II_PLAYLCALLD_II_PLAYSETBCALBRETDL_LOOPS:LCALLDL05SLCALLDL05SRETDL05S:MOVR3,#20H;8 毫秒*32=0.196 秒DL05S1:LCA

16、LLD_II_PLAYDJNZR3,DL05S1RET;程序开始;整点报时用CTIME:MOVA,#10HMOVB,79HMULABADDA,78HMOVTIMCON,ACLOOP:LCALLDLY20MLCALLDL_LOOPSLCALLDL_LOOPSORG000BHLJMPINTT0ORG0013H;定时器T0中断程序入口;跳至 INTTO 执行;关中断 1RETIORG001BHLJMPINTT1ORG0023H;定时器 T1 中断程序入口;跳至 INTT1 执行;关串行中断RETITAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0

17、FFH,88H,0BFH;共阳段码表0123456789不亮A-LCALLDL_LOOPSDJNZTIMCON,CLOOPCLR08HAJMPMLOOP1;主程序开始MAIN:LCALLST;上电显示年月日及班级学号MOVR0,#00H;清 00H-7FH 存单元MOVR7,#80H;MLOOP:MOVR0,#00H;INCR0;DJNZR7,MLOOP;MOV20H,#00H;清 20H标志用MOV7AH,#0AH;放入熄灭符数据MOVTMOD,#11H;设 T0、T1 为 16 位定时器MOVTL0,#0B0H;50MS 定时初值T0 计时用MOVTH0,#3CH;50MS 定时初值MOV

18、TL1,#0B0H;50MS 定时初值T1 闪烁定时用MOVTH1,#3CH;50MS 定时初值SETBEA;总中断开放SETBET0;允许 T0 中断SETBTR0;开启 T0 定时器MOVR4,#14H;1秒定时用计数值50MS20MOVDISBEG,#70H;显示单元为 70-75H;以下主程序循环MLOOP1:LCALLD_II_PLAY;调用显示子程序JNBP1.0,T_SETSC;P1.0 口为 0 时转时间调整程序JNBP1.1,DLY5;秒表功能,P1.1 按键调时时作减 1 加能JNBP1.2,FUNBT;秒表 STOP,PUSE,CLRJNBP1.3,TSETJB08H,C

19、TIMEAJMPMLOOP1;P1.0口为 1 时跳回 MLOOP1FUNBT:LJMPDLY6TSET:LCALLDLY20MJBP1.3,MLOOP1;TS_LOOP:JNBP1.3,TS_LOOP;等待键释放JB05H,CLRBELLMOVDISBEG,#50HMOV50H,#0CH-;MOV51H,#0AH;黑;MINCHG:SETBEALCALLD_II_PLAYJNBP1.2,DLY1;分加 1JNBP1.0,DLY3;分减 1JNBP1.3,DLY;进入时调整AJMPMINCHGCLRBELL:CLRCLRCALBAJMPMLOOP1DLY:LCALLDLY20M;消抖JBP1.

20、3,MINCHGLJMPDLY8;进入时调整T_SETSC:LJMPR_SETTIM;转到时间调整程序DLY1:LCALLDLY20M;消抖JBP1.2,MINCHGDLY2:LCALLD_II_PLAY;等键释放JNBP1.2,DLY2CLREAMOVR0,#53H;LCALLADD_1MOVA,R3;分数据放入ACLRC;清进位标志CJNEA,#60H,ADD_M;ADD_M:JCMINCHG;小于 60 分时返回ACALLCLR_H;大于或等于60 分时分计时单元清AJMPMINCHGDLY3:LCALLDLY20M;消抖JBP1.0,MINCHGDLY4:LCALLD_II_PLAY;

21、等键释放JNBP1.0,DLY4CLREAMOVR0,#53H;LCALLSUB_MLJMPMINCHG;以下秒表功能/时钟转换程序;按下 P1.1 可进行功能转换DLY5:LCALLDLY20MJBP1.1,T_MLOOP1JNBP1.1,$CPL03HJNB03H,DIS_SETMOVDISBEG,#60H;显示秒表数据单元MOV60H,#00HMOV61H,#00HMOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HMOVTL1,#0F0H;10MS 定时初值R_SETTIM005HMOVTH1,#0D8H;10MS 定时初值SETBTR1SETBET

22、1T_MLOOP1:LJMPMLOOP1DIS_SET:MOVDISBEG,#70H;显示时钟数据单元CLRET1CLRTR1TMLOOP11:LJMPMLOOP1;以下秒表暂停清零功能程序;按下 P1.2 暂停或清 0,按下 P1.1 退出秒表回到时钟计时DLY6:LCALLDLY20MJBP1.2,T_MLOOP11T_EST11:CLRJNBP1.2,T_EST11ET1CLRTR1T_EST22:JBJNBP1.1,DLY5P1.2,T_EST21LCALLDLY20MJBP1.2,T_EST22T_EST55:MOVJNBP1.2,T_EST5160H,#00HMOV61H,#00H

23、MOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HT_EST33:JBJNBP1.1,DLY5P1.2,T_EST31LCALLDLY20MJBP1.2,T_EST33T_EST44:SETBJNBP1.2,T_EST41ET1SETBTR1AJMPMLOOP1;以下键等待释放时显示不会熄灭用T_EST411:AJMPLCALLD_II_PLAYT_EST11T_EST21:AJMPLCALLD_II_PLAYT_EST22T_EST31:AJMPLCALLD_II_PLAYT_EST33T_EST41:AJMPLCALLD_II_PLAYT_EST44T

24、EST51:LCALLDIIPLAYAJMPT_EST55;1 秒计时程序;T0 中断效劳程序INTT0:PUSHACC;累加器入栈保护PUSHPSW;状态字入栈保护CLRET0;关 T0 中断允许CLRTR0;关闭定时器 T0MOVA,#0B7H;中断响应时间同步修正ADDA,TL0;低 8 位初值修正MOVTL0,A;重装初值低 8 位修正值MOVA,#3CH;高 8 位初值修正ADDCA,TH0MOVTH0,A;重装初值高 8 位修正值SETBTR0;开启定时器 T0DJNZR4,I_INT0;20 次中断未到中断退出A_DDS:MOVR4,#14H;20 次中断到1 秒重赋初值CPL0

25、7HMOVR0,#71H;指向秒计时单元71H-72HACALLADD_1;调用加 1 程序加 1 秒操作MOVA,R3;秒数据放入 AR3 为 2 位十进制数组合CLRC;清进位标志CJNEA,#60H,A_DDMA_DDM:JCI_INT0;小于 60 秒时中断退出ACALLCLR_H;大于或等于 60 秒时对秒计时单元清 0MOVR0,#77H;指向分计时单元76H-77HACALLADD_1;分计时单元加 1 分钟MOVA,R3;分数据放入 ACLRC;清进位标志CJNEA,#60H,A_DDH;A_DDH: JCI_INT0;小于 60 分时中断退出ACALLCLR_H;大于或等于

26、60 分时分计时单元清 0LCALLDLY20M;正点报时SETB08HMOVR0,#79H;指向小时计时单元78H-79HACALLADD_1;小时计时单元加 1 小时MOVA,R3;时数据放入 ACLRC;清进位标志CJNEA,#24H,RSTART;RSTART:JCI_INT0;小于 24 小时中断退出ACALLCLR_H;大于或等于 24 小时小时计时单元清 0I_INT0:MOV72H,76H;中断退出时将分、时计时单元数据移MOV73H,77H;入对应显示单元MOVLCALLPOP75H,79HBELLPSW;恢复状态字出栈POPACC;恢复累加器SETBET0;开放 T0 中断

27、RETI;中断返回;闪动调时程序秒表功能程序;T1 中断效劳程序,用作时间调整时调整单元闪烁指示或秒表计时INTT1:PUSHACC;中断现场保护PUSHPSWJB03H,R_ADDS;=1 时秒表MOVTL1,#0B0H;装定时器 T1 定时初值MOVTH1,#3CHDJNZR2,I_INT1;0.3 秒未到退出中断50MS 中断 6 次MOVR2,#06H;重装 0.3 秒定时用初值CPL02H;0.3 秒定时到对闪烁标志取反JB02H,FLASH0;02H 位为 1 时显示单元熄灭MOV72H,76H;02H 位为 0 时正常显示MOV73H,77HMOV74H,78HMOV75H,79

28、HI_INT1:POPPSW;恢复现场POPACCRETI;中断退出FLASH0:JB01H,FLASH1;01H 位为 1 时,转小时熄灭限制MOV72H,7AH;01H 位为 0 时,熄灭符数据放入分MOV73H,7AH;显示单元72H-73H,将不显示分数据MOV74H,78HMOV75H,79HAJMPI_INT1;转中断退出FLASH1:MOV72H,76H;01H 位为 1 时,熄灭符数据放入小时MOV73H,77H;显示单元74H-75H,小时将不显示MOV74H,7AHMOV75H,7AHAJMPI_INT1;转中断退出R_ADDS :CLRTR1MOVA,#0F7H;中断响应

29、时间同步修正,重装初值10msADDA,TL1;低 8 位初值修正MOVTL1,A;重装初值低 8 位修正值MOVA,#0D8H;高 8 位初值修正ADDCA,TH1MOVTH1,A;重装初值高 8 位修正值SETBTR1;开启定时器 T0JMOV74H,78HMOVR0,#61H;指向秒计时单元71H-72HACALLADD_1;调用加 1 程序加 1 秒操作CLRCMOVA,R3JZR_ADDM;加 1 后为 00,C=0AJMPI_INT01;加 1 后不为 00,C=1R_ADDM:ACALLCLR_H;大于或等于 60 秒时对秒计时单元清 0MOVR0,#63H;指向分计时单元76H

30、-77HACALLADD_1;分计时单元加 1 分钟MOVA,R3;分数据放入 ACLRC;清进位标志CJNEA,#60H,R_ADDHR_ADDH:JCI_INT01;小于 60 分时中断退出LCALLCLR_H;大于或等于 60 分时分计时单元清 0MOVR0,#65H;指向小时计时单元78H-79HACALLADD_1;小时计时单元加 1 小时I_INT01:POPPSW;恢复状态字出栈POPACC;恢复累加器RETI;中断返回;加 1 子程序ADD_1:MOVA,R0;取当前计时单元数据到 ADECR0;指向前一地址SWAPA;A 中数据高四位与低四位交换ORLA,R0;前一地址中数据

31、放入 A 中低四位ADDA,#01H;A 加 1 操作DAA;十进制调整MOVR3,A;移入 R3 存放器ANLA,#0FH;高四位变 0MOVR0,A;放回前一地址单元MOVA,R3;取回 R3 中暂存数据INCR0;指向当前地址单元SWAPA;A 中数据高四位与低四位交换ANLA,#0FH;高四位变 0MOVR0,A;数据放入当削地址单元中RET;子程序返回;分减 1 子程序;SUB_M:MOVA,R0;取当前计时单元数据到 ADECR0;指向前一地址SWAPA;A 中数据高四位与低四位交换ORLA,R0;前一地址中数据放入 A 中低四位JZSUB_M1DECA;A 减 1 操作SUB_M

32、11:MOV3,A;移入 R3 存放器ANLA,#0FH;高四位变 0CLRC;清进位标志SUBBA,#0AHSUB_M111:JCSUB_M110MOVR0,#09H;大于等于 0AH 为 9SUB_M10:MOVA,R3;取回 R3 中暂存数据INCR0;指向当前地址单元SWAPA;A 中数据高四位与低四位交换ANLA,#0FH;高四位变 0MOVR0,A;数据放入当削地址单元中RET;子程序返回;SUB_M1:MOVA,#59HAJMPSUB_M11SUB_M110:MOVA,R3;移入 R3 存放器ANLA,#0FH;高四位变 0MOVR0,AAJMPSUB_M10;时减 1 子程序S

33、UB_H:MOVA,R0;取当前计时单元数据到 ADECR0;指向前一地址SWAPA;A 中数据高四位与低四位交换ORLA,R0;前一地址中数据放入 A 中低四位JZSUB_H1;00 减 1 为 23小时DECA;A 减 1 操作SUB_H11:MOVR3,A;移入 R3 存放器ANLA,#0FH;高四位变 0CLRC;清进位标志SUBBA,#0AH;时个位大于 9 为 9SUB_H111:JCSUB_H110MOVR0,#09H;大于等于 0AH 为 9SUB_H10:MOVA,R3;取回 R3 中暂存数据INCR0;指向当前地址单元SWAPA;A 中数据高四位与低四位交换ANLA,#0F

34、H;高四位变 0MOVR0,A;时十位数数据放入RET;子程序返回SUB_H1:MOVA,#23HAJMPSUB_H11SUB_H110:MOVA,R3;时个位小于 0A 不处理ANLA,#0FH;高四位变 0MOVR0,A;个位移入AJMPSUBH10;清零程序;对计时单元复零用CLR_H:CLRA;清累加器MOVR0,A;清当前地址单元DECR0;指向前一地址MOVR0,A;前一地址单元清 0RET;子程序返回;时钟时间调整程序;当调时按键按下时进入此程序R_SETTIM:CLRET0;关定时器 T0 中断CLRTR0;关闭定时器 T0LCALLDL_LOOPS;调用 1 秒延时程序LCA

35、LLDLY20M;消抖JBP1.0,SLEEP;键按下时间小于 1 秒,关闭显示省电MOVR2,#06H;进入调时状态,赋闪烁定时初值MOV70H,#00H;调时时秒单元为 00 秒MOV71H,#00HSETBET1;允许 T1 中断SETBTR1;开启定时器 T1SET_2:JNBP1.0,SET_1;P1.0 口为 0键未释放,等待SETB00H;键释放,分调整闪烁标志置 1SET_4:JBP1.0,SET_3;等待键按下LCALLDL05S;有键按下,延时 0.5 秒LCALLDLY20M;消抖JNBP1.0,R_SETHH;按下时间大于 0.5 秒转调小时状态MOVR0,#77H;按

36、下时间小于 0.5 秒加 1 分钟操作LCALLADD_1;调用加 1 子程序MOVA,R3;取调整单元数据CLRC;清进位标志CJNEA,#60H,SET_ LOOP;调整单元数据与 60 比拟SET_LOOP:JCSET_4;调整单元数据小于 60 转 SET_4 循环LCALLCLR_H;调整单元数据大于或等于 60 时清 0CLRC;清进位标志AJMPSET_4;跳转到 SET_4 循环SLEEP:SETBET0;省电LED 不显示状态.开 T0 中断SETBTR0;开启 T0 定时器开时钟SET_LOOP1: JBP1.0,SET_LOOP1;无按键按下,等待.LCALLDLY20M

37、;消抖JBP1.0,SET_LOOP1;是干扰返回 SET_LOOP 等待SET_LOOP2: JNBP1.0,SET_LOOP2;等待键释放LJMPMLOOP1;返回主程序LED 数据显示亮R_SETHH:CLR00H;分闪烁标志去除进入调小时状态SETB01H;小时调整标志置 1SET_LOOP3: JNBP1.0,SET_5;等待键释放SET_6:JBP1.0,SET_7;等待按键按下LCALLDL05S;有键按下延时 0.5 秒LCALLDLY20M;消抖JNBP1.0,STOP;按下时间大于 0.5 秒退出时间调整MOVR0,#79H;按下时间小于 0.5 秒加 1 小时操作LCAL

38、LADD_1;调加 1 子程序MOVA,R3CLRCCJNEA,#24H,C_YHH;计时单元数据与 24 比拟C_YHH:JCSET_6;小于 24 转 SET_6 循环LCALLCLR_H;大于或等于 24 时清 0 操作AJMPSET_6;跳转到 SET_6 循环STOP:JNBP1.0,STOP1;调时退出程序.等待键释放LCALLDLY20M;消抖JNBP1.0,STOP;是抖动,返回 STOPW 等待CLR01H;清调小时标志CLR00H;清调分标志CLR02H;清闪烁标志CLRTR1;关闭定时器 T1CLRET1;关定时器 T1 中断SETBTR0;开启定时器 T0SETBET0

39、;开定时器 T0 中断计时开始LJMPMLOOP1;跳回主程序SET_1:LCALLD_II_PLAY;键释放等待时调用显示程序调分AJMPSET_2;预防键按下时无时钟显示SET_3:LCALLD_II_PLAY;等待调分按键时时钟显示用JNBP1.1,DLY7;减 1 分操作AJMPSET_4;调分等待SET_5:LCALLD_II_PLAY;键释放等待时调用显示程序调小时AJMPSET_LOOP3;预防键按下时无时钟显示SET_7:LCALLD_II_PLAY;等待调小时按键时时钟显示用JNBP1.1,DLY7B;小时减 1 操作AJMPSET_6;调时等待STOP1:LCALLD_II

40、_PLAY;退出时钟调整时键释放等待AJMPSTOP;预防键按下时无时钟显示;DLY7,分减1 程序?DLY7:LCALLDLY20M;消抖JBP1.1,SET_41;干扰,返回调分等待DLY7_M:JNBP1.1,DLY7_M;等待键放开MOVR0,#77HLCALLSUB_M;分减 1 程序LJMPSET_4;返回调分等待;SET_41:LJMPSET_4;DLY7B,时减 1 程序;DLY7B:LCALLDLY20M;消抖JBP1.1,SET_61;干扰,返回调时等待DLY7_H:JNBP1.1,DLY7_H;等待键放开MOVR0,#79HLCALLSUB_H;时减 1 程序LJMPSE

41、T_6;返回调时等待SET_61:LJMPSET_6;显示程序;显示数据在70H-75H 单元,用六位用六位 LED 共阳数码管显示,P0 口输出段码数据,;扫描限制,每个每个 LED 数码管亮 1MS 时间再逐位循环.D_II_PLAY: MOVR1,DISBEG;指向显示数据首址MOVR5,#0FEH;扫描限制字初值PLAY:MOVA,R5;扫描字放入 AMOVP2,A;从 P2 口输出MOVA,R1;取显示数据到 AMOVDPTR,#TAB;取段码表地址MOVCA,A+DPTR;查显示数据对应段码MOVP0,A;段码放入 P1 口MOVA,R5JBACC.2,D_LOOP;小数点处理CL

42、RP0.7;D_LOOP:JBACC.4,D_LOOP1;小数点处理CLRP0.7;D_LOOP1:LCALLDLY1M;显示 1MSINCR1;指向下一地址MOVA,R5;扫描限制字放入 AJNBACC.5,CLOSE;ACC.5=0 时一次显示结束RLA;A 中数据循环左移MOVR5,A;放回 R5MOVP0,#0FFHAJMPPLAY;跳回 PLAY 循环CLOSE:MOVP2,#0FFH;一次显示结束,P2 口复位MOVP0,#0FFH;P0 口复位RET;子程序返回;SD_II_PLAY,上电显示子程序;不带小数点显示,有A-显示功能SD_II_PLAY:MOVR1,DISBEGMO

43、VR5,#0FEH;扫描限制字初值I_PLAY:MOVA,R5;扫描字放入 AMOVP2,A;从 P2 口输出MOVA,R1;取显示数据到 AMOVDPTR,#I_TAB;取段码表地址MOVCA,A+DPTR;查显示数据对应段码MOVP0,A;段码放入 P1 口P2 口作;显示 1MS;指向下一地址;扫描限制字放入 A;ACC.5=0 时一次显示结束;A 中数据循环左移;放回 R5;跳回 PLAY 循环;一次显示结束,P2 口复位;P0 口复位;子程序返回CLRAMOVDPTR,#STABS_LOOP:MOVR0,AMOVA,R3INCAMOVR3,AINCR0DJNZR2,S_LOOPMOV

44、DISBEG,#40HSS_LOOP:MOVR2,#50SS_LOOP1:LCALLSD_II_PLAYDJNZR2,SS_LOOP1INCDISBEGMOVA,DISBEGCJNEA,#5AH,SS_LOOPMOVDISBEG,#5AH;以下程序从右往左移MOVR3,#1BH;显示 27 个单元SS_LOOP2:MOVR2,#32H;限制移动速度SS_LOOP12:LCALLSD_II_PLAY;DJNZR2,SS_LOOP12;DECDISBEGDJNZR3,SS_LOOP2;RET;以下是时间设定程序中的时调整程序DLY8:LCALLD_II_PLAY;等待键释放JNBP1.3,DLY8

45、MOV50H,#0AH;时调整时显示为 00:00:-.MOV51H,#0CH;ST,.ST:MOVR0,#40HMOVR2,#20HMOVR3,#00H;将显示容移入 40H-5FH 单元MOVA,R5LCALLDLY1MINCR1MOVA,R5JNBACC.5,FLSHRLAMOVR5,AAJMPI_PLAYFLSH:MOVP2,#0FFHMOVP0,#0FFHRETMOVCA,A+DPTR;移入完毕;以下程序从左往右移;R_BTIM:SETBEALCALLD_II_PLAYJNBP1.2,DLY12;时加 1 键JNBP1.0,DLY14;时减 1JNBP1.3,DLY9JNBP1.1,

46、DLY10AJMPR_BTIMDLY9:LCALLDLY20M;消抖JBP1.3,R_BTIMDLY8M:LCALLD_II_PLAY;键释放等待JNBP1.3,DLY8MMOVDISBEG,#70HLJMPMLOOP1DLY10:LCALLDLY20M;消抖;JBP1.1,R_BTIMDLY11:LCALLD_II_PLAY;键释放等待JNBP1.1,DLY11CPL05HJNB05H,R_BTIM11MOV50H,#00HAJMPR_BTIMR_BTIM11:MOV50H,#0aHAJMPR_BTIMDLY12:LCALLDLY20M;消抖;JBP1.2,R_BTIMDLY13:LCALL

47、D_II_PLAY;键释放等待JNBP1.2,DLY13CLREAMOVR0,#55HLCALLADD_1MOVA,R3;CLRC;CJNEA,#24H,A_DDH33N;A_DDH33N:JCR_BTIM;小于 24 点返回ACALLCLR_H;大于等于 24 点清零AJMPR_BTIMDLY14:LCALLDLY20M;消抖;JBP1.0,R_BTIMDLY15:LCALLD_II_PLAY;键释放等待JNBP1.0,DLY15CLREAMOVR0,#55HLCALLSUB_HLJMPR_BTIM;以下是判断子程序BELL:JNBMOVA,79HCJNEA,55H,BBELLMOVA,78

48、HCLRCBELL_1:CJNE05H,BBELL;从时十位、个位、分十位、分个位顺序比拟A,54H,BBELLMOVA,77HCLRCCJNEA,53H,BBELLMOVA,76HCLRCBELL_2:CJNEJNB07H,BBELLCLRCALB;RETBBELL:SETBRETENDA,52H,BBELL;07H 在 1 秒到时会取反时分相同时呜叫1 秒间隔叫CALB静态程序ORG0000HMOV30H,#1MOV31H,#2MOV32H,#0MOV33H,#0MOV34H,#0MOV35H,#0MOVTMOD,#01XS0:SETBTR0MOVTH0,#00HMOVTL0,#00HXS

49、:MOV40H,#0FEHMOVDPTR,#TABMOVP2,40HMOVA,30HMOVCA,A+DPTRMOVP0,ALCALLYS1MSMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,31HADDA,#10MOVCA,A+DPTRMOVP0,ALCALLYS1MSMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,32HMOVCA,A+DPTRMOVP0,ALCALLYS1MSMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,33HADDA,#10MOVCA,A+DPTRMO

50、VP0,ALCALLYS1MSMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,34HMOVCA,A+DPTRMOVP0,ALCALLYS1MSMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,35HMOVCA,A+DPTRMOVP0,ALCALLYS1MSMOVP0,#0FFHMOVA,40HRLAMOV40H,AJBTF0,JIAJNBP1.0,P100JNBP1.1,P1000JNBP1.2,P10000AJMPXSP100:MOV30H,#0MOV31H,#0MOV32H,#0MOV33H,#0MOV34H,#0MO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论