微机原理课程设计报告-数字时钟的实现(附代码)
微机原理课程设计电子闹钟

电子钟设计1任务要求1.1显示位置:屏幕中央.1.2日期显示格式"时:分:秒.1.312/24时制可调.1.4在显示屏上显示提示语“CURRENT TIME IS:”和当前时间.2工作原理1时钟起始时间的设置先调用DOS操作系统模块9,在显示屏上显示提示语“TIME SYSTEM IS:”,输入时制12或24后,显示“CURRENT TIME IS:”,再调用DOS操作系统模块10,提示要输入时钟的起始时间,输入时间的格式是“时:分:秒”。
输入的时间以字符串形式存放在已定义的存储器缓存区内,继而调用TRAN1转换子程序和MUL10乘10子程序,将存放在存储器缓存区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放在寄存器CH、DH、DL中。
2延时程序调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。
在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。
秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。
3时间显示调用DOS操作系统模块9,可用来显示存储器内字符串。
由于显示的字符必须为ASCII码,因为要调用TRAN2转换子程序将寄存器CH、DH、DL内压缩BCD码字符串转换成ASCII字符串,字符串最后以字符“$”结束,并按时、分、秒的顺序送存储器缓冲区内。
调用DOS 操作系统模块9,(DS:DX)应指向字符串首址。
程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下CTRL和BREAK二键。
4程序堆图5程序清单DATA SEGMENTBUFFER DB 10 ;设置输入字符串用缓冲区 DB ?DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$'CT DB 'CURRENT TIME IS:$'PM DB 'PM $'AM DB 'AM $'KEEPIP DW 0KEEPCS DW 0SR DB ?HOUR DB ?DAT ENDSSTA SEGMENT PARA STACK 'STACK'STAPN DB 100 DUP(?)TOP EQU LENGTH STAPNSTA ENDSCOD SEGMENTSTART PROC FARASSUME CS:COD,DS:DAT,SS:STAMOV AX,DATAMOV DS,AXMOV AX,STAMOV SS,AXMOV AX,TOPMOV SP,AXMOV AH,35H ;设置1CH中断MOV AL,1CHINT 21H ;段地址放入ES,偏移地址放入BXMOV KEEPIP,BX ;保偏移地址存MOV KEEPCS,ES ;保存段地址PUSH DSMOV DX,OFFSET TIMEMOV AX,SEG TIMEMOV DS,AXMOV AL,1CHMOV AH,25H ;设置中断功能调用INT 21HPOP DSMOV DX,OFFSET TS ;DOS功能模块,显示字符串MOV AH,9INT 21HMOV AH,1 ;DOS功能模块,从键盘输入字符INT 21HMOV AH,1INT 21HMOV SR,ALMOV DL,0AH ;"换行"MOV AH,2INT 21HMOV DL,0DH ;"回车"MOV AH,2INT 21HMOV DX,OFFSET CT ;DOS功能模块,显示字符串,提示从键盘输入MOV AH,9INT 21HMOV DX,OFFSET BUFFERMOV AH,10 ;DOS功能模块,从键盘输入字符串到缓冲区INT 21HMOV BX,OFFSET BUFFER+2CALL TRAN1 ;将输入的ASCII码转换为BCD码INC BXINC BXCALL TRAN1INC BXINC BXCALL TRAN1MOV BX,OFFSET BUFFER+2MOV AL,[BX]CALL MUL10 ;将BCD码转换为压缩的BCD码MOV CH,ALINC BXINC BXMOV AL,[BX]CALL MUL10MOV DH,ALINC BXINC BXMOV AL,[BX]CALL MUL10MOV DL,ALAGAIN: PUSH CXMOV CX,18STI ;开中断W: CMP CX,0JNE WCLIPOP CXMOV AL,DLADD AL,1 ;"秒"加1DAAMOV DL,ALCMP AL,60H ;"秒"与60比较JNE DISPY ;小于60S,转显示程序MOV DL,0 ;等于60S, "秒"值为0,"分"+1MOV AL,DHADD AL,1DAAMOV DH,ALCMP AL,60H ;"分"于60比较JNE DISPYMOV DH,0MOV AL,CHADD AL,1DAAMOV CH,ALMOV AL, SRCMP AL,32HJNE NEXTJMP DISPYNEXT: MOV AL,CHMOV HOUR,CHCMP AL,24HJNE DISPYMOV CH,0DISPY: CALL IOCLRCALL IOSET1CALL STARCALL IOSET2CALL STARCALL IOSETMOV BX,OFFSET BUFFERMOV AL,SRCMP AL,32HJNE NEXT2CALL AD12MOV AL,HOURJMP NEXT1NEXT2: MOV AL,CH ;"时"值转换成ASCII码NEXT1: CALL TRAN2 ;将压缩BCD码转换成ASCII码MOV AL,':'MOV [BX],ALINC BXMOV AL,DH ;"分"值转换成ASCII码CALL TRAN2INC BXMOV AL,':'MOV [BX],ALINC BXMOV AL,DL ;"秒"值转换成ASCII码CALL TRAN2INC BXMOV AL,'$' ;显示字符串结束码MOV [BX],ALPUSH BXPUSH CXPUSH DXMOV DX,OFFSET BUFFERMOV AH,9 ;DOS功能模块,显示字符串INT 21HPOP DXPOP CXPOP BXJMP AGAINCLIPUSH DSMOV DX,KEEPIPMOV AX,KEEPCSMOV DS,AXMOV AH,25HMOV AL,1CHINT 21HPOP DSSTIRETSTART ENDPMUL10 PROC ;将BCD码转换为压缩的BCD码ADD AL,ALDAAMOV CL,ALADD AL,ALDAAADD AL,ALADD AL,CLDAAMOV CL,ALINC BXMOV AL,[BX]ADD AL,CLRETMUL10 ENDPTRAN1 PROC ;ASCII码转换成BCD码MOV AL,[BX]AND AL,0FHMOV [BX],ALINC BXMOV AL,[BX]AND AL,0FHMOV [BX],ALRETTRAN1 ENDPTRAN2 PROC ;将压缩BCD码转换成ASCII码MOV CL,ALSHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV [BX],ALINC BXMOV AL,CLAND AL,0FHOR AL,30HMOV [BX],ALRETTRAN2 ENDPIOCLR PROC ;调用BIOS,清除全屏幕PUSH CXPUSH DXPUSH BXPUSH AXMOV AX,0600HMOV BH,02SUB CX,CXMOV DX,184FHINT 10HPOP BXPOP DXPOP CXRETIOCLR ENDPTIME PROCDEC CXIRETTIME ENDP ;调用BIOS,设置屏幕光标在中央PUSH DXPUSH BXPUSH AXMOV AH,02SUB BH,BHMOV DX, 0C23HINT 10HPOP AXPOP BXPOP DXRETIOSET ENDPIOSET1 PROCPUSH AXPUSH BXPUSH DXMOV DX,0A1AHMOV BH,00MOV AH,02INT 10HPOP DXPOP BXPOP AXRETIOSET1 ENDPIOSET2 PROCPUSH AXPUSH BXPUSH DXMOV DX,0E1AHMOV BH,00MOV AH,02INT 10HPOP BXPOP AXRETIOSET2 ENDPSTAR PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV AL,3DHMOV BH,0MOV BL,0CHCMP HOUR,24HJNZ XMOV HOUR,0HX: MOV CX,WORD PTR HOUR INT 10HPOP DXPOP CXPOP BXPOP AXRETSTAR ENDPAD12 PROCPUSH DXMOV HOUR,CH MOV AL,SRCMP AL,32HJNE ZHMOV AL,HOURCMP AL,24HJNE NEXT3MOV CH,0MOV HOUR,CHJMP S12NEXT3: CMP AL,12HJBE S12MOV DX,OFFSET PMMOV AH,9INT 21HMOV AL,HOURMOV DH,12HSUB AL,DHDASMOV HOUR,ALJMP ZHS12: CMP AL,12HJNE ZMOV DX,OFFSET PMMOV AH,9INT 21HJMP ZHZ: MOV DX,OFFSET AMMOV AH,9INT 21HZH: POP DXRETAD12 ENDPCOD ENDSEND STAR6设计时遇到的问题及解决方法在课程设计中遇到的最大的困难是如何利用软、硬件配合的方式产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好.于是我又重新翻阅了我们的学习课本,也就是电子工业出版社的《微机原理与接口技术(基于16位机)》,重点研究了第9章《中断》,通过对这一章的学习,我终于对中断有了详细的认识,在设计程序时也容易了很多。
微机原理课程设计-数字时钟

