合肥工业大学微机原理课程设计数字闹钟
数电课设-数字式闹钟

数电课设-数字式闹钟课程设计任务书数字式闹钟第一部分设计任务1.1设计任务(1) 时钟功能:具有24小时或12小时的计时方式,显示时、分、秒。
(2) 具有快速校准时、分、秒的功能。
(3) 能设定起闹时刻,响闹时间为1分钟,超过1分钟自动停;具有人工止闹功能;止闹后不再重新操作,将不再发生起闹。
1.2设计指标(1).有“时”、“分”十进制显示,“秒”使用分个位数码管上的DP点显示。
时十位显示时个位显示分十位显示分个位显示秒闪烁显示(2). 计时以24小时为周期。
(23:59→00:00)(3).具有较时电路,可进行分、时较对。
(4).走时过程能按预设的定时时间(精确到小时)启动闹钟产生闹铃,闹铃响时约3s。
第二部分设计方案2.1总体设计方案说明系统组成:显示电路:译码器数码管秒信号发生器:由LM555构成多谐振荡器走时电路:计数器和与非门组成校时电路:秒信号调节闹钟电路:跳线的方法由计数器、译码器、组合逻辑电路、单稳态电路组成2.2模块结构与方框图1.秒钟与分钟显示电路用两片74290组成60进制计数器,输入计数脉冲CP加在CLKA’端,把QA与CPLB’从外部连接起来,电路将对CP按照8421BCD码进行异步加法计数,个位接成十进制形式,十位接成六进制形式,当R0(1)=RO(2)=1且R9(1)*R9(2)=0时74290的输出被直接置0,当R0(1)*RO(2)=0和R9(1)*R9(2)=0时开始计数。
电路图如下:连接成总电路时,分钟的输入信号由秒钟计数器提供。
时设置的个位为十进制,十位为三进制,当十位为2时,通过反馈控制端,个位不能大于等于4,即小时十位为2时,个位加到4时十位和个位马上全部置0,从而让小时的设置只能最大设为23。
当十位不是2时,个位则加到9时再加一位则置0,如图示:闹钟部分时,将小时显示计数器、分钟显示计数器的8个输出端,闹钟时设置、闹钟分设置的8个输出端引出,用4个4077门进行比较,然后将4个4077门的8个输出端用2个7421进行与运算,将2个7421的输入输出端用3个与门进行与运算后输出到闹钟发声器。
合工大EDA课程设计

