单片机课程设计报告语音报时功能电子钟系统硬件设计.doc

上传人:文库蛋蛋多 文档编号:4147717 上传时间:2023-04-07 格式:DOC 页数:32 大小:297.50KB
返回 下载 相关 举报
单片机课程设计报告语音报时功能电子钟系统硬件设计.doc_第1页
第1页 / 共32页
单片机课程设计报告语音报时功能电子钟系统硬件设计.doc_第2页
第2页 / 共32页
单片机课程设计报告语音报时功能电子钟系统硬件设计.doc_第3页
第3页 / 共32页
单片机课程设计报告语音报时功能电子钟系统硬件设计.doc_第4页
第4页 / 共32页
单片机课程设计报告语音报时功能电子钟系统硬件设计.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《单片机课程设计报告语音报时功能电子钟系统硬件设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告语音报时功能电子钟系统硬件设计.doc(32页珍藏版)》请在三一办公上搜索。

1、单片机课程设计报告一、 设计内容及要求:1. 根据设计要求,完成带语音报时功能电子钟系统硬件设计,并用电子CAD软件绘制出原理图,编辑、绘制出PCB印制版。要求:(1) 原理图中元件电气图形符号符合国家标准;(2) 整体布局合理,注标规范、明确、美观,不产生歧义。(3) 列出完整的元件清单(标号、型号及大小、封装形式、数量)(4) 图纸幅面为A4。(4) 布局、布线规范合理,满足电磁兼容性要求。(5) 在元件面的丝印层上,给出标号、型号或大小。所有注释信息(包括标号、型号及说明性文字)要规范、明确,不产生歧义。2. 编写并调试驱动程序。功能要求:(1) 电子钟具有显示年、月、日、分、时、秒及星

2、期功能,可识别闰年。(2) 具有星期报警功能;可在一天内设置多达32个报警时间(时分)。报警时,蜂鸣器先鸣响10秒。(3) 能借助键盘设置日期、时间及报警时间。(4) 功能完善、稳定可靠。3. 撰写设计报告。二、 设计摘要与流程图:相关跳线JP101JP102JP105JP106JP201JP202JP203JP204JP205SWDIP1-2 开路2-3 开路1-2短路2-3开路1-2短路2-3 开路1-2短路2-3 开路1-2 开路2-3 短路1-2 开路2-3 短路1-2 短路2-3 开路1-2开路2-3短路1-2短路2-3 开路OFF1通过定时器T2定时和记数,工作于串行方式0。设置定

3、时器存储器,用来存放计时值。然后,考虑1S定时时间到的中断服务子程序,正确调整计时存储器的值。主程序中,按如下步骤执行:(1) 初始化堆栈指针SP,D口的状态,T2, PCON和SCON,8255(U107)可编程并行I/O接口芯片的工作方式,中断控制器(2) 在调试区,初始化年,月日,时分,分秒,闹钟位和星期。(3) 功能键子程序处理Enter键的子程序校时/定时输入子程序T2的中断服务程序各时间单元的计数处理与缓冲区处理子程序判断是否位闰年存放数据、调整数据排列专门处理days_COUNT的子程序处理定时状态下,输入缓冲区时间刷新的子程序串行口UART0的中断服务程序键盘检测,进一步处理定

4、时的子程序,键盘扫描程序、时间比较子程序因此,流程图为:定义各值意义 主程序开始各芯片,储存器,定时器,串行口,调试区等初始化扫描按键输入是否有效 时间比较子程序,判断闹钟报警时间判断按键是功能键还是数字键各时间单元计数处理和缓冲区处理校时定时输入处理各功能键读信息确认,退出,并保存LED显示报警闹钟时间与当前时间比较 2操作并显示: 键盘的分布:较时789年确定456月日取消123时分闹钟设置查0周分秒(2) 通过LED显示年,月日,时分,分秒,闹钟位和星期。(3) 在调试区设置初始年2004,5月1日,12时59分,59分秒,闹钟位12和星期6。(4) 有键盘控制年,月日,时分,分秒,闹钟