微机原理课程设计设计题目:电子时钟班级:08电信系机电五班姓名及学号:薛鹏(***********)目录一、摘要二、引言三、电子时钟的设计:1.设计目的2.设计任务3.电路原理图四、程序设计(1)设计思路(2)设计流程图(3) 源代码五、软件调试六、设计总结和心得体会摘要:近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。
一、引言单片机是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。
单片机是把主要计算机功能部件都集成在一块芯片上的微型计算机。
它是一种集计数和多中接口于一体的微控制器,被广泛应用在智能产品和工业自动化中。
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
8086是Inter系列的16位微处理器,芯片上有2.9万个晶体管,采用HMOS工艺制造,用单一的+5V电源,时钟频率为5MHz~10MHz。
微机原理闹钟实验报告

微机原理闹钟实验报告实验名称:微机原理闹钟实验报告实验目的:1. 了解单片机的基本工作原理和编程方法;2. 学习如何使用单片机设计并实现闹钟功能;3. 掌握数字时钟显示技术。
实验器材:1. 单片机实验箱;2. AT89C52单片机;3. LED数码管;4. 4位开关;5. 电源线;6. 连线线缆。
实验原理:本次实验使用单片机AT89C52来设计和实现闹钟功能。
单片机是一种微型电子计算机系统,具有高度集成、功能强大等特点。
数码管是一种常见的数字显示装置,适用于时钟、计时器等场合。
实验步骤:1. 将AT89C52单片机与LED数码管通过连接线连接起来,保证电源线的正负极连接正常。
2. 编写C程序,实现显示当前时间的功能。
通过编程可以将当前时间在数码管上显示出来。
3. 设定闹钟时间和闹铃的功能,通过编程实现。
当闹钟时间到达时,数码管上会显示闹钟时间,并通过蜂鸣器发出声音。
4. 调试程序,确保闹钟功能正常运行。
5. 完成闹钟的相关操作,包括设置闹钟时间、启动闹钟、关闭闹钟等功能。
实验结果:经过编程和调试,我们成功实现了微机原理闹钟的功能。
我们能够通过设置闹钟时间并启动闹钟来实现报时的功能。
当闹钟时间到达时,数码管上会显示相应的时间,并通过蜂鸣器发出声音,起到提醒作用。
实验总结:通过这次实验,我深入了解了单片机的基本工作原理和编程方法。
同时,我学会了使用单片机设计和实现闹钟功能,并掌握了数字时钟显示技术。
这次实验让我对单片机的应用有了更深刻的认识,并提高了我对数字电路设计和编程的能力。
同时,我还发现了实验过程中可能存在的问题和改进的空间。
例如,我可以进一步完善闹钟功能,加入更多的定时和报时功能,提高闹钟的多样化和实用性。
此外,我还可以优化程序的运行效率,提高系统的稳定性和响应速度。
总之,本次实验对我的学习和提高具有重要意义。
通过实践操作,我深入理解了微机原理闹钟的设计与实现,拓宽了我的知识面和实践能力。
我将继续深入学习和掌握微机原理和相关技术,为以后的学习和研究打下坚实的基础。
微机原理课程设计--数字时钟

课程设计报告课程设计名称:数字时钟系:三系学生姓名:梁文化阿龙班级:通信班学号: ************ 成绩: 100 指导教师: * * 开课时间: 2013-2014 学年 1 学期一.设计题目:数字时钟二.主要内容:编程实现时钟功能,按秒刷新,要求定位在屏幕右上角。
三.具体要求:在课程设计时,1人一组,设计报告由学生独立完成,不得互相抄袭。
教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。
学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而不应处处被动地依赖指导老师。
学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。
学生学会掌握和使用各种已有的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。
学生要在老师的指导下制定好自己各环节的详细设计进程计划,按给定的时间计划保质保量的完成个阶段的设计任务。
设计中可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。
四.进度安排五.成绩评定考核方法:现场验收(占50%),课程设计报告(占50%)。
考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制质量、演示效果、设计报告质量。
成绩评定:优,良,中,及格,不及格。
特别说明:如发现抄袭,按照不及格处理。
目录一.课题的功能模块的划分 (4)二.主要功能实现 (5)三.心得体会 (7)四.源程序 (8)五.上机调试 (10)六.主要参考资料 (10)一.课题的功能模块的划分显示系统时间程序可以大致分为三个模块:1.利用1ch号功能来重定位中断程序的入口地址2.调用21号中断的31h程序结束并驻留功能,使得显示时间的子程序常驻内存3.显示系统时间模块功能模块图如下:Y二.主要功能实现1.重定位入口地址;重定位中断程序的入口地址lea dx,showtimemov ax,seg showtimemov ds,axmov ax,251chint 21h2.程序驻留并结束;调用21号中断的31h程序结束并驻留功能mov ax,3100hmov dx,proclenint 21h3.显示系统时间showtime procpush axpush bxpush dspush esmov ax,csmov ds,axmov ax,0b800hmov es,axmov ax,2c00h ;调用21h号中断的2ch功能int 21h;输出时钟mov bl,':'mov bh,chcall adjustmov es:[120],almov es:[120+2],ahmov es:[120+4],bl;输出分钟mov bh,clcall adjustmov es:[120+6],almov es:[120+8],ahmov es:[120+10],bl;输出秒钟mov bh,dhcall adjustmov es:[120+12],almov es:[120+14],ahpop espop dspop bxpop axiretshowtime end显示系统时间的流程图如下:三.心得体会为期一周的课程设计就要结束了,回想这一周,我经历了许多,懂得了许多。
微机原理课程设计——电子时钟课程设计