正文本数字系统实现数字钟的基本的计时功能,输入1kHz的时钟,采用24小时制计时,能显示时、分、秒。
还有整点报时以及闹钟功能。
本数字钟的实现可分为以下几个模块:(1)秒计数模块:秒计数,在频率为1Hz的时钟下以60次为循环计数,并产生进位信号影响分计数;(2)分计数模块:分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数;(3)时计数模块:时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数;(4)整点报时模块:当秒计数,分计数同时全为0时产生一个高电平使蜂鸣器产生震动;(5)闹钟分计数模块和闹钟时计数模块:用来调整闹钟时间,使蜂鸣器在设置时间震动;(6)闹钟计时器转换开关:可以切换当前显示闹钟时间或者计时器时间;(7)闹铃装置:当计时器时间与闹钟设置时间相同时输出一个高电平使蜂鸣器产生震动;(8)时间显示模块:通过选择不同的数码管,同时通过一定频率的扫描显示秒,分,时;计时器模块如图;秒计时,分计时如图:时计时:module hc24(qh,ql,clk,reset);output[3:0]qh;output[3:0]ql;reg[3:0]qh;reg[3:0]ql;input clk,reset;always@(posedge clk or negedge reset)beginif(~reset){qh,ql}<=0;else beginif({qh,ql}==8'h23){qh,ql}<=0;else beginif(ql==9)begin ql<=0;qh<=qh+1;endelseql<=ql+1;endendendendmodule秒计时与分计时的内部结构如下:整点报时模块闹钟计时器转换模块:通过调节JA可以使数码管显示闹钟,当JA为高电平显示闹钟状态,当JA为低电平显示计时器状态闹铃装置:时间显示模块:。
微机原理课程设计报告(电子时钟)

1.设计目的培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。
通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。
掌握8255、8259、8253等芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8086微处理器完成了电子秒表系统的独立设计。
同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
2.设计内容设计一个可任意启动/停止的电子秒表,要求用6位LED数码显示,计时单位为1/100秒。
利用功能键进行启/停控制。
其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。
第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时。
可用开关控制,也可用按键控制。
(开关控制☆)(按键控制★)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比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则计数程序加1之后产生溢出,跳转清零程序将计数清零,同时数码管清零。
二.使用各芯片的作用及工作原理1、定时器/计数器8253用系统8253定时器提供的55ms定时单位,设计秒表定时程序。
微机原理与接口技术课程设计报告电子钟

微机原理与接口技术课程设计报告——电子钟实验学院:计算机学院指导教师:***一实验任务及要求任务:1、掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;2、掌握实时处理程序的编制和调试方法。
要求设计一个定时显示装置,用实验仪左侧的六个LED数码管显示时间,时间显示格式为24小时制。
分秒值为59分55秒时开始报时,每秒钟蜂鸣器鸣叫一声,到整点报时停止。
用小键盘控制时钟的启停和时钟的设置,键的定义参见上图键值具体定义如下:G键(启停键)——程序启动后,按下该键时钟启动;再次按下该键,暂停计时,显示当前时间。
S键(设置键)——按下S键后,为时钟设置时、分、秒初始值。
二硬件连线键盘的控制、LED显示模块:采用74系列模块控制键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、Q1、Q2、Q3相连,键盘的列信号P_0、P_1、P_2和开放的输出信号P0、P1、P2相连。
74芯片的片选信号CS1接地址译码信号340H, CS2接地址译码信号360H。
时间的精确定时:用8254定时器0产生25ms的中断信号;8254的片选CS连地址输出端320H,A0,A1分别连地址总线A2,A3,GATE0连+5V,CLK0连74LS393分频输出的47K输出端,OUT0连接到8259的IRQ0整点报时控制:由8255模块控制;PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4中断处理模块:由8259控制8259的片选CS-1连地址输出300H,INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V, 8259的IRQ0连接到8254的OUT0。
三、程序流程图主程序初始化各阶段寄存器及相关变量初始化8254、8259、8255芯片设置中断向量、开放8259中断屏蔽开放处理器中断中断服务程序保护现场判断时间是否不小于59分55秒报时扫描键盘G 键?调用启停子程序S COUNT COUNT=40? ADDONE 子程序COUNT 清0显示时间,调用显示时间子程序结束中断(发EOI 命令)恢复现场中断返回四、实验源代码.486pDATA SEGMENT AT 0 USE16ORG 1000HHOUR DW ?Y YN YMIN DW ?SEC DW ?SLL DB ?COUNT DB ?DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 1500HBEG:JMP STARTTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H ;0~F 的共阴极七段译码表00H表示不显示任何东西KEYCOD DB 0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H ;行列编码值KEYV AL DB 0,1,2,3,4,5,6,7,8,9,0AH,0BH ;所有键的键面值PORT1 EQU 340H ;数码管段选端口PORT2 EQU 360H ;数码管位选端口,键盘矩阵的行列端口START: MOV EAX,60000000HMOV CR0,EAXMOV AX,DATAMOV DS,AXMOV HOUR,0203H ;小时分钟以及秒的初始化MOV MIN,0509HMOV SEC,0502HLEA BX,TABMOV SLL,0 ;开始暂停标志位置0MOV COUNT ,0 ;中断次数计数初始值为0;8255初始化,用于产生报时的脉冲MOV EAX,80808080H;控制字MOV DX,20CH ;后面的是4个8255的控制端口20C-20F (这个地址由实验台决定)OUT DX,EAX ;初始化8255,A、B、C口均为方式0输出MOV DX,20BHMOV AL,0FFHOUT DX,AL;8254初始化,用于产生周期为25ms的中断MOV AL,00110110B ;计数器0,先低后高,方式三,二进制MOV DX,32cH ;写往控制口OUT DX,ALMOV DX,320H ;计数器0写初值:47KHz*25msMOV AX,1175OUT DX,ALMOV AL,AHOUT DX,AL;8259初始化CLI :关中断MOV DX,300H ;ICW1MOV AL,00010011BOUT DX,ALMOV DX,308H ;ICW2MOV AL,08H ;IR0中断类型号为08HOUT DX,ALMOV AL,00000001B ;ICW4OUT DX,ALMOV AL,0FEH ;IR0开屏蔽OUT DX,ALXOR AX,AX ;装载中断向量MOV ES,AXMOV DI,08H*4MOV AX,OFFSET INTSRMOV ES:[DI],AXMOV AX,SEG INTSRMOV ES:[DI+2],AXSTI ;开中断JMP $INTSR PROC ;中断服务程序CMP MIN,0509H ;比较当前时间是否在59分55秒~00分00秒之间JL NEXT1CMP SEC,0505HJL NEXT1MOV DX,20BHMOV AL,00H ;蜂鸣器低有效,报时OUT DX,ALJMP NEXT2NEXT1: CMP MIN,0JNE NEXT3CMP SEC,0JNE NEXT3MOV DX,20BHMOV AL,00H ;蜂鸣器低有效,报时OUT DX,ALJMP NEXT2NEXT3: MOV DX,20BHMOV AL,0FFHOUT DX,ALNEXT2: CMP COUNT,20 ;用8255产生0.5ms的蜂鸣JLE NEXT4MOV DX,20BHMOV AL,0FFHOUT DX,ALNEXT4:CMP SLL,0JZ LOBCALL TSTARTLOB: CALL KEYCHECK ;检测有无键按下CMP AL,0AH ;启停键按下,调用启停程序JNZ NEXT5CALL TSTARTJMP NEXT6NEXT5: CMP AL,0BH ;设置键按下,调用设置时间程序JNZ NEXT6CALL SETTIMENEXT6: INC COUNT ;当COUNT直为40时,加一秒,之后置0 CMP COUNT,40 ;25ms*40=1sJB NEXT7CALL ADDONEMOV COUNT,0NEXT7: CALL SHOW ;显示时间MOV AL,20H ;发EOI命令,结束中断MOV DX,300HOUT DX,ALIRETINTSR ENDPTSTART PROC ;控制时间暂停和开始。
课程设计数字电子闹钟精编版

数字闹钟的设计数字闹钟的设计与制作一、设计任务与要求设计并制作一个带有可定时起闹的数字钟1.有“时”、“分”十进制显示,“秒”使用发光二极管闪烁表示2.以24小时为一个计时周期3.走时过程中能按预设的定时时间(精确到小时)启动闹钟,以发光二极管闪烁表示,启闹时间为3s~10s二、实验仪器及主要器件5V电源1台面包板1块74LS163 6片74LS00 5片74LS138 2片CD4511 4片LM555 1片74LS123 1片LED共阴极显示器4片电阻若干电容3个导线15米三、设计原理方案系统构成1、标准时间源l )标准时间源即秒信号发生器2 )可采用LM555构成多谐振荡器,调整电阻可改变频率,使之产生1Hz的脉冲信号(即T=1S)LM555管脚排列及电路T=0.7(RA+2RB)CT=1S,C=220uF计算得RA+2RB≈6.5K取RA=1.5K,RB=2.4K2.计时部分:时计数单元一般为24进制计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
模60计数器采用异步方式如秒计数器:分成个位和十位,个位模十,十位模六。
个位从0000计数到1001,利用置数端将个位从0000重新开始计数,同时将1001信号作为一个CP脉冲信号传给十位,让十位开始从0000开始计数。
以此规律开始计数,直到十位计数到5,个位计数到9时,通过十位的置数端将十位清零,重新开始计数,并将此信号作为一个CP脉冲信号传给分计数器。
模24计数器电路模24计数器采用同步方式,使用两片74LS163芯片,cp脉冲均由分计数器提供.第一片制成模10计数器,将1001信号提取出来后给与清零端。
第二片芯片制成模为3的计数器,原数据ABCD给予0000信号.将第一片芯片的0011信号与第二片芯片的0010信号提取出来给与第一片芯片的置数端与第二片芯片的清零端,上升沿过来之后,两片芯片同时清零3、定时起闹部分l )正点起闹,不要求分2 )使用2片74LS138,分别选出小时的十位和个位3 )小时十位为0~2,3-8译码器只使用前2个输入端,小时个位为0~9,3-8译码器只有3个输入端,会丢失几个时间点:8点、9点、18点、19点。
带时校功能的数字闹钟 数电课程设计