5、位和星期的显示,按下键盘SWF显示年份,按下键盘SWE 显示几月几日,按下键盘SWD 显示时分,按下键盘SWC 显示分秒,按下键盘SWB 显示闹钟报警点和星期。(5) 再通过以下几个键盘控制年,月日,时分,分秒,闹钟位和星期的调整和设置:按下键盘UP, 最低位在闪,表示处于调整,此时,按下显示年份的键盘SWF,或按下显示月日份的键盘SWE,或按下显示时分的键盘SWD,有或者按下显示分秒的键盘SWC,再就是按下显示星期的键盘SWB来进行调整,按下键盘SW8,SW5 进行高两位调整,按下键盘SW9,SW6 进行低两位调整;(6) 按下键盘DOWN 进行闹钟,星期报警功能;可在一天内设置多达32个报

6、警时间(时分) 调时,过程如上面所叙;调好后,再按下确定键盘ENTER或按下取消键盘ESC,确定时间或者取消调整的时间,按下键盘SWA就能查询闹钟的设定值,进行核照。三、 部分系统程序的设计:功能键子程序: 由于每个按键都有自己的值,通过CJINE两数比较转移功能,设置键盘DOWN,ESC,ENTER,UP功能定义为定时,取消,确定,校时;把SWF,SWE,SWD,SWC,SWB,SWA定义为显示年,年,月日,时分,分秒,闹钟位,星期和查询功能校时/定时输入子程序: 在调试区和初始化作用下,按键WF,SWE,SWD,SWC,SWB的时间区为1.2.3.4.5,通过判断比较作用下,进行相应的时间

7、区校时,把每一时间段的年,月日,时分,分秒,闹钟位和星期地址送给某寄存器保存起来时间单元的计数处理与缓冲区处理子程序:通过实验六的程序段,仿照它就能年,月日,时分,分秒,闹钟位和星期的计数,同时查表取笔段码把年,月日,时分,分秒,闹钟位和星期的高低位送显示缓冲区 专门处理days_COUNT的子程序:.4.6.9.11月分别有30天,由于闰年时,2月为29天,不是闰年时为28天,除了2.4.6.9.11月外,其他月份有31天,根据这些常识,在经过比较确定其处于哪一月份,在比较天跟当月的天数比较有没有进位,来确定月份是否有进位,再通过天数的变化来确定星期是否达到七天,是否有进位 键盘检测和键盘扫

8、描程序: 判断按键状态,决定其是否执行按键扫描,处于000态,按键末释放;001态时,按键可能刚被释放,不处理;010态,干扰,作000态处理;处于100态,按键已经稳定闭合,进行按键扫描;101态时,干扰,作111态处理。然后参考实验七的程序。 闰年的计算方法: 我们都知道闰年的计算方法,当年份的低两位被四整除,除后的余数为零的话就能判断该年为闰年,反之,该年不是闰年。 确定键功能程序设计: 在校时时,把校时好的年,月日,时分,分秒,闹钟位和星期送回显示缓冲区,定时时,不考虑秒计数单元,计算其地址偏移量,必须把原时间保存起来再回送,同时应把定时设定的时间送定时时间保存区。 时间比较子程序:

9、由于有32个报警点,所以必须循环比较32次,在每个报警点,都要进行年,月日,时分,分秒,星期的比较,看当前时间和闹钟设置的时间是否相等,不等时就判断其是哪段时间的闹钟在报警四、 参考书籍:(1). 潘永雄, 刘向阳等. 电子线路CAD实用教程. 第二版.西安电子科技大学出版2004(2). 新编单片机原理与应用 潘永雄 编著 西安电子科技大学出版(3). 单片机原理与接口技术实验指导书 潘永雄 编著 广东工业大学五、 心得与体会:本设计主要是软件的设计,因为硬件我们用的是实验电路板,其工作已经在开学头完成了。在此主要论述其写软件功能的体会:首先:是一个整体思路的要求,要充分利用内存各个单元,合