电子时钟课程设计一:设计背景电子数字钟的应用十分广泛,通过计时精度很高的石英晶振(也可采用卫星传递的时钟标准信号),采用相应进制的计数器,转化为二进制数,经过译码和显示电路准确地将时间“时”“分”“秒”用数字的方式显示出来。
与传统的机械钟相比,它具有走时准确,显示直观,无机械传动,无需人的经常调整等优点。
它广泛用于电子表、车站、码头、广场等公共场所的大型远距离时间显示电子钟。
二:数字钟电路设计思路利用8253定时器和中断控制器8259实现中断计时时,可用8253的两个通道(通道0和通道1)串联产生1S计时脉冲。
每个1S计时脉冲产生一次中断请求,在中断服务程序完成中断计时并刷新时间显示。
利用8279键盘显示器实现当前时间的显示和时间的校准。
在主程序完成各可编程接口芯片(8253、8259、8279)的初始化、键盘扫描及时间校准。
在校表状态关中断,校表结束时开中断。
三:程序流程图三、电子表原理图:四:程序代码D8279 equ 200H C8279 equ 202H C8253 equ 20bH D82530 equ 208H D82531 equ 209H C82590 equ 210H C82591 equ 211H data segment HOUR db 00 MINUTE db 00SECOND db 008STAT db 00LEDdb 31H,06H,5bH,4fH,66H,6dH,7dH,27H,7fH,6fH,00H,00H DISBUF db 8 dup(0)data endsstack segment stackdw 100 dup(?)stack endscode segmentassume cs:code,ds:dataSTART: MOV AX,DATAMOV DS,AXCLIMOV AL,13HMOV DX,C82590OUT DX,ALMOV AL,8MOV DX,C82591OUT DX,ALMOV AL,1OUT DX,ALMOV AX,0MOV ES,AXLEA AX,INT0MOV AX,CSMOV ES:[4*8+2],AXMOV DX,C8253MOV AL,36HOUT DX,ALMOV DX,D82530MOV AX,10000OUT DX,ALMOV AL,AHOUT DX,ALMOV DX,C8253MOV AL,36HOUT DX,ALMOV DX,D82531MOV AX,100OUT DX,ALMOV AL,AHOUT DX,ALMOV DX,C8279MOV AL,00HOUT DX,ALMOV AL,34HOUT DX,ALMOV AL,0D2HOUT DX,ALMOV STAT,0MOV DX,C82591MOV AL,0FEHOUT DX,ALWAIT1: MOV DX,C8279 IN AL,DXMOV AH,ALAND AL,80HJNE WAIT1MOV AL,AHAND AL,0FHCMP AL,00HJE WAIT1MOV AL,40HOUT DX,ALCHK: MOV DX,D8279IN AL,DXCMP AL,33HJNE BBBMOV DX,C82591MOV AL,0FFHOUT DX,ALMOV AL,STATINC ALMOV STAT,ALCMP AL,1JNZ AA1MOV SI,OFFSET DISPBUFMOV CX,4MOV AL,00BB0: MOV [SI],ALINC SILOOP BB0CALL DISPJMP CHKAA1: CMP AL,2JNZ AA2MOV SI,OFFSET DISPBUFMOV AL,00MOV [SI],ALINC SIMOV [SI],ALADD SI,2MOV [SI],ALINC SIMOV [SI],ALCALL DISPJMP CHKAA2: CMP AL,3JNZ AA3MOV SI,OFFSET DISPBUF+2MOV CX,4MOV AL,00BB1: MOV [SI],ALINC SILOOP BB1CALL DISPJMP CHKAA3: MOV STAT,00MOV AL,0FEHMOV DX,C82591OUT DX,ALCALL FULLSFMCALL DISPJMP CHKBBB: CMP AL,3BHJE BBB0JMP CCCBB0: MOV AL,STATCMP AL,1JNZ BBB1MOV AL,HOURADD AL,1DAAMOV HOUR,ALCALL FULLSH1CALL DISPJMP BBBBBB1: MOV AL,STATCMP AL,2JNZ BBB3MOV AL,MINUTEADD AL,1DAAMOV MINUTE,ALCALL FULLFENCALL DISPJMP BBBBBB3: MOV AL,STATCMP AL,3JZ BBB4JMP DDDBBB4: MOV AL,SECONDADD AL,1DAAMOV SECOND,ALCALL FULLMIAOCALL DISPJMP BBBCCC: CMP AL,3AHJE CC0JMP DDDCC0: MOV AL,STATCMP AL,1JNZ CCC1MOV AL,HOURSUB AL,1DASMOV AL,HOURSUB AL,1ADD AL,1DAAMOV SECOND,ALCMP AL,60HJNZ FANHUIMOV SECOND,0MOV AL,MINUTEADD AL,1DAAMOV MINUTE,ALCMP AL,60HJNZ FANHUIMOV MINUTE,0MOV AL,HOURADD AL,1DAAMOV HOUR,ALCMP AL,24HJNZ FANHUIMOV HOUR,0CALL FULLSFMCALL DISPPOP SIPOP DIPOP BXPOP AXIRETFULL SFM PROC NEARLEA DI,DISBUFLEA BX,LEDLEA SI,SECONDMOV CX,3AA4:MOV AL,[SI]AND AL,0FHXLATMOV [DI],ALINC DIMOV AL,[SI]PUSH CXMOV CL,4SHR AL,CLAND AL,0FHXLATMOV [DI],ALINC DIPOP CXINC SILOOP AA4RETFULL SFM ENDPFULL SHI PROC NEARLEA SI,DISBUFMOV AL,0MOV CX,4CCC0: MOV [SI],ALINC SILOOP CCC0LEA BX,LEDMOV AL,HOURAND AL,0FHXLATMOV [SI],ALXLATMOV [SI],ALMOV AL,HOURMOV CL,4SHR AL,CLAND AL,0FHXLATINC SIMOV [SI],ALRETFULL SHI ENDPFULL FEN PROC NEARLEA SI,DISBUFMOV AL,0MOV [SI],ALINC SIMOV [SI],ALINC SILEA BX,LEDMOV AL,MINUTEAND AL,0FHXLATMOV [SI],ALMOV AL,MINUTEMOV CL,4SHR AL,CLAND AL,0FHXLATINC SIMOV [SI],ALRETFULL FEN ENDPFULL MIAO PROC NEARLEA SI,DISBUFLEA BX,LEDMOV AL,SECONDAND AL,0FHXLATMOV [SI],ALMOV AL,SECONDMOV CL,4SHR AL,CLAND AL,0FHXLATINC SIMOV [SI],ALMOV AL,0INC SIMOV [SI],ALINC SIMOV [SI],ALINC SIMOV [SI],ALINC SIMOV [SI],ALRETFULL MIAO ENDPDISP PROC NEARMOV CX,8MOV DX,D8279LEA SI,DISBUF DISIMOV AL,[SI]OUT DX,ALINC SILOOP DISIRETCODE ENDSEND START。
(完整word版)微机原理课程设计(电子时钟)(word文档良心出品)

电子时钟课程设计一:设计背景电子数字钟的应用十分广泛,通过计时精度很高的石英晶振(也可采用卫星传递的时钟标准信号),采用相应进制的计数器,转化为二进制数,经过译码和显示电路准确地将时间“时”“分”“秒”用数字的方式显示出来。
与传统的机械钟相比,它具有走时准确,显示直观,无机械传动,无需人的经常调整等优点。
它广泛用于电子表、车站、码头、广场等公共场所的大型远距离时间显示电子钟。
二:数字钟电路设计思路1.选用8253计数器2进行1s的定时,其输出OUT1与8259的IRQ0相连,当定时到1s时产生一个中断服务程序进行时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号。
时、分、秒的数值通过对8255的编程可送到七段数码管上显示。
2.此程序主要由四部分组成:第一部分为最主要的部分定义显示界面;第二部分为利用延时程序,并将调用的二进制表示的时间数转换成ASCII码,并将时间数存入内存区;第三部分将存在系统内存区的时间数用七段数码管显示出来;第四部分利用循环程序分别对秒个位、秒十位、分个位、分十位与相应的规定值进行比较,结合延时程序来实现电子钟数字的跳变,从而形成走时准确的电子钟。
该程序实现了准确显示秒和分,读数准确,走时精准。
此电子钟能准确的从0时0分0秒走时到23时59分59秒,然后能自动回复到0时0分0秒循环走时。
3.基本工作原理:系统设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块三大部分组成。
以8086微处理器作CPU,用8253做定时器产生时钟频率提供一个频率为10kHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。
在写入控制字与计数初值后,每到10ms定时器就启动工作,即当计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,当达到100次时,则输出端OUT1输出1s,向CPU申请中断,由8255控制一个数码管显示,当计数到60s时,则输出端OUT2向CPU申请中断,由另一数码管显示1min,同理由数码管显示1h.CPU处理,使数码管的显示发生变化。
微机原理课程设计-闹钟