数字闹钟系别:电气与信息工程系专业:电气工程及其自动化班级:05电气二班姓名:学号:0520050014目录第一章:序言 (1)第二章:设计任务………………………………..(1~2)第三章:电路组成及工作原理……………….....(2~3)第四章:设计步骤及方法………………….…....(3~8)第五章:收获体会 (8)参考文献 (9)第一章:序言闹钟的多功能化使对其的性能要求越来越高,数字闹钟具有校时功能即有预置数功能。
需要其在任何时间可对数字闹钟进行校准,将其拨至标准时间或其他需要的时间。
第二章:设计任务一设计题目:带有校时功能的数字闹钟二设计要求:(1)有“时”,“分”的十进制显示,“秒”信号驱动发光二极管,成为将“时”,“分”显示隔开的小数点。
(2)记时以1昼夜24小时为一个周期。
(3)具有校时电路(即有预置数功能)。
任何时候可对数字闹钟进行校准,将其拨至标准时间或其他需要的时间。
(4)计时过程中的任意“时”,“分”,均能按需要时间起闹,闹钟每次起闹时间为3~5秒,并允许用户在此时间范围能调整。
第三章:电路组成及工作原理1.总体方案设计(1)数字闹钟记时的标准信号应是相当稳定的1Hz秒脉冲,所以要设置标准时间源。
(2)数字闹钟记时周期为24h,因此必须设置24h计数器,它应有模为60的秒计数器和分计数器及模为24的时计数器组成。
秒显示有发光二极管的亮,暗示意,时和分由七段数码管显示。
(3)为使数字闹钟的走时与标准时间一致,校时电路是比不可少的,本例采用开关控制校时方法,直接用秒脉冲先后对“时”,“分”,“秒”计数器进行校时操作。
(4)为使数字闹钟能按用户需要,在特定时间起闹,应设置有控制作用的电路及何时起闹的时,分译码电路和选择开关,有用户自行决定起闹时,分。
起闹每次时间为3~5秒,通过电路元件参数来实现。
根据上述分析,数字闹钟的总体方案已经明确,可画出如图1所示的方案框图。
图1 数字时钟方案框图第四章设计步骤及方法1 标准时间源——采用50Hz的220V交流市电源作为标准时间源,参考电路如图2所示。
微机原理记时日期秒表多功能电子钟课程设计
微机课程设计用8086/8088CPU设计一个多功能时钟。
要求实现,日常使用时正确显示的是时、分、秒;根据需要,还可以作为秒表使用;还可以显示日期。
目录一、设计内容要求二、设计思想三、程序流程图(1)时间显示部分(2)日期显示部分(3)数字显示部分四、实验连线图(1)总体线路图(2)8284应用电路(3)74LS138片选部分(4)8255与七段数码管搭配部分电路图(5)8259功能选择部分(6)数据存储部分(7)计数电路(8)CPU的部分连接部分五、连线描述六、按键功能介绍七、心得体会八、参考文献一、设计内容与要求1、设计目的:1) 进一步建立微机系统概念、加深对系统理解和认识,提高微机系统的应用水平。
2) 进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高汇编语言程序的水平和学习程序调试方法。
3) 进一步熟悉接口、熟悉键盘控制和七段数码管及其他芯片的使用。
2、设计任务:用8086/8088CPU设计一个多功能时钟。
要求实现,日常使用时正确显示的是时、分、秒;根据需要,还可以作为秒表使用;还可以显示日期。
二、设计思想1. 先在数据段开辟存储单元,用来存放时、分、秒、年、月、日等的信息。
这些存储单元分别对应时、分、秒,日期的年、月、日的十位和个位。
调用子程序的清屏部分。
2. 在主程序中分别对8259、8255、8259、8253进行初始化编程。
根据系统功能要求,设置操作字与方式控制字。
3. 8255的A口工作在方式0输出,B口工作在方式0输出,为基本的输入输出方式。
这部分与七段数码管搭配,显示结果。
4. 在中断服务程序中对中断次数进行统计。
当时钟在日常状态和切换到秒表功能时,当产生1次中断时,将秒的个位加1,判断是否到10,如到了则十位加1,个位清零;再判断十位是否到6,如到了则十位清零,分的个位加1,同理对分、时做相应的处理。
该电子钟为12进制的。
当电子表切换到日期功能时,先判断是否是闰年,然后判断是否是二月,最后判断是单月份还是双月份,然后根据闰年366天,闰年2月29天,不是闰年28天,当月份31天,双月份30天进行进位。
课程设计_数字电子钟设计报告
课程设计_数字电子钟设计报告第一篇:课程设计_数字电子钟设计报告数字电子钟设计报告数字电子钟设计报告目录1.实验目的 (2)2.实验题目描述和要求 (2)3.设计报告内容...........................................................................2 3.1实验名称.................................................................................2 3.2实验目的.................................................................................2 3.3实验器材及主要器件..................................................................2 3.4数字电子钟基本原理..................................................................3 3.5数字电子钟单元电路设计、参数计算和器件选择..............................3-8 3.6数字电子钟电路图.....................................................................9 3.7数字电子钟的组装与调试............................................................9 4.实验结论.................................................................................9 5.实验心得 (10)参考文献 (10)数字电子钟设计报告一简述数字电子钟是一种用数字显示秒,分,时,日的计时装置,与传统的机械相比,它具有走时准确,显示直观,无机械传动装置等优点,因而得到了广泛的应用:小到人们日常生活中的电子手表,大到车站,码头,机场等公共场所的大型数显电子钟。
课程设计数字电子闹钟
数字闹钟的设计数字闹钟的设计与制作一、设计任务与要求设计并制作一个带有可定时起闹的数字钟1.有“时”、“分”十进制显示,“秒”使用发光二极管闪烁表示2.以24小时为一个计时周期3.走时过程中能按预设的定时时间(精确到小时)启动闹钟,以发光二极管闪烁表示,启闹时间为3s~10s二、实验仪器及主要器件5V电源1台面包板1块74LS163 6片74LS00 5片74LS138 2片CD4511 4片LM555 1片74LS123 1片LED共阴极显示器4片电阻若干电容3个导线15米三、设计原理方案系统构成1、标准时间源l )标准时间源即秒信号发生器2 )可采用LM555构成多谐振荡器,调整电阻可改变频率,使之产生1Hz的脉冲信号(即T=1S)LM555管脚排列及电路T=0.7(RA+2RB)CT=1S,C=220uF计算得RA+2RB≈6.5K取RA=1.5K,RB=2.4K2.计时部分:时计数单元一般为24进制计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
模60计数器采用异步方式如秒计数器:分成个位和十位,个位模十,十位模六。
个位从0000计数到1001,利用置数端将个位从0000重新开始计数,同时将1001信号作为一个CP脉冲信号传给十位,让十位开始从0000开始计数。
以此规律开始计数,直到十位计数到5,个位计数到9时,通过十位的置数端将十位清零,重新开始计数,并将此信号作为一个CP脉冲信号传给分计数器。
模24计数器电路模24计数器采用同步方式,使用两片74LS163芯片,cp脉冲均由分计数器提供.第一片制成模10计数器,将1001信号提取出来后给与清零端。
第二片芯片制成模为3的计数器,原数据ABCD给予0000信号.将第一片芯片的0011信号与第二片芯片的0010信号提取出来给与第一片芯片的置数端与第二片芯片的清零端,上升沿过来之后,两片芯片同时清零3、定时起闹部分l )正点起闹,不要求分2 )使用2片74LS138,分别选出小时的十位和个位3 )小时十位为0~2,3-8译码器只使用前2个输入端,小时个位为0~9,3-8译码器只有3个输入端,会丢失几个时间点:8点、9点、18点、19点。
微机原理课程设计-电子时钟
一、设计的目的要求学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
该系统的要求利用8253定时器设计一个具有时、分、秒显示的电子时钟,并定义一个启动键,当按下该键时时钟从当前设定值(可在显示缓冲区中予置)开始走时。
二、系统的主要功能该系统是一个简单的利用8253定时器、8255可并行通信接口和中断控制器8259设计的电子时钟系统,在该系统中设有一个启动键,启动键未按下时,显示初始化界面“HELLO”;当按下启动键时,8253定时器开始计时(8253的初值为10000,接1MHz的脉冲,即当8253计满100时正好是1S),当计时计满100时,8259便产生一次中断,在LED显示器便显示系统预先设计好的初始值“02.59.55”便开始从秒位开始加1,当加到10S时,10s位加1,加到60S 时分位加1,同时秒位清零。
该系统主要接口部件有:可并行通信接口8255一片,计数器/定时器8253一片,中断控制器8259一片,七段LED数码管显示器6个以及译码电路等。
其中各个部件的初始化如下:1、可并行通信接口8255的控制字是方式选择控制字,A口工作在方式0(即基本输入输出方式)下,并且为输出状态,B口工作在方式0下,为输出口,C口为输出口,其初始化为:8255控制口地址为20bhA端口地址为208hB端口地址为209hC端口地址为20ahmov dx,20bhmov al,10000001bout dx,al2、做为计数器的计数器/定时器8253,在设置好计数初值(即定时常数)后,便开始减1计数,为0时,输出一个信号;控制字设置:BCD为设置为计数值为二进制格式,模式选择为模式2(即为分频器,当控制字写入后,输出段OUT变为高电平作为初始状态,当计数初值写入初值寄存器后,下一个时钟脉冲时,计数初值被写到计数执行部件,然后计数执行部件做减1计数,减到1时,输出端OUT变为低电平;完成一次计数过程后,输出端OUT又变为高电平,开始一个新的计数过程,由此可以周而复始的进行下去),读写指示位为先写低8位字节,在读写高8位字节,计数器选择计数器0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术13-1班学号:2013211601姓名:康安一、设计题目及要求:1.通过8253 定时器产生1秒脉冲定时中断。
在中断服务程序中实现秒、分、小时的进位(24小时制)。
2.在七段数码管上显示当前的时分秒(例如,12点10分40秒显示为121040)。
3.按“C”键可设置时钟的时间当前值(对准时间)。
4.按“D”键设置闹铃时间。
5. 按“E”键表示时钟开始运行。
6. 程序运行时,首先按“D”键设置闹铃时间,然后按“C”键设置时钟的时间,再按“E”让时钟开始运行。
当前时间运行到闹铃时间时,6 个数码管全部闪烁显示“8”。
二、设计思想:总体思想: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键设置初始时间,LED清零,显示待输入状态“-------”,之后用户输入数字,更改LED显示内容。
考虑到第一个数只能是0,1,2,当第一个数显示2时第二个数只能显示0~4,同理下面各位应满足时钟数值的合理的取值;(3)按D键设置闹钟时间,清除LED显示内容,显示待输入状态“------”,之后用户输入数字,更改LED显示内容。
数字的取值情况和按C键设置初始时间相同。
(4)按E键运行时钟,LED显示内容恢复为按C键设置的时间,并开始计时。
(5)当LED显示的数字和预先设置好的闹钟相同时,更改LED显示状态,改为“888888”,闪烁显示10秒后恢复原来的时间,继续计数。
2、主程序设计(他人完成)主程序中完成通过调用子程序完成对8253及8259的初始化,对8259进行中断设置。
主要在显示子程序和键盘子处理程序之间不断循环,8253每一秒给8259一个刺激,当8259接受到刺激后会给CPU一个中断请求,CPU会转去执行中断子程序,而中断子程序设置成时间计数加,即完成电子表的整体设计。
当LED显示的时间达到预先设置的时间,关闭中断,更改显示内容,在显示一段时间后恢复显示,打开中断,使电子表恢复运行。
3、LED显示子程序设计(他人完成)本程序显示部分用了6个共阳极LED作为显示管,显示程序要做到每送一次段码就送一次位码,每送一次位码后,将位码中的0右移1位作为下次的位码,从而可以实现从左到右使6个LED依次显示出相应的数字。
虽然CPU每隔一定时间便执行显示程序,但只要这个时间段不太长,由于人眼的视觉作用,就可以在6个LED上同时见到数字显示。
4、键盘扫描子程序设计(他人完成)本程序主要实现对键盘的按键进行扫描,判断用户是否按下的键值,并将按下的键值作为参数返回。
5、时钟功能设置(独立负责)本程序段负责实现判断用户按下的键值,根据按下的键值转入不同的程序段执行相应的功能设置。
判断键值的方法为设置三个标志位,三个标志位分别对应3个按键,当按键被按下时,将对应的标志位置为1,在程序段中对三个标志位进行判断,从而实现不同的功能设置。
首先调用键盘扫描子程序GetKey获取用户输入的键值,之后将键值分别与0ch, 0dh, 0eh 比较:若键值为C,则跳入下一个程序段SETC,将对应的标志位ButtonC置为1,其余两个标志ButtonD和ButtonE为0;若键值为D,则跳入下一个程序段SETD,将对应的标志位ButtonD置为1,其余两个标志ButtonC和ButtonE为0;若键值为E,则跳入下一个程序段SETE,将对应的标志位ButtonE置为1,同时由于要更改显示的时间状态,将使用到的一个临时缓冲区buff的取出标志位flag也置为1,表示E键被按下后,要将buff缓冲区内存的时间转移到LedBuff上来显示用户设置的时间。
其余两个标志ButtonD和ButtonE为0;若键值为数字,则跳入下一个程序段NEXT。
NEXT程序段负责完成三个功能:设置时间、置闹钟以及时钟运行。
此程序段通过判断三个标志是否为1,来实现不同的功能。
若ButtonC为1,意味着当前是设置时钟模式,用户在按下C键之后输入的6位数字键为设置的时间;若ButtonD为1,意味着当前是设置闹钟模式,用户在按下C键之后输入的6位数字键为设置好的闹钟时间;若ButtonE为1,意味着时钟开始运行。
详情见图6、闹钟显示功能(他人完成)本程序段负责实现时间达到闹钟设置时间的操作,对LED显示的内容进行判断,当6个二极管显示的数字完全相同时,即满足闹钟响的条件,此时关闭中断,并将LED显示内容更改为“888888”,显示10S后将LED恢复为响之前的状态,打开中断,继续运行时钟7、8259初始化及中断设置(独立负责)8259芯片:在该系统中,8259主要担负着处理8253的一秒时间的脉冲信号,通过8253的每秒的刺激下向CPU发送中断请求,进而CPU处理担负时间计算的中断子程序,即可完成每秒钟时间自加1秒的功能,因此8259的初始化设置应为:MOV AL,13HMOV DX,Port0OUT DX,AL ; icw1MOV AL,08HMOV DX,Port1OUT DX,AL ; icw2MOV AL,0BHOUT DX,ALMOV AL,7FH ; IRQ7OUT DX,AL在接收到8253的脉冲后,需要执行的中断程序功能为对LED显示的数字进行判断,显示合理的数值,即要满足显示秒的LED管显示的最大值为59,显示分钟的最大值为59,显示时钟的最大值为23,最大时间不能超过23:59:59。
具体判断方法见“时间值合理的判断”8、8253定时器设置(他人完成)8253芯片:在系统中定时/计数芯片8253主要与CPU及中断扩展芯片8259之间存在着连接关系。
8253主要担负着时间计时的功能,通过对分频单元提供的频率信号进行方法产生一秒时间为周期的脉冲信号。
三、功能流程图:1、主程序流程图(他人完成)开始初始化8259芯片调用DIS显示子程序调用GetKey 子程序扫描键值中断调用中断子程序进行时间计数NY2、LED显示子程序流程图(他人完成)断码表指针送入寄存器BX ,显示缓冲区LedBuf指向第一位数码管显示缓冲区字符转换成数码管值输出段码输出段码6位显示完全?返回关显示NY3、 按键处理子程序流程图(独立负责)C 键?调用GetKey返回清空数据缓冲区Y输入时钟时间D 键?N清空数据缓冲区Y输入闹钟时间E 键?执行NYN4、中断子程序-时间计数子程序流程图(合作完成)中断入口保护现场恢复现场关显示中断返回秒值加1到60?NY秒值加1到60?Y秒值加1到24?NYYN小时清零四、结果讨论:1、实验结果:程序运行,数码管开始从000000走表,按C键后显示‘——————’开始对时钟进行初始值设置,设置完成后按D键后,LED显示‘——————’进入闹钟设置状态,在设置完闹钟后按E键开始运行,LED管显示为设置好的时间并接收8253的中断,实现不断走表。
当显示时间达到闹钟时间时,LED管显示‘888888’,在闪烁10S结束闹钟状态,再次显示时间,并开始走表。
2、问题解决:自己遇到的问题:在测试C、D、E三个功能键时常常出现误输入的情况,为便于查看用户输入的值,在用户按下相应的功能键时,将LED显示为此时显示‘——————’,用户依次输入6个数字,相应地,在LED上由左向右依次显示用户输入的数字,方便查看用户是否输入了自己想测试的时间。
组员遇到的问题:调试程序时发现时钟初始值可以设置,但是初始值设置完后时钟并没有走表,于是将8253的输出端的线接入至手动的单脉冲的发生器,进行手动给8259刺激,结果时钟开始随手按动开始走表,可以断定该8253芯片可能已经损坏,换了个试验箱后遇到了同样的情况,直至换了功能正常的实验箱后实验现象才正确展现。
附录:实验代码:(完整的源程序)CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODE; org 5000hPort0 EQU 0FFE0HPort1 EQU 0FFE1Hport00 equ 0FFF0Hport33 equ 0FFF3HOUTSEG equ 0ffdch ;段控制口OUTBIT equ 0ffddh ;位控制口/键扫口IN_KEY equ 0ffdeh ;键盘读入口org 3400hLedBuf db 6 dup(?) ;显示缓冲CBuf db 6 dup(0fh)buf db 6 dup(?) ;临时存放时刻buttonC DB 02H ;若C键被按则置1buttonD DB 03H ;若D键被按则置1buttonE DB 00H ;若E键被按则置1flag DB 00h ;时间从BUF取出到LEDBUF标志cflag DB 00hStart:;mov cflag,00mov LedBuf+0,00h ;开启时显示"000000"mov LedBuf+1,00hmov LedBuf+2,00hmov LedBuf+3,00hmov LedBuf+4,00hmov LedBuf+5,00hmov si,0 ;;;;;;;;;;;;;;;;;;;;;;;;初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; push axpush dxMOV DX,port33MOV AL,36HOUT DX,ALMOV DX,port00MOV AL,00HOUT DX,ALMOV AL,4BHOUT DX,ALpop dxpop axCLIMOV AX,OFFSET INT8259MOV BX,003CHMOV [BX],AXMOV BX,003EHMOV AX,0000HMOV [BX],AXCALL FOR8259STI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;con8:CALL DIScall GetKey ;扫描键盘并读取键值cmp al,20h ;检测是否按下按键jz con8and al,0fh ;显示键码cmp al,0dh ;d:设置闹钟jz setDcmp al,0ch ;c:设置时钟先时后分jz setCcmp al,0eh ;e:时钟运行jnz zhong ;CDE均不是,则跳转到NEXTjmp setEsetD: mov buttonD,01hMOV buttonC,00hMOV buttonE,00hhui:mov cx,6mov si,6push axmov al,LedBuf[si] ;之前代码声明过,si为0,所以此处si将依次为0,1,2,3,4,5 mov buf[si],al ;依次把LEDBUF里的时分秒存到BUFpop axinc siloop huimov si,00hmov LedBuf+0,11h ;开启时显示"------"mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11hmov LedBuf+4,11hmov LedBuf+5,11hcall disCLI ;关中断,进入设置闹钟模式jmp con8zhong:jmp nextsetC: MOV buttonC,01hMOV buttonD,00hMOV buttonE,00hmov si,00hmov LedBuf+0,11h ;开启时显示"------"mov LedBuf+1,11hmov LedBuf+2,11hmov LedBuf+3,11hmov LedBuf+4,11hmov LedBuf+5,11hcall disCLI ;关中断,进入设置当前时间模式jmp con8setE:MOV buttonE,01hMOV buttonD,00hMOV buttonC,00hcmp flag,01hjz nextSTI ;开中断,即确认C、D的输入值next:mov bl,buttonD ;通过判断三种标志,跳转到响应设置上cmp bl,01hjz writeDEmov bl,buttonCcmp bl,01hjz writeCmov bl,buttonEcmp bl,01hjz writeDEjmp con8;;;;;;;;;;;;;;;;;;;;;;;;;;writeC:mov [LedBuf+si],alinc siPUSH CXMOV CX,100DELAYc: call disLOOP DELAYCPOP CXcmp si,06hjnz overCmov buttonC,00hoverC: jmp con8;;;;;;;;;;;;;;;;;;;;;;;;;;;;writeDE:cmp flag, 01h ;若取出BUF内时间标志与E键标志均为1,则把BUF的内容取回LEDBUF jnz goDcmp buttonE,01hjz recoverLEDgoD:cmp si,06hjnb overDmov [LedBuf+si],al ;显示当前按下的键值mov [Cbuf+si],al ;存入闹钟缓冲区inc siPUSH CX ;键盘防抖MOV CX,100DELAYd: call disLOOP DELAYDPOP CXcmp si,06hjnz overd ;若SI不等06h即小于6,则跳到con8处,继续获取键值,直至6位闹钟设置完毕MOV BUTTOND,00H ;闹钟设置完毕,使D键标志失效,使其不会继续设置闹钟,并将取出BUF内时间标志置1mov flag,01hoverD: JMP con8recoverLED: cli ;实现从BUF知LEDbuf功能的具体代码区push sipush cxPUSH BXmov cx,0006hloopD: mov bx,offset LedBufpush cxdec cxmov si,cxpop cxmov bl,Buf[si]mov LedBuf[si],blloop loopDPUSH CX ;键盘防抖MOV CX,100DELAYdd: call disLOOP DELAYDdPOP CXMOV BUTTONE,00H ;任务完成,是E键标志失效,取出标志失效,闹钟响标志生效mov flag,00hMOV Cflag,01hstiPOP BXpop cxpop sistijmp con8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;StartRing:clipush sipush cxcall LEDtoBUF ;启动闹钟显示前,存储LEDbufmov cx,08hloopring1:mov LedBuf+0,08h ;开启时显示"888888"mov LedBuf+1,08hmov LedBuf+2,08hmov LedBuf+3,08hmov LedBuf+4,08hmov LedBuf+5,08hpush cx ;延时MOV CX,100DELAYring1: call disLOOP DELAYring1pop cxmov LedBuf+0,010hmov LedBuf+1,010hmov LedBuf+2,010hmov LedBuf+3,010hmov LedBuf+4,010hmov LedBuf+5,010hpush cx ;延时MOV CX,100DELAYring2: call disLOOP DELAYring2pop cxloop loopring1call BUFtoLED ;闹钟显示结束,恢复LEDbuf;mov juRing,00hpop cxpop sistiretjudgeclock: cmp Cflag,01h ;判断是否到达闹钟具体代码区jnz Noringmov al,[LedBuf]cmp al, [CBuf]jnz Noringmov al,[LedBuf+1]cmp al,[CBuf+1]jnz Noringmov al,[LedBuf+2]cmp al,[CBuf+2]jnz Noringmov al,[LedBuf+3]cmp al,[CBuf+3]jnz Noringmov al,[LedBuf+4]cmp al,[CBuf+4]jnz Noringmov al,[LedBuf+5]cmp al,[CBuf+5]jnz Noringjmp YesringNoring:jmp returnYesring:call startringreturn:retLEDtoBUF:PUSH sipush axmov si,00hLBloop: mov al,LEDbuf[si]MOV buf[si],alinc sicmp si,06hjnz LBloopPOP AXPOP SIRETBUFtoLED:push sipush axmov si,00hBLloop: MOV AL,BUF[si]mov LedBuf[si],ALINC SICMP SI,06HJNZ BLlooppop axpop siret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;FOR8259:MOV AL,13HMOV DX,Port0OUT DX,AL ;icw1MOV AL,08HMOV DX,Port1OUT DX,AL ;icw2MOV AL,0BHOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET ;;;;;;;;;;;;;;;;;;;;;;;;中断子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INT8259:clipush axpush bxpush cxpush si; call judgeclock; cmp juRing,01h; jnz noRing1; call StartRingnoRing1: mov al,[LedBuf+5] ;此处往下的代码区均无问题,无需更改mov ah,0call judgemov [LedBuf+5],almov si,4hcall judge6dec sicall judge9dec sicall judge6dec sicall judge24cmp cflag,01hjnz noringggcall judgeclocknoringgg:pop sipop cxpop bxpop axCALL DISSTIIRET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;judge: cmp al,09hjnz LL1mov al,0mov ah,1hjmp judge0LL1: inc aljudge0: retjudge6: mov al,[LedBuf+si]add al,ahmov ah,0hcmp al,06hjnz LL2mov al,0mov ah,1hLL2: mov [LedBuf+si],alretjudge9: mov al,[LedBuf+si]mov ah,0hcmp al,0ahjnz LL3mov al,0mov ah,1hLL3: mov [LedBuf+si],alretjudge24: mov al,[LedBuf+0]cmp al,2jz LL4call judge9mov al,[LedBuf+0]add al,ahmov ah,0hmov [LedBuf+0],aljmp L24LL4:mov al,[LedBuf+1]add al,ahmov ah,0hcmp al,4hjnz LL5mov al,0mov [LedBuf+0],almov [LedBuf+1],alJMP L24LL5: mov [LedBuf+1],alL24: ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GetKey: ;键扫子程序mov al,0ffh ;关显示口mov dx,OUTSEGout dx,almov bl,0mov ah,0fehmov cx,8key1: mov al,ahmov dx,OUTBITout dx,alshl al,1nopnopnopnopnopnopmov dx,IN_KEYin al,dxnot alnopnopand al,0fhjnz key2inc blloop key1nkey: mov al,20hretkey2: test al,1je key3mov al,0jmp key6key3: test al,2je key4mov al,8jmp key6key4: test al,4je key5mov al,10hjmp key6key5: test al,8je nkeymov al,18hkey6: add al,blcmp al,10hjnc fkeymov bx,offset KeyTable xlatfkey: ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DIS:push axpush cxmov si,0hMOV CL,20H ;10000b选种某一位7段二极管MOV BX,OFFSET LEDbufDIS1: MOV AL,[BX+si]PUSH BXMOV BX,OFFSET LEDmapXLAT ;换码指令POP BXMOV DX,outsegOUT DX,AL ;要显示的内容MOV AL,CLMOV DX,outbitOUT DX,AL ;显示的二极管PUSH CXMOV CX,256DELAY: LOOP $POP CXCMP SI,06HJZ EXITINC SISHR CL,1JMP DIS1EXIT: MOV AL,00HMOV DX,outbitOUT DX,ALpop sipop cxpop axRETLedMap: ;八段管显示码db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8hdb 080h,090h,088h,083h,0c6h,0a1h,086h,08eh,0ffh ,0bfhKeyTable: ;键码定义db 07h,04h,08h,05h,09h,06h,0ah,0bhdb 01h,00h,02h,0fh,03h,0eh,0ch,0dhCODE ENDSEND start。