《西安科技大学微机接口课设电子闹钟(共19页).doc》由会员分享,可在线阅读,更多相关《西安科技大学微机接口课设电子闹钟(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上西安科技大学微机原理与接口技术课程设计题 目: 闹钟设计 学 院: 计算机科学与技术学院 专业班级: 计科1004班 组 员: 郭雅心 韦清松 2013年 7月 8日专心-专注-专业目 录1 闹钟设计要求与设计方案1.1. 设计目的学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。1.2. 设计要求 设计一个钟表。在数码管上显示时间。 定时时
2、间到,屏幕显示“get up!”字符串。 显示同时,流水灯闪烁,蜂鸣器响1秒钟。1.3. 设计思路本设计以唐都仪实验箱为载体,结合中断控制器8259A、并行接口8255、中断定时器8253、七段数码显示管LED及八个发光二极管的功能,用汇编语言编程实现了闹钟设计的实验。闹钟的总体设计原理是:首先利用定时芯片8253的定时作用定时计数,每10ms开一次中断即8253计数18432次调用时间显示程序,数码管加1,毫秒部分加到99后清0向前进1 秒部分到显示59S过后变为0,执行此程序后8255就会工作,把时间在四个数码管上显示时间。当数码管显示时间与拨动KK1开关设置的定时时间相同时。在程序里面设
3、置了一个蜂鸣器标志变量和流水灯标志变量,当变量为0的时候,表明蜂鸣器没有响,当变量为1的时候,表明蜂鸣器正在发声。每次秒钟加一之前,检测蜂鸣器标志变量,当蜂鸣器变量为1时,就关闭蜂鸣器,并置蜂鸣器标志变量为0。当秒钟加一之后,若当前设定时间与实时时间相同,就开启蜂鸣器,并置蜂鸣器标志变量为1。流水灯相似,只是多了几个判断,分别显示四个流水灯亮。在第一个流水灯亮时,屏幕显示“get up!”,流水灯闪烁,蜂鸣器响。 闹钟具体做法:时间显示程序要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,精确的时间延迟程序,第一二块数码管显示分位,第三四块显示秒位。数码管显示一段时间60s后
4、再跳回到初始位置00s,再显示,由此循环下去。设置一个闹钟开关标志变量,用来调节闹钟有效性,当开关为1时,定时设置有效,为0则无效,定时时间为有效时的时间设置。2 闹钟设计的硬件设计2.1 硬连线图:GATE28253 CLK2OUT2IRQ78259 PB0PB78255 PA0PA1 PA2PA3PA4PA7PC4PC0PC1PC2 +5VX4X1X2X33个LED灯D0D2系统总线1.8432MHZ嗡鸣器SPK2*4键盘KK2图2-1硬线连接图2.2 四大模块:2.2.1 8253定时、计数器模块8253A芯片在本实验中用了计数器2,工作在方式0下,8253计数次数为 10ms*1.1.
5、8432MHz,中断每10ms有一次,这样就可以通过控制发中断的次数来得到想要的时间。8253的CLK0接系统时钟1.8432MHZ,门控信号GATE2接+5V。采用内部7号中断。2.2.2 8255并行接口模块8255的PA0PA3负责4位7段数码管的位选,以及2x4键盘扫描的列信号。PA4PA7负责4位流水灯的闪烁。PB0PB7负责4位7段数码管的段选。PC0PC1负责2x4键盘扫描的行信号。PC2负责接收开关信号。PC4负责蜂鸣器的发声。2.2.3 8259中断控制模块本次设计使用了8259中断控制器的IRQ7,通过IRQ7中断服务子程序设置DI来计数。每加到100即达到1秒,令秒加1,
6、计数器清0以便重新计数。秒加到60,进位让分加1.选中数码管最右管让其显示分的个位,然后进位判断,数码管选择依次左移,显示整个时间时和分。定时模块该模块实现的功能是通过键盘设定一个定时时间,并将当前定时时间显示在计算机终端上。当实时时钟每走一分的时候,就与设定的定时时间比较,当定时时间与实时时间相同时,则触发相应的闹钟程序:显示“Get Up!”字符串,流水灯闪烁,蜂鸣器响一分钟。因为,键盘既可以修改实时时间,也可以修改定时时间,所以,为了区分,我们使用了一个开关KK2,通过与C口一个引脚相连来选择修改模式。当开关断开的时候,键盘修改的是定时时间,当开关闭合的时候,键盘修改的是实时时间。2.2
7、.4 显示模块该显示模块包括三个部分:实时时间显示、定时时间显示以及流水灯闪烁。实时时间是在主程序里面,通过数码管显示的。而定时时间是在每次修改的时候,显示在计算机终端上。流水灯是通过定时模块触发显示的,当定时时间与实时时间相同时,置流水灯标志变量为1。在主程序里面循环检测标志变量,当变量为0的时候,流水灯不闪烁,当变量为1时,流水灯闪烁,闪烁完毕之后,置标志变量为0。3 闹钟设计的软件设计3.1. 主程序设计图3-1主程序流程图3.2. 按键处理程序设计图3-2按键处理程序流程图3.3. IRQ7中断设计图3-3 IRQ7中断流程图3.4. 七段数码管显示设计 图3-3七段数码管显示4 闹钟
8、设计的运行与调试本电子时钟可以24小时循环计时,数码管显示时和分,能够校时,可以设定闹钟。操作方法如下:开机运行后,装入程序并运行,数码管显示00:00并开始走时。按动2*4小键盘可以设定闹钟时间,设定好的闹钟时间显示在电脑终端。按下开关KK2并同时按动小键盘则是对时钟进行调时,8个小键盘分别对应时、分的十位以及个位的加和减。内存会将设定的时间存储并与时钟时间比较,当相等时,嗡鸣器响,流水灯亮、显示GET UP字符串。5 设计体会与小结为期两周的微机原理课设结束了,在这两周中,我通过查阅大量资料,亲自动手实验,对微机原理理论课有了实践的经验,巩固了微机原理的课程知识。并且锻炼了自己的动手能力。
9、在这两周的课程设计时间里,课程设计的基本目的达到了。我们的课程设计题目是电子闹钟,用IRQ7子程序中给出计数次数100D。每达到100就实现秒的加1,秒加到60则让分加1,依次进位并判断自加范围并且选中数码管显示。8255B负责将内存里的时位和分位值输出到数码管显示。KK2与8255C口PC2引脚相接,通过对定时标志位的置0置1来控制是修改实时时间还是设定闹钟时间。小键盘负责对时间加1和减1的操作。通过设定标志位变量来设定闹钟的响铃、流水灯的亮否。通过这次的课设,让我学会了很多。一次次的调试,一次次的修改让我变得更加坚强的同时,也使得我对微机接口以及汇编的很多知识得到了很好的掌握,同时软硬件的
10、结合使用动手能力也有很大的提高。期间遇到很多问题,如数码管显示乱码,时钟只是显示却不走时,流水灯不亮等问题。经过老师的指导和同学的帮助让我客服了一个又一个问题。通过交流,我的思维得到了很大的发散。很多问题是在交流后突然思考出来的。两周的实习虽然很累,但是收获也是非常明显。总之,这次课设让我受益匪浅。6 程序清单STACK SEGMENT STACK DW 64 DUP(?)STACK ENDSDATA SEGMENTTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数码管可显示0到9CLCTIMEDB 4 DUP(?)ALARMTIME DB 4
11、 DUP(?)MODEDB 00HMIAO DB 00HSPEAKER DB 01HMESSAGE DB Get Up!,0AH,0DH,00H;定义MESSAGE变量LEDFLAG DB 00HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX, DATAMOV DS, AXMOV ES, AX;IRQ7PUSH DSMOV AX,0000HMOV DS,AXLEA AX, IRQ7;取偏移地址ADD AX,2000HMOV SI,003CH MOV SI,AX;偏移量放入中断向量表低位MOV AX,0000H;段地址MOV SI,
12、003EH MOV SI,AX;段地址写入中断向量表高位IN AL,21H;读中断屏蔽寄存器AND AL,7FH;开7号中断OUT 21H,AL;写OCW1POP DSSTI;开中断MOV AL,0B0H;计数器2,方式0,二进制OUT 43H,AL;8253控制字送寄存器MOV AX,18432D;设置初始值OUT 42H,AL;低位写入2号计数器MOV AL,AHOUT 42H,AL;高位写入MOV DI,00HLEA SI,CLCTIME;取CLCTIME变量的偏移地址MOV AX,00HMOV SI,AXMOV SI+1,AXMOV SI+2,AXMOV SI+3,AXLEA SI,A
13、LARMTIME;取ALARMTIME变量的偏移地址MOV SI, AXMOV SI+1,AXMOV SI+2, AXMOV SI+3, AXMOV AL, 81H ;A O M0,B O M0,C0-C3 IOUT 63H, AL;8255控制字MOV AL,00HOUT 61H,AL;B口对应数码管全灭OUT 62H,AL;C口输出0MOV AL,0F0H OUT 60H,AL;A口对应流水灯状态全灭MAIN:STI;开中断TEST LEDFLAG,01H;判断流水灯标志位状态JZ PRO0;LEDFLAG为0跳到PRO0MOV AH,0EFH;不为0时AH置BSELECT0:IN AL,
14、60H;A口地址给ALOR AL,0F0H;AL高4位置1AND AL,AH OUT 60H,AL;选中PA4对应的流水灯MOV CX,00A0HSELECT1:CALL DISPLAY;调用显示CALL CLEAR;调用清屏LOOP SELECT1ROL AH,1;AH循环左移选中下一个流水灯TEST AH,01H;判断流水灯是否循环一遍JNZ SELECT0;未循环完跳到SELECT0MOV AL,0FFH;循环完则将AL置1OUT 60H,ALMOV LEDFLAG,00H;流水灯标志变量置0PRO0:CALL DISPLAY;调用显示程序CALL CLEAR;调用清屏CALL SZCJ
15、NZ PRO1;AL第1、2位都不为0JMP MAINPRO1: CALL DISPLAY;调用显示程序CALL DALLY;调用延时CALL CLEAR;清屏CALL SZCJNZ PRO2JMP MAINPRO2:MOV CH,0FEHMOV CL,00HJUDGE0: MOV AL,CH;AL置0FEHOUT 60H,AL;A口输出选中PA0端口对应的1号按钮IN AL,62H;C口地址给ALTEST AL,01H;判断C口地址PC0是否为0JNZ JUDGE1;不为0转至JUDGE1MOV AL,00HJMP KPROJUDGE1: TEST AL,02H;判断C口地址PC1是否为0J
16、NZ NEXTMOV AL,04HKPRO: ADD AL,CLCALL PUTBTN;调用键盘处理程序PUSH AXKDS:CALL DISPLAY;调用显示CALL CLEARCALL SZCJNZ KDSPOP AXNEXT: INC CLMOV AL,CH;AL置0FEHTEST AL,08HJZ MAINROL AL,1MOV CH,ALJMP JUDGE0;键值处理程序PUTBTN:PUSH AXPUSH BXPUSH CX PUSH AXIN AL,62H;C口地址给ALTEST AL,04H;判断是修改定时时间还是实时时间,PC2JNZ REBAC;PC2不为0MOV MODE
17、,01H;置修改模式标志变量为1LEA BX, ALARMTIME;为0则修改定时时间JMP BTNREBAC:MOV MODE,00HLEA BX, CLCTIMEBTN:POP AXTEST AL,04H;判断键值是加一还是减一,0-3为加1,4-7为减1JNZ SUB0;PC2不为0转至减MOV AH,00HMOV SI,AXMOV CL,BX+SITEST AL,01H;PA0JNZ EDGE0;PA0不为0转至EDGE0CMP CL,2;判断是否到最大值JZ GOBACKINC CLMOV BX+SI,CL;分的十位加1CALL DISSETTIME;调用显示设定时间程序JMP GO
18、BACKEDGE0:CMP CL,09H;判断是否到最大值JZ GOBACKINC CLMOV BX+SI,CL;分个位加1CALL DISSETTIMEJMP GOBACKSUB0:SUB AL,04HMOV AH,00HMOV SI,AXMOV CL,BX+SICMP CL,00H;判断是否为0JZ GOBACKDEC CLMOV BX+SI,CL;减1CALL DISSETTIMEGOBACK: POP CX;返回POP BXPOP AXRETDISSETTIME:;定时时间显示在电脑上PUSH AXMOV AL,MODE;判断修改模式CMP AL,01HJNZ DISBACKMOV A
19、H,01HLEA SI, ALARMTIME;取定时时间变量偏移地址MOV AL,SIADD AL,30HINT 10H;显示在终端MOV AL,SI+1ADD AL,30HINT 10HMOV AL,:INT 10HMOV AL,SI+2ADD AL,30HINT 10HMOV AL,SI+3ADD AL,30HINT 10HMOV AL,0AHINT 10HMOV AL,0DHINT 10HDISBACK:POP AXRETSZC:MOV AL,0F0H;AL高位置1OUT 60H,ALIN AL,62HNOT AL;AL按位取反AND AL,03H;C口第1、2位对应调时RETCLEAR
20、:MOV AL,00HOUT 61H,ALRET;实时时钟IRQ7:PUSH AXPUSH BXPUSH CXINC DICMP DI,6000;判断是否产生6000次中断JNZ RETURNMOV DI,00H;计数器清零CMP SPEAKER,01H;判断蜂鸣器是否正在发声JNZ INTR0MOV AL,08H;若正在发声,则关闭蜂鸣器OUT 63H,AL;INC MIAO;CMP MIAO,60;JNZ RETURN;MOV MIAO,0HINTR0:LEA BX,CLCTIME;取时钟变量偏移地址MOV SI,0003H;分钟的个位为数组最后一位,十位为倒数第二位 INTR1:MOV
21、AL,BX+SIINC AL;AL加一TEST SI,0001H;判断是否应该进位JNZ INTR2CMP AL,02H;时最高位不超过2JNZ INTR3MOV AL,00HMOV BX+SI,ALDEC SICMP SI,0FFFFHJNZ INTR1JMP INTR4INTR2:CMP AL,0AHJNZ INTR3MOV AL,00HMOV BX+SI,ALDEC SICMP SI,0FFFFHJNZ INTR1JMP INTR4INTR3:MOV BX+SI,ALINTR4:LEA BX, CLCTIME;比较实时时间与设定时间LEA BP, ALARMTIMEMOV SI,0000
22、HINTR5:MOV AL,SI+BXMOV CL,DS:SI+BPCMP AL,CLJNZ RETURNINC SICMP SI,0004HJNZ INTR5MOV AL,09H;若相同,则开启蜂鸣器OUT 63H,ALMOV SPEAKER,01HMOV LEDFLAG,01H;置流水灯标志变量为1MOV BX,OFFSET MESSAGE;输出get up字符串MOV AH,06HINT 10HRETURN:MOV AX,18432D;定时器重新计数OUT 42H,ALMOV AL,AHOUT 42H,ALMOV AL,20H;中断复位OUT 20H,ALPOP CXPOP BXPOP
23、AXIRETDISPLAY:PUSH AX;数码管显示时间PUSH DXPUSH BXLEA SI,CLCTIME;取时钟实时时间偏移地址MOV DL,0FEH;,选中数码管MOV AL,DLDISAGAIN:IN AL,60HOR AL,0FH;AL低4位置1AND AL,DL;选中PA0 OUT 60H,AL;BIT SELECTMOV AL,SI;DISPLAY SILEA BX,TABLEAND AX,00FFH;AH高位清0ADD BX,AXMOV AL,BX;查表转换OUT 61H,AL;B口输出秒显示CALL DALLYINC SIMOV AL,DLTEST AL,08H;判断AL第3位是否是0JZ OUT1;为0转到OUT1,说明数码管最后一个已亮ROL AL,1;否则左移1位MOV DL,ALJMP DISAGAINOUT1:POP BXPOP DXPOP AXRETDALLY: ;延时程序PUSH CXPUSH AX MOV CX,0010HT1: MOV AX,0010HT2: DEC AX JNZ T2 LOOP T1 POP AX POP CX RET CODE ENDSEND START7 参考文献 龚尚福、朱宇. 微机原理与接口技术.西安电子科技大学出版社.2008 龚尚福、朱宇. 微机原理与接口技术实验指导书.西安电子科技大学出版社.2008
限制150内