10、理安排怎样利用所需的空间,而且要便于在编程时使用简单,例如,同种功能的最好安排在一个连续的空间地址,把相关标志位安排在前面的连续空间,然后在图中找到8255的各个口的地址,再进入主程序中,首先要把所有单元清零,然后再进行初始化各个功能,例如:初始化D口,初始化定时器,初始化PCON,SCON,再启动中断控制口。其次:介绍每个子程序设计时的思路。1.基本的年月日的显示:秒来自系统脉冲,每六十秒向分钟一个进位,每六十分钟向小时一个进位,每二十四小时向日进位,如此下去。2.闰年的判别:先把年的的两位提取出来,用来除于4,若能被4整除说明是闰年,闰年时二月份有29天,若不能被4整除,就不是闰年,此时的

11、二月份就只有28天,其他月份如1,3,5,7,8,10,12月就有31天,2,4,6,9,11只有30天。3。定时状态程序:在进入定时状态时,系统时钟还是照常运行,当我们设定时钟后,按下ENTER键后就保存到内部RAM中,每分钟比较一次,当系统时间与我们所设定的时间相等时峰鸣就报时,系统有32个定时,我们可以设置每天的什么时候闹钟,每个月的什么时候闹钟,每年的什么时候闹钟等等。4.校时功能:一旦进入校时,系统时钟立即停止运行,校时完毕后按下ENTER键,系统时钟立即更改。5.各个功能键的功能:SWF-年 ,SWE-月日,SWD小时分钟,SWC-分钟和秒。SW8,5高两位的显示的调整,SW9,6

12、低两位的显示,UP校时,DOWN定时,SWB闹钟个数和星期显示,ENTER-设置时间或校时后保存。6.缓冲区处理子程序,缓冲区刷新等等,7.串行口UART0的中断服务程序:这个主要用来为数据的发送做好准备,8.键盘检测,扫描程序,首先初始化扫描次数,列地址,扫描初值。根据4列号行号 进行扫描。转换成扫描码.第三写子程序,写好一个子程序后,再进行调试,发现没有问题后再并到主程序中,再进行主程序的调试,调试这个过程是一个痛苦的阶段,有些明显的错误一眼就能看出来,例如:缺一些分号,或者在子程序用到的单元没有在主程序中定义,或者,在初始化堆栈时,有时没有注意到进入的顺序,或者有进无出。有时在把数据送到

13、LED时,发现显示和我们所想要的不一致,这就要求我们要熟悉程序的结构,分析是那个子程序有问题,对症下药,很快就能搞定,这些还比较容易找到和修改。可是当你遇到一些平时没有见过的错误时,即使有时知道错在那里都不知道怎么改动。例如:程序里漏写了一个两个语句,编译时又检测不出来,没有错误,可是当你在硬件调试时就发现不对,此时就不知从何改动了,有时叫一些同学帮忙也搞很久才能完成。第四:设计的缺陷。由于本人的能力有限和时间的关系,没有完成语音功能,没有学到新的东西,很遗憾的是还没有全面理解那块语音芯片的各个功能,语音报时可通过ISDN4002芯片实现(已预先录制了所需的单音字,只需编写段组合播放程序播放即

14、可)。下来有时再向其他同学学习,尽力把语音功能完成。第五:总结,经过这段时间的学习,老师的指点,学到了不少东西,至少对编程有更进一步的了解,对中断等程序有深刻的了解,也对实验电路板有更进一步的结构理解,各个功能有深刻的体会。六、 程序:DISBUF DATA 30H ;显示缓冲区首地址:30H33H用于保存年份;34H35H用于保存月份 ;36H37H用于保存日期;38H39H用于保存小时;3AH3BH用于保存分钟;3CH3DH用于保存秒钟WEEKBUF DATA 3EH ;星期的显示缓冲区为3EH41H(3EH.3FH两单元保存闹钟序号, ;40H单元保留,显示时横为-,41H用于保存星期)

