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

下载本文档

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

文档简介

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

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

3、点报时电路组成2、秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号, 该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号, 该信号将被送 到“时计数器”。“时计数器”采用 24进制计时器,可实现对一天 24小时的累计3、 译码显示电路将“时”、“分”、“秒”计数器的输出状态菁七段显示译码器译码,通过六位LED七段显示器显示出来4、校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的、总体

4、方案设计2.1电路的总体原理框图根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:单片机模块、数码显示模块与按键模块,模块之间的关系图如下面得方框电路图1 所示单片机丨 A数码管显示时间调整器图1硬件电路方框图2.2实现时钟计时的基本方法利用STC系列单片机的可编程定时/计数器、中断系统来实现时钟计数。(1) 计数初值计算:把定时器设为工作方式 1,定时时间为50ms则计数溢出20次即得时钟计时最小单位 秒,而100次计数可用软件方法实现。假设使用T/CO,方式1,50ms定时,fosc=12MHz。则初值 X 满足(216-X )X 1/12MHzX 12 卩 s =50000 卩

5、 sX=1553110000 3CB0H(2) 采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);(3) 从秒到分和从分到时的计时是通过累加和数值比较实现。2.3电子钟的时间显示RAM中设置显示缓冲区共 8电子钟的时钟时间在六位数码管上进行显示,因此,在部LED8LED7LED6LED52LED137H36H35H34H31H30H个单元。时十位 时个位 分隔LED4LED3 LED33H32H分十位 分个位 分隔 秒十位 秒个位2.4 电子钟的时间调整电子钟设置 3 个按键通过程序控制来完成电子钟的时间调整。A键按一次调整时,按第二次调整分钟,第三次推出时间调整;B 键对小时或分钟进

6、行加一;C键对小时或分钟进行减一;2.5 总体方案介绍2.5.1 计时方案利用STC89C52单片机部的定时/计数器进行中断时,配合软件延时实现时、分、秒的计 时。该方案节省硬件成本,且能使读者在定时 /计数器的使用、中断及程序设计方面得到锻 炼与提高, 对单片机的指令系统能有更深入的了解, 从而对学好单片机技术这门课程起到一 定的作用。2.5.2 控制方案STC89C52的P0 口和P1 口外接由八个 LED数码管(LED8LED1)构成的显示器, 用P0 口 作LED的段码输出口, P1 口作八个LED数码管的位控输出线, P3 口外接四个按键 A B、C 构成键盘电路。STC89C52