微机原理课程设计说明书学院:电力学院姓名:学号:专业:______________________指导老师:目录一、设计意义 (1)二、设计任务 (1)1、设计要求 (1)2、设计原理 (1)三、硬件设计 (2)四、软件设计 (4)1、设计过程 (5)2、程序流程图 (5)3、功能模块 (5)五、设计心得 (8)附录 (9)1.设计意义“微机原理与接口技术”是一门实践性和实用性都很强的课程,学习的目的在于应用。
本课程设计是配合“微机原理与接口技术”课堂教学的一个重要的实践教学环节,它能起到巩固课堂和书本上所学知识,加强综合能力,提高系统设计水平,启发创新思想的效果。
2.设计任务一、设计要求1.从键盘输入闹铃时间(如09:45)2.程序开始记时,并在屏幕上显示时间(如08: 30: 21)并实时刷新3.时间到,则发出闹铃声,声音维持数秒,同时屏幕显示响铃提示;同时时间停止刷新;4.能处理输入错误(如闹钟响铃时间应为数字,但用户错误输入非数值型的字符)二、设计原理分析1.显示系统时间1)使用DOS功能调用(INT 21H)中的2CH中断截取系统时间,再调用显示时间的子程序把时间显示出来(例如显示当前时间为16:30:45并且如果时间数少于两位数就要在其前面加0后显示出来如04: 07: 03);2)利用端口61H中的PB4每15.08微秒触发一次的特点,通过适当的循环次数进行循环从而实现延时1秒钟;3)在延时后再循环执行步骤1从而实现时间每一秒的刷新,在屏幕上不断显示当前的时间;2.设置闹钟响铃时间与输入时的容错处理方法1)在数据段定义好字型变量HOUR、MINUTE分别用于存放响铃时的小时数与分钟数;2)设置闹钟响铃时间由于形式为12:45 (小时:分钟)为了方便进行容错处理,可以分别用一段代码实现每一位数的输入,总共需要输入五位数字。
例如,输入前两位的小时数时,在输入第一位时,判断输入的是否是从0到2范围里的一个数字,如果不是就显示错误信息并停止程序的运行;在输入小时的第二位数时,判断输入的是否是0到9范围里的一个数字,如果不是就显示错误信息并停止程序的运行;在输入第三位时(应该是冒号)再判断是否是冒号,如果不是就显示错误信息并停止程序的运行;输入第四位(即分钟数的第一位)判断输入的是否是0到5数字里的一个,如果不是就显示错误信息并停止程序的运行;输入最后一位判断是否是0到9的范围中的一个数字,如果不是就显示错误信息并停止程序的运行等等;3)每次输入如果确定输入无误就使用书本中处理输入一个十进制数常用的方法把输入的数存储到寄存器中,再把它存入相应的变量中如小时数存到变量HOUR中,分钟数存入变量MINUTE中;3.当到达闹钟响铃时间时响铃1)每次在截取系统时间前先把寄存器BX清零,截取时间后把截取到的系统时间分别与变量HOUR与变量MINUTE进行比较,如果相等,就使寄存器BX加1,这样再执行完截取系统时间后检查BX是否为2,如果是2就表示已经到达设定好的闹铃时间,就跳出显示时间的死循环,跳到响铃的循环去;2)响铃是使用DOS功能调用(INT 21H)中的2H,同时把7H放到DL寄存器中,执行一次后延时三秒(延时的方法同显示时间时所用延时方法一样)再执行一次共循环执行40次从而实现了响铃几秒钟的功能;3 .硬件设计音乐播放1. 8253功能结构:Intel8253是8086/8088微机系统常用的定时器/计数器芯片,它具有定时计数两大功能。
数字时钟代码

数字时钟代码1. 介绍数字时钟是一种常见的显示时间的装置,它通过数字显示屏显示当前的小时和分钟。
本文档将介绍如何编写一个简单的数字时钟代码。
2. 代码实现以下是一个基本的数字时钟代码实现示例:import timewhile True:current_time = time.localtime()hour = str(current_time.tm_hour).zfill(2)minute = str(current_time.tm_min).zfill(2)second = str(current_time.tm_sec).zfill(2)clock_display = f"{hour}:{minute}:{second}"print(clock_display, end="\r")time.sleep(1)代码说明:- `time.localtime()` 函数返回当前时间的结构化对象,包括小时、分钟和秒等信息。
- `str(current_time.tm_hour).zfill(2)` 将小时转换为字符串,并使用 `zfill()` 方法填充到两位数。
- `str(current_time.tm_min).zfill(2)` 和`str(current_time.tm_sec).zfill(2)` 同理处理分钟和秒。
- 使用 f-string 格式化字符串 `clock_display`,将小时、分钟和秒显示为 `` 的形式。
- `print(clock_display, end="\r")` 使用 `\r` 实现覆盖打印,使得时钟在同一行连续显示。
- `time.sleep(1)` 让程序每隔一秒更新一次时间。
请注意,上述代码需要在支持 Python 的环境中运行。
3. 结束语通过以上的代码实现,我们可以编写一个简单的数字时钟。
单片机课程设计《数字时钟功能和步进电机控制功能实现》实验报告附程序

备选功能
P3.0 RXD
串行输入口
P3.1 TXD
串行输出口
P3.2 /INT0
外部中断0
P3.3 /INT1
外部中断1
P3.4 T0
计时器0外部输入
P3.5 T1
计时器1外部输入
P3.6 /WR
外部数据存储器写选通
P3.7 /RD
外部数据存储器读选通
(7)RST:复位输入。复位器件时,要保持RST脚两个机器周期的高电平时间。
(8)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
(9)PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(10)XTAL1、XTAL2:时钟引脚
二、电机驱动电路ULN2003A
通过LCD液晶屏对时间进行显示。
2)电机调速及LCD液晶显示
启动后,电机以最低速率转动。
通过按键命令完成加速、减速、正反转等动作,加速按键被按下后,电机速率加快一个单位,同时液晶屏显示的速度值加1;按下反转键后,电机向逆时针反转。
在液晶屏上显示电机转动方向、速度级别。
第二章电路设计图图2-电路设计框图图3-1控制器AT89C51
各管脚功能介绍:
(1)VCC:供电电压。
(2)GND:接地。
(3)P0口:定义为数据/地址的低八位。读操作时,应先向端口写上“1”。
(4)P1口、P2口:分别接收低八位地址、高八位地址。
P3口除作输入输出外,也可作为AT89C51的一些特殊功能口,如下表所示:
表3-1P3口特殊功能
图3-3步进电机原理图
微机原理数字钟的设计

目录一、设计要求 (1)二、设计目的 (1)三、设计的具体实现 (1)1、系统概述 (1)2、单元电路设计 (2)2.1、8255初始化: (3)2.2、8253初始化: (3)2.3、8259初始化: (4)3、软件程序设计和调试 (5)3.1、主程序流程图: (5)3.2、电子时钟中断处理程序流程图: (6)3.3、显示模块流程图: (7)3.4、程序代码: (7)四、结论与展望 (14)五、心得体会及建议 (14)六、附录 (15)七、参考文献 (15)电子时钟的设计报告一、设计要求利用8259A中断控制器、8253定时/计数器、8255A接口芯片以及键盘和数码显示电路,设计一个电子时钟,由8253中断定时,小键盘控制电子时钟的启停及初始值的预置。
电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,最大记时59:59:59超过这个时间时分秒位都清零从00:00:00重新开始。
1. 电子时钟具有二十四小时循环记时功能,走时要准。
2. 显示格式,时:分:秒。
3. 利用8253作为定时器。
二、设计目的通过本次课程设计学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使设计者的设计水平和对所学知识的应用能力以及分析问题解决问题的能力得到全面提高。
1. 熟练掌握8086/88教学系统的基本操作和调试程序的各种指令。
2. 掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法。
3. 掌握8255的各种工作方式及其应用编程。
4. 掌握8253定时/计数器的工作原理、工作方式及其应用编程。
5. 熟悉编程及调试程序的方法。
6. 练习LED-KEYBOARD UNIT的使用方法和数码管的显示编程方法。
三、设计的具体实现1、系统概述基本工作原理:系统设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块三大部分组成。
微机原理数字钟课程设计报告

课程名称微机原理与接口技术任课教师设计题目数字钟设计班级姓名学号日期2010年12月5日目录计时时钟的设计 (3)1 设计需求分析与解决方案 (3)1.1 设计需求分析 (3)1.1.1 题目要求 (3)1.1.2 根据要求提出的问题 (3)1.2 解决问题方法及思路 (3)1.2.1 硬件设计选择部分 (3)1.2.2 软件设计分析 (5)2 硬件设计 (5)2.1 选择芯片8255 (5)2.1.1 芯片8255 A在本设计中的功能作用 (5)2.1.2 芯片8255的功能分析 (5)2.1.3 8255部分技术参数 (6)2.1.4 8255与外设相连的逻辑图(见图2-3) (7)2.2 选择器件LED (7)2.2.1 LED在本设计中的作用 (7)2.2.2 LED功能分析 (7)2.2.3 LED技术参数 (8)2.3 硬件设计思路及连接图 (9)2.3.1 硬件设计思路 (9)2.3.2 硬件接线原理图(见图2-7) (9)3 软件设计思路及程序控制流程框图 (10)3.1 软件设计思路 (10)3.2 程序流程图的相关说明 (10)3.3 程序控制流程框图(见图3-1) (10)3.4 程序清单 (12)4 上机调试过程 (17)4.1 硬件调试 (17)4.2 软件调试 (17)4.3 联机调试 (17)4.4 调试结果及问题的提出 (18)4.4.1 调试结果 (18)4.4.2 提出问题 (18)5 设计结果分析、问题讨论及总结体会 (18)5.1 课程设计结果及分析 (18)5.2 问题讨论 (18)5.3 总结体会 (19)6 参考文献 (20)计时时钟的设计1 设计需求分析与解决方案1.1 设计需求分析1.1.1 题目要求设计一个接口与七段LED显示器,显示一个计时时钟,显示初值为0,每隔一秒改变一次显示值,60s为一分钟,60min为一小时,LED显示器循环显示时、分、秒的动态值。
微机原理课程设计报告(电子时钟)