15、T2COUNT DATA 42H ;T2溢出计数单元(1s,用于时间刷新)T2KEY DATA 43H ;T2溢出计数单元(50ms,用于键盘的定时中断扫描)YEARS2 DATA 50H ;年份高两位的计数单元YEARS1 DATA 51H ;年份低两位的计数单元MONTHS DATA 52H ;月份的计数单元DAYS DATA 53H ;日期的计数单元HOURS DATA 54H ;小时的计数单元MUNITES DATA 55H ;分钟的计数单元SECONDS DATA 56H ;秒钟的计数单元NUMBERS DATA 57H ;闹钟个数(序号)计数单元WEEKS DATA 58H ;星期

16、的计数单元DISPFLAG DATA 44H ;显示控制标志(单元)FLAG BIT 00H ;满一秒钟标志(位)(刷新时间)KCFLAG BIT 01H ;满50ms标志(位)(启动键盘检测程序)ENINPUT BIT 02H ;数字输入允许/禁止标志(位)JDFLAG BIT 03H ;校时/定时输入判别标志(位)FORBID BIT 04H ;禁止/允许时间刷新标志(位)LEAPYEAR BIT 05H ;闰年标志(位)LEPYER BIT 06H ;闰年标志(位),用于输入缓冲区的时间刷新QUERY BIT 07H ;定时状态下闹钟允许/禁止查询标志。DWFLAG BIT 08H ;日

17、、周皆不等标志(在COMPEAR子程序中)。ALARM BIT 09H ;闹钟报警标志(位)。FLAG1 BIT 0AHKEYNAME DATA 45H ;第4位到第0位用于记录按键的值;第7位 用来判断按键是否有效 ;第6和5位不用KEYSTA DATA 46H ;低三位字节 用来记录按键的状态 ;剩下的不使用PORTDR DATA 47H ;U105(八上升沿D型触发器74HC273)地址内存中的影射地址 ;设置影射地址目的是为了在执行键盘扫描过程中不影响 ;该输出口高3位(b5b3)位内容TEMSTORE DATA 48H ;比较暂存单元(在COMPEAR子程序中)。ALMCNT DAT

18、A 49H ;闹钟响时间(30s)计数单元AGNCNT DATA 4AH ;Ploy显示计数单元INPUTBUF DATA 60H ;60H68H为输入校时/定时时间缓冲(备份)区;输入缓冲区各单元的分配YEAR2 DATA 60H ;年份高两位的计数单元YEAR1 DATA 61H ;年份低两位的计数单元MONTH DATA 62H ;月份的计数单元DAY DATA 63H ;日期的计数单元HOUR DATA 64H ;小时的计数单元MUNITE DATA 65H ;分钟的计数单元SECOND DATA 66H ;秒钟的计数单元NUMB DATA 67H ;闹钟个数(序号)计数单元WEEK

19、DATA 68H ;星期的计数单元ALMTIME DATA 0000H ;将外部RAM的0000H0FFH共256个单元作为定时时间 ;保存区。(8个单元 X 32个闹钟时间 = 256个单元)PORTA EQU 9000H ;8255 A口的地址PORTB EQU 9100H ;8255 B口的地址PORTC EQU 9200H ;8255 C口的地址PORTS EQU 9300H ;8255 控制状态口的地址PORTD EQU 8800H ;U105(74HC273)的地址ORG 0000HLJMP MAINORG 0023HLJMP UART0ORG 002BHLJMP CTC2ORG