7、是一种低功耗,高性能的 CMOS 8位微型计算机。它带有 8K Flash 可编程和 擦除的只读存储器(EPROM,该器件采用 ATMEL的高密度非易失性存储器技术制造,与工 业上标准的80C51和80C52的指令系统及引脚兼容,片 Flash集成在一个芯片上,可用与 解决复杂的问题,且成本较低。简易电子钟的功能不复杂,采用其现有的I/O 便可完成,所以本设计中采用此的设计方案。三、数字钟的硬件设计3.1最小系统3.1.1芯片分析STC89C52单片机引脚图如下:U119PI* T91 了 s-:XTAI1 r YTfllCPUMDIl?J2D2 叩邓闪 IPCLSCH曲皿M、RSTpsEir

8、-ME -STP21WP2.WP23W11P2iJAt2P2J6W14F2JM15_ n.-i nPUTRXD F3.VTKD PIJANTH P3J1NT1P3H1_ Di i.ni Jr F J r 1 it .pi P1 Ar P I .7938 Cly.宛 JD2/35 C3/35 Dt/3i 反.33 呢衣 07/31 PS 丿22 刚U /_P.242525 _2?.35IdI12!14rs16fi图3-1 STC89C52弓I脚图MCS-51单片机是标准的40引脚双列直插式集成电路芯片,其各引脚功能如下:VCC +5V 电源。VSS接地。RST复位信号。当输入的复位信号延续两个机

9、器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。XTAL1和XTAL2外接晶体引线端。当使用芯片部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。P0 口 : P0 口为一个8位漏极开路双向I/O 口,当作输出口使用时,必须接上拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入“1”,使FET截止,以避免锁存器为“ 0”状态时对引脚读入的干扰。P1 口: P1 口是一个部提供上拉电阻的8位双向I/O 口,它不再需要多路转接电路MUX因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时, 同样也需先向其锁存器写“ 1

10、”,使输出驱动电路的 FET截止。P2 口: P2 口电路比P1 口电路多了一个多路转接电路MUX这又正好与 P0 口一样。P2口可以作为通用的I/O 口使用,这时多路转接电路开关倒向锁丰存器Q端。P3 口: P3 口特点在于,为适应引脚信号第二功能的需要,增加了第二功能控制逻辑。 当作为I/O 口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。当输出第二功能信号时,该位应应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出,具体第二功能如表3-1所示。P3引脚兼用功能P3.0串行通讯输入(RXDP3.1串行通讯输出(TXDP

11、3.2外部中断0 ( INTO)P3.3外部中断1( INT1)P3.4定时器0输入(TO)P3.5定时器1输入(T1)P3.6外部数据存储器写选通WRP3.7外部数据存储器写选通 RD表3-1P3端口引脚兼用功能表3.1.2晶振电路右图所示为时钟电路原理图,在AT89S51芯片部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚 XTAL2而在芯片部,XTAL1和XTAL2之间跨接晶体振荡器 和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。图3-2晶振电路3.2数码显示模块设计显示器普遍地用于直观地显示数字

12、系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器、CRT显示器等。LED显示器是现在最常用的显示器之一,如下图所示。3-4 LED显示器的符号图发光二极管(LED由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单 独使用,也可以组装成分段式或点阵式 LED显示器件(半导体显示器)。分段式 显示器(LED数码管)由7条线段围成8字型,每一段包含一个发光二极管。外 加正向电压时二极管导通,发出清晰的光。只要按规律控制各发光段亮、灭, 就可以显示各种字形或符号。LED数码管有共阳、共阴之分。图是共阳式、共阴 式LED数码管的原理图和

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

14、清零等功能。旨亏士 n 144.2源程序清单DISBEGEQU30HCALBEQUP1.7TIMCONEQU2FHORG 0000HLJMPMAINORG0003H;程序开始;关外中断0RETIORG LJMP ORG RETI ORG LJMPORG000BHINTT00013H001BHINTT10023H; 定时器 T0 中断程序入口 ; 跳至 INTTO 执行; 关中断 1; 定时器 T1 中断程序入口 ; 跳至 INTT1 执行; 关串行中断RETITAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH;

15、共阳段码表012 34567 89不亮 A-I_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H; 显示数 0 1 2 3 4 5 6 7 8 9 不亮 C - A ; 存数 0 1 2 3 4 5 6 7 8 9 0AH 0BH 0CH 0DH ;STAB表,启动时显示 2013年06月07日、A01-01-15 (学号)用STAB:DB 0AH,0AH,0AH,0AH,0AH,0AH,05H,01H,0CH,01H,00H,0CH,01H,00H,0DH,0AH,0AHDB 07H,00H,0CH

16、,06H,00H,0CH,03H,01H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AHDLY1M: MOV R6,#14H;1 毫秒延时DL_LOOP:MOVR7,#19HDL_LOOP1: DJNZR7,DL_LOOP1DJNZ R6,DL_LOOPRETDLY20M: CLRCALB;20 毫秒延时LCALLD_II_PLAYLCALLD_II_PLAYLCALLD_II_PLAYSETBCALBRETDL_LOOPS:LCALLDL05SLCALLDL05SRETDL05S:MOVR3,#20H;8 毫秒*32=0.196 秒DL05S1:LCALLD_II_PLAYD

17、JNZR3,DL05S1RET; 程序开始J J; 整点报时用CTIME:MOV A,#10HMOVB,79HMUL ABADD A,78HMOV TIMCON,ACLOOP:LCALL DLY20MLCALL DL_LOOPSLCALL DL_LOOPSLCALLDJNZDL_LOOPSTIMCON,CLOOPCLR08HAJMPMLOOP1; 主程序开始MAIN:LCALL ST; 上电显示年月日及班级学号MOVR0,#00H;清00H-7FH存单元MOVR7,#80HJMLOOP:MOVR0,#00H ;INCR0JDJNZR7,MLOOPJMOV20H,#00H;清20H (标志用)M

18、OV7AH,#0AHJ放入 熄灭符 数据MOVTMOD,#11HJ设TO、T1为16位定时器MOVTL0,#0B0H;50MS定时初值(TO计时用)MOVTH0,#3CH;50MS定时初值MOVTL1,#0B0H;50MS定时初值(T1闪烁定时用)MOVTH1,#3CH;50MS定时初值SETBEA ;总中断开放SETBET0 ;允许 TO 中断SETBTR0 ;开启 TO 定时器MOVR4,#14H ;1秒定时用计数值(50MS 20)MOVDISBEG,#70H; 显示单元为 7O-75H; 以下主程序循环MLOOP1:LCALLD_II_PLAY; 调用显示子程序JNBP1.0,T_SE

19、TSC;P1.0 口为 0 时转时间调整程序JNBP1.1,DLY5; 秒表功能, P1.1 按键调时时作减 1 加能JNBP1.2,FUNBTJ秒表 STOP,PUSE,CLRJNBP1.3,TSETJB08H, CTIMEAJMPMLOOP1 ;P1.0口为 1 时跳回 MLOOP1FUNBT:LJMPDLY6TSET:LCALLDLY20MJBP1.3,MLOOP1JTS_LOOP:JNBP1.3,TS_LOOP ; 等待键释放JB05H,CLRBELLMOVDISBEG,#50HMOV50H,#0CH II IIJMOV51H,#0AH; 黑jMINCHG: SETBEALCALLD_

20、II_PLAYJNBP1.2,DLY1J分加 1JNBP1.0,DLY3J分减 1JNBP1.3,DLY; 进入时调整AJMP MINCHGCLRBELL: CLR05HCLRCALBDLY:LCALLDLY20M; 消抖JBP1.3, MINCHGLJMPDLY8; 进入时调整T_SETSC: LJMPR_SETTIM; 转到时间调整程序DLY1:LCALLDLY20M; 消抖JBP1.2, MINCHGDLY2:LCALLD_II_PLAY; 等键 释放JNBP1.2, DLY2CLREAMOVR0,#53HJLCALLADD_1MOVA,R3; 分数据放入ACLRC; 清进位标志CJNE

21、A,#60H,ADD_M ;ADD_M:JCMINCHG; 小于 60 分时返回ACALLCLR_H; 大于或等于60 分时分计时单元清AJMPMINCHGDLY3 :LCALLDLY20M; 消抖JBP1.0, MINCHGDLY4:LCALLD_II_PLAY ;等键 释放JNBP1.0, DLY4CLREAMOVR0,#53HJLCALLSUB_MLJMPMINCHGMLOOP1AJMPR_SETTIM0; 以下秒表功能 / 时钟转换程序; 按下 P1.1 可进行功能转换DLY5: LCALL DLY20MJBP1.1,T_MLOOP1JNB CPL JNB MOV MOV MOV MO

22、VP1.1,$03H03H,DIS_SETDISBEG,#60H ; 显示秒表数据单元60H,#00H61H,#00H62H,#00HMOVMOVMOV63H,#00H64H,#00H65H,#00HMOVTL1,#0F0H ;10MS 定时初值()MOVSETBSETBT_MLOOP1:DIS_SET:CLRCLRT_MLOOP11:TH1,#0D8HTR1ET1LJMPMOVET1TR1LJMP;10MS定时初值MLOOP1DISBEG,#70HMLOOP1; 显示时钟数据单元; 以下秒表暂停 清零功能程序; 按下 P1.2 暂停或清 0, 按下 P1.1 退出秒表回到时钟计时DLY6:L

23、CALLDLY20MJBP1.2,T_MLOOP11T_EST11:JNBP1.2,T_EST11CLRET1CLRTR1T_EST22:JNBP1.1,DLY5JBP1.2,T_EST21LCALLDLY20MJBP1.2,T_EST22T_EST55:JNBP1.2,T_EST51MOV60H,#00HMOV61H,#00HMOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HT_EST33:JNBP1.1,DLY5JBP1.2,T_EST31LCALLDLY20MJBP1.2,T_EST33T_EST44:JNBP1.2,T_EST41SETBET1SE

24、TBTR1AJMPMLOOP1; 以下键等待释放时显示不会熄灭用T_EST411:LCALLD_II_PLAYAJMPT_EST11T_EST21:LCALLD_II_PLAYAJMPT_EST22T_EST31:LCALLD_II_PLAYAJMPT_EST33T_EST41:LCALLD_II_PLAYAJMPT_EST44T_EST51:LCALLD_II_PLAYAJMP ; 1 秒计T_EST55时程序;T0 中断服务程序INTT0:PUSHACC; 累加器入栈保护PUSHPSW; 状态字入栈保护CLRET0;关TO中断允许CLRTR0; 关闭定时器 T0MOVA,#0B7H; 中断

25、响应时间同步修正ADDA,TL0; 低 8 位初值修正MOVTL0,A; 重装初值(低 8 位修正值)MOVA,#3CH; 高 8 位初值修正ADDCA,TH0MOVTH0,A; 重装初值(高 8 位修正值)SETBTR0; 开启定时器 TODJNZR4, I_INT0;2O 次中断未到中断退出A_DDS:MOVR4,#14H;2O次中断到( 1 秒)重赋初值CPL07HMOVR0,#71H; 指向秒计时单元( 71H-72H)ACALLADD_1; 调用加 1 程序(加 1 秒操作)MOVA,R3;秒数据放入A ( R3为2位十进制数组合)CLRC; 清进位标志CJNEA,#60H,A_DD

26、MA_DDM:JCI_INT0 ; 小于 60 秒时中断退出ACALLCLR_H; 大于或等于 6O 秒时对秒计时单元清 OMOVR0,#77H; 指向分计时单元( 76H-77H)ACALLADD_1; 分计时单元加 1 分钟MOVA,R3; 分数据放入 ACLRC; 清进位标志CJNEA,#60H,A_DDH ;A_DDH:JCI_INT0;小于 6O 分时中断退出ACALLCLR_H; 大于或等于 6O 分时分计时单元清 OLCALLDLY20M; 正点报时SETB08HMOVR0,#79H; 指向小时计时单元( 78H-79H)ACALLADD_1; 小时计时单元加 1 小时MOVA,

27、R3; 时数据放入 ACLRC; 清进位标志CJNEA,#24H,RSTARTJRSTART:JCI_INT0 ; 小于 24 小时中断退出ACALLCLR_HJ大于或等于 24 小时小时计时单元清 OI_INT0:MOV72H,76H; 中断退出时将分、时计时单元数据移MOV73H,77H; 入对应显示单元MOV74H,78H ;MOV75H,79HJLCALLBELLPOPPSW; 恢复状态字(出栈)POPACC; 恢复累加器SETBET0; 开放 T0 中断RETI ; 中断返回; 闪动调时程序 秒表功能程序;T1 中断服务程序,用作时间调整时调整单元闪烁指示或秒表计时INTT1:PUS

28、HACC; 中断现场保护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,79HI_INT1:POPPSW; 恢复现场POPACCRETI; 中断退出FLASH0:JB01H,FLASH1 ;

29、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; 中断响应时间同步修正 , 重装初值( 10ms)ADDA,TL1;低 8位初值修正MOVTL1

30、,A; 重装初值(低 8 位修正值)MOVA,#0D8H;高 8位初值修正ADDCA,TH1MOVTH1,A; 重装初值(高 8 位修正值)SETBTR1; 开启定时器 T0MOVR0,#61H; 指向秒计时单元( 71H-72H)ACALLADD_1; 调用加 1 程序(加 1 秒操作)CLRCMOVA,R3JZR_ADDM;加 1 后为 00,C=0AJMPI_INT01;加 1 后不为 00 , C=1R_ADDMACALLCLR_H ;大于或等于 60 秒时对秒计时单元清 0MOVR0,#63H; 指向分计时单元( 76H-77H)ACALLADD_1; 分计时单元加 1 分钟MOVA

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

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

33、操作SUB_M11: MOV3,A; 移入 R3 寄存器ANLA,#0FH; 高四位变 0CLRC; 清进位标志SUBBA,#0AHSUB_M111:JCSUB_M110MOVR0,#09H;大于等于0AH为9SUB_M10:MOVA,R3; 取回 R3 中暂存数据INCR0; 指向当前地址单元SWAPA;A 中数据高四位与低四位交换ANLA,#0FH; 高四位变 0MOV R0,A; 数据放入当削地址单元中RET; 子程序返回JSUB_M1:MOVA,#59HAJMPSUB_M11SUB_M110:MOVA,R3; 移入 R3 寄存器ANLA,#0FH; 高四位变 0MOVR0,AAJMPS

34、UB_M10; 时减 1 子 程序SUB_H:MOVA,R0; 取当前计时单元数据到 ADEC R0; 指向前一地址SWAPA;A 中数据高四位与低四位交换ORLA,R0;前一地址中数据放入 A中低四位JZSUB_H1;00 减 1 为 23(小时)DEC A;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

35、;A 中数据高四位与低四位交换ANLA,#0FH; 高四位变 0MOV R0,A; 时十位数数据放入RET; 子程序返回SUB_H1:MOVA,#23HAJMPSUB_H11SUB_H110:MOVA,R3;时个位小于0A不处理ANLA,#0FH; 高四位变 0MOVR0,A; 个位移入AJMPSUB_H10; 清零程序; 对计时单元复零用CLR_H:CLRA; 清累加器MOVR0,A; 清当前地址单元DECR0; 指向前一地址MOVR0,A; 前一地址单元清 0RET; 子程序返回; 时钟时间调整程序; 当调时按键按下时进入此程序R_SETTIM:CLRET0; 关定时器 T0 中断CLRT

36、R0; 关闭定时器 T0LCALLDL_LOOPS; 调用 1 秒延时程序LCALLDLY20M; 消抖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 秒LCALLDLY

37、20M; 消抖JNBP1.0,R_SETHH ; 按下时间大于 0.5 秒转调小时状态MOVR0,#77H; 按下时间小于 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 定

38、时器(开时钟)SET_LOOP1:JBP1.0,SET_LOOP1;无按键按下,等待。LCALLDLY20M; 消抖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; 消抖JN

39、BP1.0,STOP; 按下时间大于 0.5 秒退出时间调整MOVR0,#79H; 按下时间小于 0.5 秒加 1 小时操作LCALLADD_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;是抖动,返回STOP再等待CLR01H; 清调小时标志CLR00H; 清调分标志C

40、LR02H; 清闪烁标志CLRTR1; 关闭定时器 T1CLRET1; 关定时器 T1 中断SETBTR0; 开启定时器 T0SETBET0; 开定时器 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_

41、7:LCALLD_II_PLAY;等待调小时按键时时钟显示用JNBP1.1, DLY7B; 小时减 1 操作AJMPSET_6;调时等待STOP1:LCALLD_II_PLAY;退出时钟调整时键释放等待AJMPSTOP; 防止键按下时无时钟显示;DLY7,分减1 程序 ?DLY7:LCALLDLY20M;消抖JBP1.1,SET_41; 干扰,返回调分等待DLY7_M:JNBP1.1,DLY7_M; 等待键放开MOVR0,#77HLCALLSUB_M; 分减 1 程序LJMPSET_4; 返回调分等待JSET_41:LJMPSET_4;DLY7B, 时减1 程序JDLY7B:LCALLDLY2

42、0M; 消抖JBP1.1,SET_61; 干扰,返回调时等待DLY7_H:JNBP1.1,DLY7_H; 等待键放开MOVR0,#79HLCALLSUB_H; 时减 1 程序LJMPSET_6; 返回调时等待SET_61:LJMPSET_6; 显示程序J J; 显示数据在70H-75H 单元,用六位LED共阳数码管显示,P0 口输出段码数据P2 口作;扫描控制,每个 LED数码管亮1MS时间再逐位循环。D_II_PLAY: MOV R1,DISBEG; 指向显示数据首址MOVR5,#0FEH; 扫描控制字初值PLAY:MOVA,R5; 扫描字放入 AMOVP2,A;从P2 口输出MOVA,R1

43、; 取显示数据到 AMOVDPTR,#TAB; 取段码表地址MOVCA,A+DPTR; 查显示数据对应段码MOVP0,A; 段码放入 P1 口MOVA,R5JBACC.2,D_LOOP ; 小数点处理CLRP0.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,#

44、0FFH; 一次显示结束, P2 口复位MOVP0,#0FFH;P0 口复位RET; 子程序返回; SD_II_PLAY ,上电显示子程序; 不带小数点显示,有 A- 显示功能SD_II_PLAY: MOVR1,DISBEGMOVR5,#0FEHI_PLAY:MOVA,R5MOVP2,AMOVA,R1MOVDPTR,#I_TABMOVCA,A+DPTRMOVP0,A; 扫描控制字初值; 扫描字放入 A;从P2 口输出; 取显示数据到 A; 取段码表地址 查显示数据对应段码; 段码放入 P1 口MOVA,R5LCALLDLY1M; 显示 1MSINCR1; 指向下一地址MOVA,R5; 扫描控制

45、字放入 AJNBACC.5,FLSH;ACC.5=0 时一次显示结束RLA;A 中数据循环左移MOVR5,A; 放回 R5AJMPI_PLAY;跳回PLAY循环FLSH:MOV P2,#0FFH ; 一次显示结束, P2MOVP0,#0FFH;P0 口复位RET; 子程序返回;ST,.ST:MOVR0,#40H ; 将显示容移入MOVR2,#20HMOV R3,#00HCLRAMOVDPTR,#STABS_LOOP:MOVCA,A+DPTRMOVR0,AA,R3口复位40H-5FH 单元MOVINCMOVR3,AR0INCDJNZMOVSS_LOOP: MOVR2,S_LOOPDISBEG,#

46、40HR2,#50; 移入完毕; 以下程序从左往右移; 控制移动速度DJNZ INC MOVCJNEMOVMOVR2,SS_LOOP1DISBEGA,DISBEGA,#5AH, SS_LOOP DISBEG,#5AH R3,#1BHMOV R2,#32HSDSS_LOOP2:SS_LOOP12: LCALLII; 以下程序从右往左移; 显示 27 个单元; 控制移动速度PLAYSS_LOOP1: LCALL SD_II_PLAYDJNZDECDJNZR2,SS_LOOP12 ; DISBEG R3,SS_LOOP2 ;RET ; 以下是时间设定程序中的时调整程序DLY8:LCALLD_II_PLAY ; 等待键释放JNBP1.3, DLY8MOV 50H,#0AH ; 时调整时显示为 00:00:- .MOV 51H,#0CHR_BTIM:SETBEALCALLD_II_PLA

温馨提示

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

评论

0/150

提交评论