微机原理课程设计报告(电子时钟)微机原理课程设计报告1.设计目的培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。
通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。
掌握8255、8259、8253等芯片的使用方法和编程方法。
通过本课程设计,学习应用所学知识,进一步了解相关芯片的原理、内部结构和使用方法,学习相关芯片的实际应用和编程。
系统采用8086微处理器完成电子秒表系统的独立设计。
同时,要了解综合性问题的程序设计,掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后的逻辑更加清晰。
2.设计内容设计一款可以随意启动/停止的电子秒表。
要求使用6位LED数字显示屏,计时单位为1/100秒。
使用功能键进行启动/停止控制。
其功能是通电后将计时器清除为0,并在第一次(或奇数次)按下启动/停止键时开始计数。
第二次(或偶数次)按此键可停止计时。
再次按开始/停止键可重置和重新开始计时。
它可以通过开关或钥匙控制。
(开关控制☆) (按键控制)★)3.设计要求一、基本要求1)设计可以显示1~60秒的无存储功能的秒表,最小单位为毫秒。
2)通过键盘键控制秒表的重置、暂停、继续和退出。
数字0控件被清除,数字1控件继续并退出二.提高要求:1)秒表可分组存储、批量显示、倒计时等2)采用图像显示、界面美观、设置报警声等4.设计原理与硬件电路一、总体设计思路使用8253工作在方式0计数,对1/100s计数,并讲计数值写入bl中并与100比较若不相等,则将计数值装换为10进制后送8255控制端显示,如相等则1s计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则1min计数程序加1之后并与59相比,如果不相等,则将计数值更改为十六进制,并发送至8255控制终端进行显示。
如果相等,计数程序将在加1后溢出,跳转到清零程序以清除计数,同时清除数码管。
微机课程设计报告-数字时钟系统与自动报时系统设计

班级:13030学号:1303姓名:####地点:B-312批次:第一批时间:2016年3月微机系统课程设计——数字时钟系统与自动报时系统设计时间:2016年3月1. 课设题目及成员分工1.1课设题目:数字时钟与自动报时系统1.2小组成员介绍及分工2. 课设内容及要求2.1 课程设计目的:1、了解以微机为核心的总线方式访问总线设备的原理,提高接口扩展硬件电路的连接能力;2、你阿姐数字时钟和语音报时的工作原理,提高应用系统的设计和调试的综合能力;3、加深对定时器/计数器、并行接口芯片和语音芯片的硬件电路和软件编程的工作方式和编程方法的理解。
2.2 课程设计内容:1、设计数字时钟,能够动态时间显示,整点语音报时;2、利用定时器产生精确的时钟源,通过中断或者查询的方式将时钟源数值传送到微机控制台;3、微机控制台在进行数据的处理后,控制并行接口芯片进行DLED 的动态扫描,正确的显示时钟;4、当系统运行后,数码管显示时分秒,每到整点,喇叭播放报时音。
2.3 系统功能和设计要求1、基本功能要求:a.系统显示界面:1. 在DLED 数码管上进行实时刷新显示;2.使用8255 扫描数码管,显示时分秒,小时和分钟分别为两位显示,秒使用LED3的DP 显示,0.5s 亮,0.5s 灭。
b.自动报时要求:1. 通过编程实现语音录制,播放,可以随时修改报时音内容;2. 报时音以12 时制录制,12 个报时音以连续地址存放在ISD1420 芯片内,录音顺序如表2.1 所示:表2.1 录音顺序表2、发挥部分:1.增加“语音提醒”功能,自行设计提醒时间和播放的录音内容。
打开“语音提醒”功能后,数字钟运行到设定的时刻,喇叭发声提醒事先录制的语音;2. 增加“秒表计时”功能,启动该功能后可在DLED 上进行00.00~99.99 秒计时;3. 增加“时区转换”功能,根据设定的时区表随时转换相应时区的时刻。
3. 课设实现方案3.1 总体设计思路1、数字时钟部分:1.利用CLOCK 分频器提供的信号作为可编程定时器8254 的时钟源,通过8254 进行16分频,产生0.5 秒的精确时钟;2.监控时钟通过查询获取时钟,根据时钟计算出时分秒,然后驱动4 位数码管实时显示出时间;3.基本I/O 驱动器74LS244 作为可编程定时器8254 的时钟监控端口。
微机原理实验报告电子钟

微机原理与接口技术课程设计实验报告——电子时钟(附8251串口通讯部分实验报告)通过设置8251的数据位和方式字,通过示波器测量输出波形。
在实验中,8251选择异步通讯方式,修改自发自收程序,通过测量TXD引脚观察波形。
观察波形&分析:1.数据位:6AH,方式字:7EH(1个停止位,偶校验)可知:输出为00101011001,数据为可以推断出是加粗部分,则前一位为起始位,后两位01分别为偶校验位和停止位。
实验结果与结果相符。
2.数据位:0C4H,方式字:7EH(1个停止位,偶校验)可知:输出为00010001111,数据为可以推断出是加粗部分,则前一位为起始位,后两位11分别为偶校验位和停止位。
实验结果与结果相符。
一、课程设计目的和意义通过本次课程设计掌握多种芯片使用的方法,灵活地综合运用课本知识,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解。
了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程。
二、开发环境及设备PC机一台、实验箱、导线若干8254定时器:用于产生秒脉冲,其输出信号可作为中断请示信号8255并口:用做接口芯片,和数码管相连8259中断控制器:用于产生中断LED:六个LED用于显示时:分:秒值三、设计思想与原理1、设计思想本系统设计的电子时钟用8254做定时计数器产生时钟频率,8255做可编程并行接口显示时钟,8259做中断控制器产生中断。
在此系统中,8254的功能是定时,接入8254的CLK信号为周期性时钟信号。
8254采用计数器0,先读写低字节后读写高字节,方式2,二进制计数,以18.432kHz为输入时钟,4800H分频后为1Hz,即1s产生上升沿,此信号接8259的中断请求信号输入端,CPU即处理中断,使液晶显示器上的时间发生变化。
2.设计原理利用实验台上提供的定时器8254和扩展板上提供的8259和数码显示电路,设计一个电子时钟,由8254中断定时,电子时钟的显示格式由左到右分别为时、分、秒。
微机原理实时时钟课程设计报告书