20、0050H- 主程序开始 -PROC MAINMAIN: ;-复位后,将08H-0FFH内部RAM单元清0。 MOV R7, #248 MOV R0, #08HLOOP1: MOV R0, #0 INC R0 DJNZ R7, LOOP1 MOV SP,#0DFH ;初始化堆栈指针SP,对于具有256字节内部RAM来说(128字节内部RAM来说:MOV SP,#5FH) MOV DPTR,#8000H ;暂时关闭蜂鸣器 MOV A,#0FFH MOVX DPTR,A ;-初始化D口的状态 MOV DPTR,#PORTD ;初始化D口的状态 MOV A,PORTDR ;当其工作于关闭状态时 ,减

21、少其能量值 ORL A,#00011111B MOVX DPTR,A ;-初始化定时计数器T2 MOV TH2,#0DCH ;初值0DC00送定时器T2 MOV TL2,#00H MOV RCAP2H,#0DCH MOV RCAP2L,#00H ;初始化重装初值 MOV T2CON,#00000100B ;初始化T2工作方式(自动重装初值,定时),并启动T2。 ;-初始化PCON和SCON ANL PCON,#10111111B ;将PCON的b6位清0,使SCON的b7位含义为SM0 MOV SCON,#00H ;串行口工作在方式0,扩展I/O口 ;(SM2位必须为0) ;-初始化8255(

22、U107)可编程并行I/O接口芯片的工作 MOV DPTR,#PORTS MOV A,#10011011B ;A口工作于方式0,输入,B口工作在方式0,输入 ;C口高低位暂时定义为输入 ;-初始化中断控制器 ORL IE,#10110000B MOV T2COUNT,#100 MOV T2KEY,#5 MOV KEYSTA,#07H ;初始化按键的状态 ;(高五位不用.) CLR P1.2 CLR P3.4 MOV NUMBERS,#00H ;复位后为正常的时间计数状态,其标志之 ;一是闹钟序号为0。 调试区 MOV YEARS2,#20 MOV YEARS1,#04 MOV MONTHS,#

23、5 MOV DAYS,#01 MOV HOURS,#12 MOV MUNITES,#59 MOV DISPFLAG,#3 MOV NUMBERS,#12 MOV WEEKS,#6 ;SETB FLAG ;满一秒钟到标志(位)(刷新时间) CLR LEAPYEAR 调试区WAIT: JNB KCFLAG,NEXT CLR KCFLAG ;清除50ms时间到标志 LCALL KEYCHK ; 满50ms即检测一次键盘 MOV A,KEYNAME ; 读按键的值 JNB ACC.7,NEXT ; 按键无效则跳出(跳至NEXT) CLR ACC.7 SETB FLAG ;满一秒钟到标志(位)(刷新时间

24、) SETB FLAG1 MOV KEYNAME,A ;清除按键处理标志 CJNE A,#10,NEXT1NEXT1: JC NEXT2 ;如按下的是数字键,跳到NEXT2 LCALL FUNCTION ;专门处理功能键的子程序 SJMP NEXTNEXT2: JNB ENINPUT,NEXT ;如输入不允许,跳过以下一段程序。 LCALL JDSUB ;专门处理校时/定时输入的子程序 JNB QUERY,NEXT LCALL DINGSHI ;处于定时设定状态时,在处理完输入后, ;即调用此子程序进行进一步的处理。NEXT: JNB FLAG,WAIT ;不满一秒即等待 CLR FLAG L

25、CALL PROCESS JNB JDFLAG,WAIT ;处于定时设置状态时不进行时间的比较 ;以及相应的动作。 LCALL COMPARE ;时间比较子程序,用于闹钟。 JNB ALARM,NEXT3 MOV DPTR,#8000H ;启动蜂鸣器 MOV A,#00H MOVX DPTR,A INC ALMCNT MOV A,ALMCNT CJNE A,#30,NEXT4NEXT4: JC NEXT5 MOV ALMCNT,#00H CLR ALARMNEXT3: MOV DPTR,#8000H ;关闭蜂鸣器 MOV A,#0FFH MOVX DPTR,ANEXT5: SJMP WAITE