西南科技大学微机原理课程设计题目电子实时时钟软件设计1任务实现如图所示电子日历时钟功能。
2基本要求1)可通过M键切换显示模式:日期(年、月、日)、时间(小时、分、秒)、秒表(小时、分、秒、1/100秒)、闹钟(小时、分)。
2)在秒表显示模式.可通过I键切换(启动/暂停)计时.当暂停计时时可通过A键复位。
3)在闹钟显示模式.有两种输入方式方式一:直接按格式输入时间方式二:可通过A键依次使On/Off标志、小时、分、秒闪烁或变色.这时可通过I 键切换On/Off标志或加1调整。
4)可通过esc键结束程序。
3扩展要求1)在日期显示模式.可通过A键依次使年、月、日闪烁或变色.这时可通过I键加1调整。
2)在时间显示模式.可通过A键依次使小时、分、秒闪烁或变色.这时可通过I键加1调整。
3)调整和秒表操作不影响日期和时间的准确性。
4)自定义的其它扩展功能说明:本程序为西科微机原理课程设计题目.下面的代码只实现了基本要求部分.并且秒表还存在部分问题(秒表模式修改了定时器0.结束后对时间略有影响.测试闹钟时可以直接在秒表模式下.按q键跳过秒表模式).代码仅供参考.欢迎对其繁琐处进行修改.调试。
各部分程序流程图:主函数流程图时间与日期的刷新子过程时间日期显示子过程闹钟设定子过程该过程与代码略有不同.处理on/off 位是后来添加的代码.流程图没有加入AI键输入时间方式:时间调整输入DATA SEGMENTUIS DB 0DH,0AH,10 dup(0),50 DUP('*'),'$'UIE DB 0DH,0AH,10 dup(0),50 DUP('*'),'$';界面字符MSG1 DB "THE DATA IS $"MSG2 DB "THE TIME IS $"MSGIN DB "PLEASE CHOOSE INPUT METHODS:",0DH,0AHDB 21 DUP(" "),"PRESS A FOR A/I METHOD,OR FOR DIRECT METHOD$" MSGDIR DB "PLEASE INPUT LIKE THIS: OO:00",0DH,0AHDB 21 DUP(" "),"PRESS ENTER TO CONFIRM $" MSGWARN DB "ERROR!PLEASE ENTER AGAIN$"MSGAI DB "PRESS a TO CHANGE POSITION ",0DH,0AHDB 21 DUP(" "),"i TO CHANGE VALUE,ENTER TO CONFIRM $" MSGSEC DB "PRESS i TO START AND STOP ",0DH,0AHDB 21 DUP(" "),"q TO QUIT,a TO CLEAR IF IT HAS STOPED $" NULINE DB 25 DUP(?),'$' ;清空行KSBUF DB 6,0,6 DUP(?)KEYNUM DB ?MODE DB ?DAY DB ?MON DB ?YEAR DW ?SEC DB ?MSEC DB ?MIN DB ?HOUR DB ?BEEPHOUR DB 0 ,0BEEPMIN DB 0,0SWIOFF DB "FF$"SWION DB "N $"SETSTR DB "00:00 OFF/ON",'$'WSTR DB "00:00:00 ",'$'BFLAG DB 0SFLAG DB 0INISEG DW 0INIOFF DW 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXCALL CLEARCALL CREATUIMOV MODE,0CALL SOUNDAGAIN: CALL REFRESH ;刷新时间日期;******BFALG 为闹钟与秒表标志位。
数电实验数字钟报告(含程序代码)

多功能数字钟设计一、实验目的1. 掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2. 熟悉一种EDA软件使用;3. 掌握Verilog设计方法;4. 掌握分模块分层次的设计方法;5. 用Verilog完成一个多功能数字钟设计。
二、实验任务1. 已知条件MAX+Plus II软件FPGA实验开发装置(该装置可以提供3路时钟信号和译码显示电路)基本功能具有“秒”、“分”、“时”计时功能,小时按24小时制计时。
具有校时功能,能对“分”和“小时”进行调整2. 扩展功能仿广播电台正点报时。
在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。
定时控制,其时间自定;3. 选做内容任意时刻闹钟自动报整点时数小时计数器改为12翻1三、数字钟设计分析-功能框图四、设计编译1.设计输入module top_clock (Second,ap,CP,nCR,EN,Adj_Min,Adj_Hour,ctrlbell,sethrkey,setminkey, alarm,_1khz,_500hz,rhr,rmin);input CP,nCR,EN,Adj_Min,Adj_Hour,ctrlbell,_1khz,_500hz,sethrkey,setminkey;output[7:0] rhr,rmin,Second;output alarm;wire[7:0] set_hr,set_min,Hour,Minute;wire alarm_clock,alarm_r,alarm_r1;wire _1khz,_500hz,CP;output ap;reg[7:0] rhr,rmin,Second;supply1 Vdd;wire MinL_EN,MinH_EN,Hour_EN,Ap;wire hrh_equ,hrl_equ,minh_equ,minl_equ;wire time_equ;//Hour:Minute:Second countercounter10 U1(Second[3:0],nCR,EN,CP);counter6 U2(Second[7:4],nCR,(Second[3:0]==4'h9),CP);assign MinL_EN=Adj_Min?Vdd:(Second==8'h59);assignMinH_EN=(Adj_Min&&(Minute[3:0]==4'h9))||(Minute[3:0]==4'h9)&&(Second==8'h59);counter10 U3(Minute[3:0],nCR,MinL_EN,CP);counter6 U4(Minute[7:4],nCR,MinH_EN,CP);assign Hour_EN=Adj_Hour?Vdd:((Minute==8'h59)&&(Second==8'h59));counter24 U5(Hour[7:4],Hour[3:0],nCR,Hour_EN,CP,Ap);//若闹钟调整使能端开启,数码管显示闹铃设置时间,反之显示时钟时间。
微机原理课程设计报告_数字时钟的实现(附代码)

合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术x班学号:姓名:一、设计题目及要求:【课题6】数字时钟1.通过8253 定时器作产生秒脉冲定时中断。
在中断服务程序中实现秒、分、小时的进位(24小时制)。
2.在七段数码管上显示当前的时分秒(例如,12 点10 分40 秒显示为121040)。
3.按“C”可设置时钟的时间当前值(对准时间)。
二、设计思想:总体思想:1、功能概述:实验箱连线:本实验建立在Dais实验箱基础上完成的基本连线及程序如下:138译码器:A,B,C,D,分别连接A2,A3,A4,GS;y0连接8253的CS片选信号;y1连接8259的CS片选信号;8253连线:分频信号T2接8253的CLK0;8253的OUT0接8259的IR7;8253的gate信号接+5V;8259连线:8259的数据线接入数据总线;本程序包括显示模块,键盘扫描模块,时间计数模块,设置模块等几个模块,(1)程序运行后,LED显示000000初始值,并且开始计数(2)按C键进行设置初始时间,考虑到第一个数只能是0,1,2,当第一个数显示2时第二个数只能显示0~4,同理下面各位应满足时钟数值的合理的取值;(3)在手动输入初始值时,按D键进行回退1位修改已设置值,连续按D键可以全部进行删除修改。
2、主程序设计主程序中完成通过调用子程序完成对8253及8259的初始化,对8259进行中断设置。
主要在显示子程序和键盘子处理程序之间不断循环,8253每一秒给8259一个刺激,当8259接受到刺激后会给CPU一个中断请求,CPU会转去执行中断子程序,而中断子程序设置成时间计数加,即完成电子表的整体设计。
详细流程图见图三-1。
3、LED显示子程序设计本程序显示部分用了6个共阳极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应的数字。
微机原理课程设计电子时钟的设计

《微机原理》课程设计——电子时钟的设计(2005-6-24) 山东科技大学机电学院js02-2 20号一.课程设计题目:电子钟1.设计目的:了解定时/计数器和中断的使用。
2.设计所需设备:PC机。
3.设计任务:编写程序,在PC机上显示时间。
二.程序内容:第一部分:定义显示界面。
第二部分:调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区。
第三部分:将存在系统内存区的时间数用显示字符串的形式显示出来。
第四部分:获取键盘的按键值,判断键值并退出系统。
三.程序设计原理:首先在数据段开辟一显示缓冲区,用来存储系统时间。
调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。
分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。
调用DOS字符串显示功能将时间显示出来。
并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。
由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。
时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再跳回到初始位置,再显示,由此循环下去。
程序的最后还设计一了个按“ESC”键就退出的功能,采取了判断键值的方法。
为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。
本程序具有很强的扩展功能,我们可以在此基础上进行一些输入、输出扩展,显示的扩展,比如可以做成计时器,并设计一个精美的运动的图形界面,时间到了会自动调用PC喇叭发出报警声等等。
但是由于时间的原因,所以只做了核心的部分,这不得不说是一个遗憾。
本程序使用了未来汇编,与VISUAL ASM开发平台。
四.程序设计心得:本程序虽然只花了一天的时间,但是也收获颇多。
简易数字钟(附详细代码)

简易数字钟 一、实验内容本实验的主要内容是根据提供的元器件,设计一个简易数字钟。
1、要求准确显示“时”、“分”、“秒”,24 小时制; 2、具有校时功能,用户可以修改“时”、“分”,且互不影响; 3、时间显示可以实现12/24小时制切换;设计应包括方案选择、硬件系统设计、软件系统设计等。
硬件设计包括单片机最小系统设计、单元电路设计;软件设计包括模块化层次结构图、程序流程图 等。
通过调试与仿真,进一步完善设计,使之达到实验要求,使其更接近于实际 产品。
最后要求撰写设计实验报告,把设计内容,调试过程及性能指标的测试进 行全面总结,把实践内容上升到理论高度。
1 数字钟硬件部分示意图该简易数字钟硬件部分主要由晶振、手动复位、单片机AT89C51、数码管显示、时间调整按键模块组成。
框图如下:图3.1 数字钟硬件系统示意图2 数字钟软件部分组成框图晶振 手动复位AT89C51 1602液晶显示时间按键选择2.1程序总流程图 2.2 时钟显示程序流程图3.3 24小时时钟3 各部分模块介绍3.1 单片机AT89C51芯片分析AT89C51单片机引脚图如下:T1中断服务子程序重置T1定时初值 1秒到?秒位+1 1分到?分位+1、秒位清零 1小时到? 小时位+1、分位清零 24小时到? 小时位清零 返回NNNN图 4.1 AT89C51引脚图3.2 晶振电路模块在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
图4.2 晶振电路3.3 复位电路模块单片机复位的条件是:必须使RST/VPD或RST引脚加上两个机器周期(即24个振荡周期)的高电平。
例如,若时钟频率为12MHz,每个机器周期为1us,则只需要2us以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术x班学号:姓名:一、设计题目及要求:【课题6】数字时钟1.通过8253 定时器作产生秒脉冲定时中断。
在中断服务程序中实现秒、分、小时的进位(24小时制)。
2.在七段数码管上显示当前的时分秒(例如,12 点10 分40 秒显示为121040)。
3.按“C”可设置时钟的时间当前值(对准时间)。
二、设计思想:总体思想:1、功能概述:实验箱连线:本实验建立在Dais实验箱基础上完成的基本连线及程序如下:138译码器:A,B,C,D,分别连接A2,A3,A4,GS;y0连接8253的CS片选信号;y1连接8259的CS片选信号;8253连线:分频信号T2接8253的CLK0;8253的OUT0接8259的IR7;8253的gate信号接+5V;8259连线:8259的数据线接入数据总线;本程序包括显示模块,键盘扫描模块,时间计数模块,设置模块等几个模块,(1)程序运行后,LED显示000000初始值,并且开始计数(2)按C键进行设置初始时间,考虑到第一个数只能是0,1,2,当第一个数显示2时第二个数只能显示0~4,同理下面各位应满足时钟数值的合理的取值;(3)在手动输入初始值时,按D键进行回退1位修改已设置值,连续按D键可以全部进行删除修改。
2、主程序设计主程序中完成通过调用子程序完成对8253及8259的初始化,对8259进行中断设置。
主要在显示子程序和键盘子处理程序之间不断循环,8253每一秒给8259一个刺激,当8259接受到刺激后会给CPU一个中断请求,CPU会转去执行中断子程序,而中断子程序设置成时间计数加,即完成电子表的整体设计。
详细流程图见图三-1。
3、LED显示子程序设计本程序显示部分用了6个共阳极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应的数字。
虽然CPU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。
4、键盘扫描子程序设计本程序需要用键盘对时间的初始值进行设置,因此对键盘扫描的子程序需要满足的功能如下:判断是否是C键,若不是就返回至主程序,若是C键就开始对时间初始值进行设置,同时因注意到第一个值不可以超过2,第一个数是2时第二数不能超过4,余下的同理要满足时间数值的取值范围呢,若不是合法输入不予反应继续等待输入。
当遇到输入数值错误时可以按下D键进行删除一位重新设置;当6位初始值全部设置成功后,电子表将自动开始走表。
5、时间运算子程序设计该子程序的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。
该模块可以细分为秒定时模块和运算模块。
定时模块交由8253通过对分频出来的频率进行放大至1秒,因此每隔1秒对8259进行刺激,进而使CPU处理中断子程序及时间运算的子程序。
另外,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1 、秒清零;当分加到60时,时加1、分清零。
当时加到24时,直接清零。
6、中断设置8259芯片:在该系统中,8259主要担负着处理8253的一秒时间的脉冲信号,通过8253的每秒的刺激下向CPU发送中断请求,进而CPU处理担负时间计算的中断子程序,即可完成每秒钟时间自加1秒的功能,因此8259的设置应为:ICW1:单片,边沿触发,写入ICW4ICW2:写入08HICW3:7、定时器设置8253芯片:在系统中定时/计数芯片8253主要与CPU及中断扩展芯片8259之间存在着连接关系。
8253主要担负着时间计时的功能,通过对分频单元提供的频率信号进行方法产生一秒时间为周期的脉冲信号,因此8253的设置应为:控制口写入:00110100b;计算器0选择先低后高两字节读或写方式2 二进制计数;计数器0写入:38400;时间系数通过计算可以产生1秒的脉冲信号;8、编址及控制字确定(1)8259端口及控制字设置:Port_8259_0 EQU 0FFE0HPort_8259_1 EQU 0FFE1H8259初始化设置:ICW1:00010011,边沿触发,单片方式,写入ICW4;ICW2:00001000,INIT8259:MOV AL,13HMOV DX,Port_8259_0OUT DX,ALMOV AL,08HMOV DX,Port_8259_1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET(2)8253端口及控制字设置:PORT_8253_00 EQU 0FFE4HPORT_8253_01 EQU 0FFE5HPORT_8253_10 EQU 0FFE6HPORT_8253_11 EQU 0FFE7H8253初始化设置:INITCLK0:MOV DX,PORT_8253_11MOV AL,00110100B ;OUT DX,ALMOV DX,PORT_8253_00 ;CLK0MOV AX,38400OUT DX,ALMOV AL,AHOUT DX,ALRET(2)LED端口:OUTSEG EQU 0FFDCH ;段控制口OUTBIT EQU 0FFDDH ;位控制口/键扫口(3)键盘端口:IN_KEY EQU 0FFDEH ;键盘读入口(4)LED数码管字型码:LEDMAP:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EHDB 0BFH(5)键码定义:KEYTABLE:DB 07H,04H,08H,05H,09H,06H,0AH,0BHDB 01H,00H,02H,0FH,03H,0EH,0CH,0DH三、功能流程图:1、主程序流程图2、LED显示子程序流程图3、按键处理子程序流程图4、中断子程序-时间计数子程序流程图四、结果讨论:1、实验结果:程序运行,数码管开始从000000走表,按C键后显示‘——————’开始对时钟进行初始值设置,设置初始值时可以按D键进行回退修改。
2、问题解决:(1)添加D键的回退删除功能:在C键功能实现区域里不断检测D键是否按下,若按下则将LED上一位数码管设置成‘—’并将设置时间的地址回退1,及可完成对D键的功能设置;(2)调试程序时发现时钟初始值可以设置,D键回退功能也是可以的,8253gate信号也正确连接着,但是初始值设置完后时钟并没有走表,于是将8253的输出端的线接入至手动的单脉冲的发生器,进行手动给8259刺激,结果时钟开始随手按动开始走表,可以断定该8253芯片可能已经损坏,换了个试验箱后遇到了同样的情况,直至换了功能正常的实验箱后实验现象才正确展现。
3、功能完善可以在课题要求的基础上添加一些功能,使得电子时钟的功能更加完善:(1)添加暂停功能,按键A时间暂停,再按A键时间继续走;(2)添加闹铃功能,按键B设置闹铃时间,时间到时控制鸣笛闹铃;(3)添加倒数计时的功能,按键E设置倒数的初始值,时间到即鸣笛闹铃;可以看出本次课程设计的课题可以完善的地方有很多,如果只满意于已完成的则大错特错了,课程设计虽然已经结束,但是课下仍然可以对自己的课题进行进步的探索,不断完善,不断追求完美,这也是我们需要的。
4、实验总结(1) 通过此次课程设计,将微机原理与接口技术课程所学的知识运用到了实际操作中,并学会了数码管显示电子时钟的制作方法;实验过程中遇到了一些困难和问题,通过同学之间的讨论和查找资料也一一攻破,顺利完成了课程设计,实验结果符合课题要求。
(2) 中断服务程序设计时还应注意以下几个问题:A.因为8086CPU在响应中断时不能自动地保护它的各寄存器(除标志寄存器外)内容,虽然可用寄存器在主程序和中断服务程序之间传送参量和结果,但这样做极易引起意想不到的错误,所以应当避免,而采用指定内存单元进行参数传递;B.使用堆栈实现保护现场与恢复现场。
使用时要注意堆栈的先进后出的特性,同时要确保堆栈有足够的空间,防止堆栈溢出;C.只有中断服务程序用到的那些寄存器(标志寄存器除外)的内容才需要加以保护;D.在从中断服务程序返回之前,即使CPU处于关中断状态也不必开中断。
在执行IERT指令后,CPU自动恢复中断前标志寄存器。
(3) 调试的时候因为遇到两个实验箱都是有问题的,本来以为是程序出现了问题,来回检查程序,直到最后又换了个实验箱才知道程序是正确的,实验箱是实验的基础,我们做实验时都应该细心爱护,弄坏了芯片,给自己和他人都带来了不便。
附录:实验代码:(完整的源程序)CODE SEGMENTASSUMECS:CODE,DS:CODE,ES:CODEORG 3400HStart: JMP programLedMap: 八段管显示码db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8hdb080h,090h,088h,083h,0c6h,0a1h,086h,08eh ;db 0bfhdb 0f7hKeyTable: ;键码定义db 07h,04h,08h,05h,09h,06h,0ah,0bhdb 01h,00h,02h,0fh,03h,0eh,0ch,0dhOUTSEG equ 0ffdch ;段控制口OUTBIT equ 0ffddh ;位控制口/键扫口IN_KEY equ 0ffdeh ;键盘读入口LedBuf db 6 dup(?) ;显示缓冲time DB 0,0,0,0,0,0;INTNum equ 20Port_8259_0 EQU 0FFE0H ;1110_0000 Port_8259_1 EQU 0FFE1HPort_8253_00 EQU 0FFE4H ; 0_01 Port_8253_01 EQU 0FFE5HPort_8253_10 EQU 0FFE6HPort_8253_11 EQU 0FFE7Hprogram:call initCLK0CLIMOV AX,OFFSET int8259MOV BX,003CHMOV [BX],AXMOV BX,003EHMOV AX,0000HMOV [BX],AXSTIcall init8259call update_ledbuffmainLoop:call displaycall handle_keyjmp mainLoop;================================ initCLK0:mov dx,Port_8253_11mov al,00110100bout dx,almov dx,Port_8253_00 ;clk0mov ax,38400out dx,almov al,ahout dx,alret;================================i nit8259:MOV AL,13HMOV DX,Port_8259_0OUT DX,ALMOV AL,08HMOV DX,Port_8259_1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;================================i nt8259:clipush axpush bxpush cxMOV AL,20H 0010MOV DX,Port_8259_0OUT DX,ALcall timeInccall update_ledbuffpop cxpop bxpop axstiiret;================================ =========timeInc:push bxpush cxmov bx,offset timeadd bx,5 ;取time[5]inc byte ptr [bx]cmp byte ptr [bx],10jb next5mov byte ptr [bx],0 ;该位清零dec bx ;下一位加1inc byte ptr [bx]inc bxnext5: dec bxcmp byte ptr [bx],6jb next4mov byte ptr [bx],0dec bxinc byte ptr [bx]inc bxnext4: dec bxcmp byte ptr [bx],10jb next3mov byte ptr [bx],0dec bxinc byte ptr [bx]inc bxnext3: dec bxcmp byte ptr [bx],6jb next2mov byte ptr [bx],0dec bxinc byte ptr [bx]inc bxnext2: dec bxdec bxcmp byte ptr [bx],2jnz cmp10cmp4: inc bxcmp byte ptr [bx],4jb next1mov byte ptr [bx],0dec bxmov byte ptr [bx],0jmp over_timeInccmp10: inc bxcmp byte ptr [bx],10jb next1mov byte ptr [bx],0dec bxinc byte ptr [bx]inc bxnext1: dec bxcmp byte ptr [bx],3jb over_timeIncmov byte ptr [bx],0over_timeInc:pop cxpop bxret;================================ display:push axpush bxpush cxpush dxmov bx,offset LEDBufmov cl,6 ;共6个八段管;从左边开始显示mov ah,00100000bDLoop:mov dx,OUTBITmov al,0out dx,al ;关所有八段管mov al,[bx]mov dx,OUTSEGout dx,almov dx,OUTBITmov al,ahout dx,al ;显示一位八段管push axmov ah,1call Delaypop axshr ah,1inc bxdec cljnz DLoopmov dx,OUTBITmov al,0out dx,al ;关所有八段管pop dxpop cxpop bxpop axret;================================ update_ledbuff:push axpush bxpush cxpush dxmov cl,6uloop: mov bx,offset timemov al,cldec almov ah,0xlat ;取出time[cl-1]mov bx,offset LEDMAPmov ah,0xlat ;查找对应字形码mov bx,offset LedBufmov ch,0add bx,cxdec bxmov [bx],al ;放入LedBuf[cl-1]dec cljnz ulooppop dxpop cxpop bxpop axret;================================ Delay: ;延时子程序push cxmov cx,256loop $pop cxretDelay1: 延时子程序push cxmov cx,50lxxx:call displayloop lxxxpop cxret;================================ handle_key:call read_keycmp al,0chjne nextRjmp nextC nextR:retnextC:climov bx, offset timemov cl,6loop_d:mov byte ptr [bx],16inc bxloop loop_dcall update_ledbuffmov bx, offset timet1:call Displaycall read_keycmp al,2ja t1t1_over:mov [bx],alcall update_ledbuffcall Delay1t2: call Displaycall read_keyCMP AL,0DHJNE T22mov byte ptr [bx],16call update_ledbuffcall Delay1JMP T1T22:cmp al,9ja t2cmp byte ptr [bx],2je cmp_k_4jmp t2_overcmp_k_4:cmp al,3ja t2jmp t2_over t2_over:inc bxmov [bx],alcall update_ledbuffcall Delay1t3:call Displaycall read_keyCMP AL,0DHJNE T33mov byte ptr [bx],16DEC BXcall update_ledbuffcall Delay1JMP T2T33:cmp al,5ja t3t3_over:inc bxmov byte ptr[bx],alcall update_ledbuffcall Delay1t4:call Displaycall read_keyCMP AL,0DHJNE T44mov byte ptr [bx],16DEC BXcall update_ledbuffcall Delay1JMP T3T44:cmp al,9ja t4t4_over:inc bxmov [bx],alcall update_ledbuffcall Delay1t5:call Displaycall read_key;++++++++++++CMP AL,0DHJNE T55mov byte ptr [bx],16DEC BXcall update_ledbuffcall Delay1JMP T4T55:cmp al,5ja t5t5_over:inc bxmov [bx],alcall update_ledbuffcall Delay1t6:call Displaycall read_keyCMP AL,0DHJNE T66mov byte ptr [bx],16DEC BXcall update_ledbuffcall Delay1JMP T5T66:cmp al,9ja t6t6_over:inc bxmov [bx],alcall update_ledbuffcall Delay1call Delay1key_over:stiret;================================ read_key:push bxpush cxpush dxmov al,0ffh ;关显示口mov dx,OUTSEGout dx,almov bl,0mov ah,0fehmov cx,8key1: mov al,ahmov dx,OUTBITout dx,alshl al,1mov ah,alnopnopnopnopnopnopmov dx,IN_KEYin al,dxnot alnopnopand al,0fhjnz key2inc blloop key1nkey: mov al,20hpop dxpop cxpop bxretkey2: test al,1je key3mov al,0jmp key6 key3: test al,2je key4mov al,8jmp key6 key4: test al,4je key5mov al,10hjmp key6 key5: test al,8je nkeymov al,18h key6: add al,blcmp al,10hjnc fkeymov bx,offset KeyTablexlatfkey:pop dxpop cxpop bxret;================================CODE ENDSEND Start。