26、ND-功能键子程序-PROC FUNCTIONFUNCTION: CJNE A,#19,NEXT2 ;按下Down键 JB ENINPUT,NEXTT ;处于输入状态时,此键无效 SETB ENINPUT CLR JDFLAG ;设为定时输入标志。 SETB FORBID ;禁止时间刷新 MOV R0,#YEARS2 ;将当前时间值送入输入缓冲区,以便 MOV R1,#INPUTBUF ;取消定时输入时,或设定完定时时间后, MOV R2,#9 ;可恢复原先计数时间。LOOP1: MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R2,LOOP1 SJMP NEXTTN

27、EXT2: CJNE A,#18,NEXT3 ;按下Esc键 JNB ENINPUT,NEXT ;处于非输入状态时,此键无效 MOV R0,#YEARS2 ; MOV R1,#INPUTBUF ;将输入缓冲区的时间值送回显示缓冲区 MOV R2,#9 ;LOOP2: MOV A,R1 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP2 CLR FORBID ;解除对时间刷新的禁止 CLR ENINPUT ;禁止数据的输入 MOV NUMBERS,#00H CLR P1.2 CLR P3.4 SJMP NEXTNEXT3: CJNE A,#17,NEXT4 ;按下Enter

28、键 JNB ENINPUT,NEXT ;处于非输入状态时,此键无效 LCALL ENTER ;专门处理Enter键的子程序 MOV NUMBERS,#00H SJMP NEXTNEXT4: CJNE A,#16,NEXT5 ;按下Up键 JB ENINPUT,NEXT ;处于输入状态时,此键无效 SETB ENINPUT SETB JDFLAG SETB FORBID ;禁止时间刷新 MOV R0,#YEARS2 ;将当前时间值送入输入缓冲区,以便 MOV R1,#INPUTBUF ;取消校时时,可恢复原先时间。 MOV R2,#9 LOOP3: MOV A,R0 MOV R1,A INC R

29、0 INC R1 DJNZ R2,LOOP3 MOV NUMBERS,#0 ;进入校时状态后,闹钟序号恒为0(不可修改)NEXTT: SJMP NEXTNEXT5: CJNE A,#15,NEXT6 ;按下F键 MOV DISPFLAG,#1 SJMP NEXTNEXT6: CJNE A,#14,NEXT7 ;按下E键 MOV DISPFLAG,#2 SJMP NEXTNEXT7: CJNE A,#13,NEXT8 ;按下D键 MOV DISPFLAG,#3 SJMP NEXTNEXT8: CJNE A,#12,NEXT9 ;按下C键 MOV DISPFLAG,#4 SJMP NEXTNEXT

30、9: CJNE A,#11,NEXT10 ;按下B键 MOV DISPFLAG,#5 SJMP NEXTNEXT10: CJNE A,#10,NEXT ;按下A键 CPL QUERY ;定时状态下允许/禁止查询某闹钟序号的设置状态NEXT: RETEND-专门处理Enter键的子程序-PROC ENTERENTER: JB JDFLAG,NEXT1 ;处于校时输入状态则不回送, ;且设定时间不送到定时时间保存区。 MOV A,NUMBERS ;闹钟序号 DEC A MOV B,#8 ;每一段定时时间占用8个单元。 MUL AB ;(NUMBERS-1)X 8 作为地址偏移量 ADD A,#AL

31、MTIME ;亦可写成:ADD A,#0 MOV R1,A MOV R0,#YEARS2 ;处于定时输入状态时应回送,但在回送之前, MOV R2,#6 ;应将设定的定时时间值送定时时间保存区。LOOP1: MOV A,R0 MOVX R1,A INC R0 INC R1 DJNZ R2,LOOP1 INC R0 ;跳过秒计数单元(秒钟的值不存入定时时间 MOV R2,#2 ;保存区)LOOP3: MOV A,R0 MOVX R1,A INC R0 INC R1 DJNZ R2,LOOP3 ;处于定时输入状态,应回送。 MOV R0,#YEARS2 MOV R1,#INPUTBUF ;将输入缓

32、冲区的时间值送回显示缓冲区 MOV R2,#9 LOOP2: MOV A,R1 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP2NEXT1: CLR ENINPUT CLR P1.2 CLR P3.4 CLR FORBID ;允许时间刷新 RETEND-校时/定时输入子程序-PROC JDSUBJDSUB: MOV R0,#DISBUF MOV A,DISPFLAG ;判断要对哪个时间区进行校时 CJNE A,#1,NEXT1 MOV R0,#YEARS1 ;将每一时间段的低位地址赋予R0, MOV R1,#YEARS2 ;高位地址赋予R1 SJMP NEXT5NEXT

33、1: CJNE A,#2,NEXT2 MOV R0,#DAYS MOV R1,#MONTHS SJMP NEXT5NEXT2: CJNE A,#3,NEXT3 MOV R0,#MUNITES MOV R1,#HOURS SJMP NEXT5NEXT3: CJNE A,#4,NEXT4 MOV R0,#SECONDS MOV R1,#MUNITES SJMP NEXT5NEXT4: CJNE A,#5,NEXT5 MOV R0,#WEEKS JB JDFLAG,NEXT5 ;处于校时状态时,闹钟序号(NUMBERS) MOV R1,#NUMBERS ;不可修改,其值恒为0。NEXT5: MOV

34、A,KEYNAME CJNE A,#9,NEXT6 INC R0 SJMP NEXT9NEXT6: CJNE A,#8,NEXT7 INC R1 SJMP NEXT9NEXT7: CJNE A,#6,NEXT8 DEC R0 SJMP NEXT9NEXT8: CJNE A,#5,NEXT9 DEC R1 SJMP NEXT9NEXT9: SETB FLAG RETEND-T2的中断服务程序-PROC CTC2CTC2: ;无须保护现场 DJNZ T2KEY,NEXT MOV T2KEY,#5 SETB KCFLAGNEXT: DJNZ T2COUNT,GOTO ;溢出次数减1,不为0跳转 ;溢

35、出次数已经回到0,重新初始化溢出次数 MOV T2COUNT,#100 SETB FLAGGOTO: CLR TF2 ;清除定时器T2溢出标志 RETIEND-各时间单元的计数处理与缓冲区处理子程序-PROC PROCESSPROCESS: PUSH PSW PUSH ACC PUSH DPH PUSH DPL SETB RS1 ;切换工作寄存器(这里假设用1区) CLR RS0 JNB ENINPUT,NEXT30 JNB JDFLAG,NEXT31 ;通过LED可以知道其处于定时还是校时 CPL P1.2 ;关闭个位 CLR P3.4 ;打开十位(处于定时) SJMP NEXT30NEXT

36、31: CPL P3.4 CLR P1.2 JNB QUERY,NEXT30 CPL P1.1NEXT30:;For seconds_COUNT: JNB FLAG1,NEXT21 CLR FLAG1 SJMP NEXT15NEXT21: JB FORBID,NEXT15 ;禁止时间刷新 INC SECONDSNEXT15: JB JDFLAG,NEXT16 ;处于校时状态时,输入缓冲区的时间不刷新 INC SECOND ;处于定时输入状态时输入缓冲区的时间应刷 LCALL RENOVATE ;新,以便不影响时钟的正常计数NEXT16: MOV A,SECONDS CJNE A,#60,NEXT1NEXT1: JC NEXT2 ;秒大于60,从0开始计数,且分计数单元加1 INC MUNITES MOV SECONDS,#00HNEXT2:;For munites_COUNT: MOV A,MUNITES CJNE A,#60,NEXT3NEXT3: JC NEXT4 INC HOURS MOV MUNITES,#00NEXT4:;For

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号