LED七段数码管数字钟微机原理课程设计报告
- 格式:doc
- 大小:404.00 KB
- 文档页数:20
led数码管显示控制实验报告篇一:单片机实验报告——LED数码管显示实验《微机实验》报告LED数码管显示实验指导教师:专业班级:姓名:学号:联系方式:一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。
实验内容:利用C8051F310单片机控制数码管显示器基本要求:利用末位数码管循环显示数字0-9,显示切换频率为1Hz。
提高要求:在4位数码管显示器上依次显示当天时期和时间,显示格式如下:yyyy(月份.日)(小时.分钟)思考题:数码管采用动态驱动方式时刷新频率应如何选择?为什么?二、设计思路C8051F310单片机片上晶振为,采用8分频后为,输入时钟信号采用48个机器周期。
0到9对应的断码为:FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H 基础部分:由于只需要用末位数码管显示,不需要改变位码,所以只需要采用LED的静态显示。
采用查表的方法,通过循环结构,每次循环查找数据表下一地址,循环十次后重新开始循环。
每次循环延时1s,采用定时器0定时方式1。
提高部分:四个数码管都要显示,所以采用LED的动态显示。
由于数码管的位选由、控制,P0端口的其他引脚都没用到,所以对P0端口初始化赋00H,每次循环加40H、选中下一位,四次后十六进制溢出,P0端口变又为00H回到第一个数码管。
每位数码管显示一个段码后都延时1ms(否则数码管太亮,刺眼)采用定时器0定时方式1,依然采用查表法改变段码值。
通过循环:DJNZ R5,BACKMOVR5,#250 DJNZ R4,BACK MOVR4,#8来控制每种模式的切换时间,我采用2s切换一次(8*250*1ms=2s)。
切换模式,可以采用改变查表法的偏移量来实现,没切换一次模式,偏移量加04H,三次后回到初始偏移量,来实现三种模式的循环显示。
三、资源分配基础部分:、:控制数码管的位选P1:控制数码管段码的显示R0:控制段选提高部分:、:控制数码管的位选P1:控制数码管段码的显示R0:控制位选R1:控制段选R3:用于改变偏移量来切换模式R4、R5:控制循环次数,控制模式切换时间四、流程图基础部分:提高部分篇二:实验八数码管LED实验报告苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:数码管LED实验一.实验目的理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管LG5641AH与MCU 的接线图。
合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术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依次显示出相应的数字。
《微机原理综合实验》课程设计学院:机电学院班级: 12机械师姓名:周汉斌学号: 2012095644010 指导老师:覃孟扬目录一、设计任务书.................................. 错误!未定义书签。
二、设计题目 (3)三、设计方案 (3)四、硬件原理 (3)1.七段数码管显示 (3)2.键盘扫描显示 (5)3.8253计数器和8259中断 (5)4.硬件连接 (6)五、程序流程图及程序清单 (6)1.七段数码管显示 (8)2. 键盘扫描显示 (9)3.定时器设计 (12)4.总程序设计 (15)六、调试过程及结果 (29)七、设计总结和体会 (30)八、参考文献 (31)一、设计题目LED七段数码管数字钟:1.设计并完成LED七段数码管数字钟电路。
2.数字钟显示格式为:HH:MM:SS。
3.具有通过键盘能够调整时、分、秒的功能。
二、设计方案本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在对秒计数得到分和小时值,并送入显示缓冲区,用总线方式控制数码管显示。
同时,利用实验箱提供的键盘扫描电路和显示电路来调整时、分、秒。
三、硬件原理1.七段数码管显示图1. 七段数码管七段数码管的字型代码表如下表:显示字形g f e d c b a 段码0 0 1 1 1 1 1 1 3fh1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 1 1 5bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 0 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 1 1 1 1 1 1 1 7fh9 1 1 0 1 1 1 1 6fhA 1 1 1 0 1 1 1 77hB 1 1 1 1 1 0 0 7chC 0 1 1 1 0 0 1 39hD 1 0 1 1 1 1 0 5ehE 1 1 1 1 0 0 1 79hF 1 1 1 0 0 0 1 71h表1. 段数码管的字型代码表图2. 八段数码LED显示电路实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
实验七七段LED数码管显示电路设计一、实验目的1.学习EDA软件的基本操作2.学习使用原理图进行设计输入3.初步掌握软件输入、编译、仿真和编程的过程4.学习实验开发系统的使用方法二、实验说明本实验通过七段LED数码管显示电路的设计,初步掌握EDA 设计方法中的设计输入、编译、综合、仿真和编程的基本过程。
七段LED数码管显示电路有四个数据输入端(D0-D3),七个数据输出端(A-G。
三、实验要求1、完成七段LED数码管显示电路的原理图输入并进行编译2、对设计的电路经行仿真验证3、编程下载并在实验开发系统上验证设计结果四、实验步骤1、新建工程2、新建Verilog HDL文件3、在文本输入窗口键入代码4、保存HDL文件5、编译文件直至没有错误6、新建波形文件7、添加观察信号8、添加输入激励,保存波形文件9、功能仿真七段LED数码管显示电路真值表:输入D3D2D1D0G F E D C B A 000000111111 100010000110 200101011011 300111001111 401001100110 501011101101 601101111101 701110001111 810001111111910011101111 A10101110111 B10111111100 C11001111001 D110111011110 E11101111001 F11111110001五、电路原理图啊Verilog代码描述:module qiduan(data_in,data_out;input [3:0]data_in;output [6:0]data_out;reg [6:0]data_out;always @(data_inbegincasex(data_in4'b0000:data_out<=7'b0111111;4'b0001:data_out<=7'b0000110; 4'b0010:data_out<=7'b1011011; 4'b0011:data_out<=7'b1001111; 4'b0100:data_out<=7'b1100110; 4'b0101:data_out<=7'b1101101; 4'b0110:data_out<=7'b1111100; 4'b0111:data_out<=7'b0000111; 4'b1000:data_out<=7'b1111111; 4'b1001:data_out<=7'b1100111; 4'b1010:data_out<=7'b1110111; 4'b1011:data_out<=7'b1111100; 4'b1100:data_out<=7'b0111001; 4'b1101:data_out<=7'b1011110; 4'b1110:data_out<=7'b1111001; 4'b1111:data_out<=7'b1110001; default:data_out<=7'b0000000; endcaseendendmodule仿真波形:六、实验体会七段LED数码管显示电路是常用的数码管之一,它有四个数据输入端(D0-D3),七个数据输出端(A-G。
课程名称微机原理与接口技术任课教师设计题目数字钟设计班级姓名学号日期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显示器循环显示时、分、秒的动态值。
实验三七段数码管一、实验目的:进一步熟悉8255,掌握数码管显示数字的原理二、实验原理:1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
2、七段数码管的字形码:3、在实验 2 中加入键盘是否有输入判断,如有则去读取键盘输入数据,并加入提示信息,比如“输入十位数”,“输入个位数”,从键盘读入的数据放入十位和个位数据定义区,取代要显示的数据。
4、只需要添加两位变量作为缓存,一个记录键盘输入的值,一个记录循环减 1 的结果,将其通过数码管显示出来,减至0 时重载键盘输入的值。
三、实验步骤:静态显示:将8255 的 A 口 PA0~PA6分别与气短数码管的段码驱动输入端A~G相连,位码驱动输入端S1 接 +5V(选中), S0、 DP接地(关闭)。
动态显示:七段数码管段码不变,位码驱动输入端S1,S0 接 8255 C 口的 PC1,PC0。
8253 的接法参考第二次实验的接法,CLK0接入 1MHz, CLK1接 8255 的 PC7。
1、在两个数码管上显示两位数字,要求延时应用8253 硬件延时2、可以改变数码管显示数字,从键盘读入两位数字,并在数码管显示出来。
3、对输入数据进行倒计时计数,时间显示在数码管上,计到0 重新开始。
四、流程图:开始对 8255 进行初设置 8255C 口输从键盘读入数据Y根据十位获得段码,延时N根据个位获得段码,按键延时N循环显示这Y要输出的数重新载入输Y要输出的数据减 1五、实验结果:实验结果如预期一致,可以键盘输入倒计时的值,时间显示在数码管上,计数到0 重新计数。
六、程序代码:;******************************************;*数码管显示对键盘输入数据进行倒计时计数*;******************************************data segmentio8255a equ 288hio8255c equ 28ahio8255_mode equ 28bhio8253a equ 280hio8253b equ 281hio8253c equ 282hmesg1 db 0dh,0ah,'Input a num (00--99) for high position,other key isexit:',0dh,0ah,'$'mesg2 db 0dh,0ah,'Input a num (00--99) for low position,other key isexit:',0dh,0ah,'$'led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh; 段码buffer db , ; 存放要显示的个位和十位buffer1 db , ; 存放临时的个位和十位用于减一bz dw;data endscode segmentassume cs:code,ds:datastart:位码mov ax,datamov ds,axmov dx,io8255_mode ; 将8255 的A 口为输出mov ax,88hout dx,almov dx,offset mesg1mov ah,09hint 21h; 显示提示信息mov ah,01int 21h; 从键盘接收十位字符cmp al,'0' jl exit ; 是否小于0 ; 若是则退出cmp al,'9' jg exit sub al,30h ; 是否大于9 ; 若是则退出mov buffer,almov dx,offset mesg2 mov ah,09hint 21hmov ah,01hint 21h; 将输入的十位数存入指定地址; 显示提示信息cmp al,'0'jl exitcmp al,'9'jg exitsub al,30h; 判断方法同十位mov buffer+1,aljmp reset; 将输入的个位数存入指定地址exit:mov ah,4chint 21hreset:mov al,buffermov buffer1,almov al,buffer+1mov buffer1+1,al; 返回mov di,offset buffer1loop1:call time; 取得显示缓冲区的地址loop2:mov bh,02h ; 数码管循环显示部分lll:mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl 为要显示的数pop dimov al,0mov dx,io8255cout dx,almov bh,0mov si,offset led ; 置led 数码表偏移地址为SI add si,bx ; 求出对应的led 数码mov al,byte ptr [si]mov dx,io8255a ; 自8255A 的口输出out dx,almov al,byte ptr bz; 使相应的数码管亮mov dx,io8255cout dx,almov cx,3000delay:loop delay; 延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,io8255cin al,dxtest al,80hjnz setjmp loop2set:test buffer1+1,0fhjz set1dec buffer1+1jmp loop1set1:test buffer1,0fhjz resetdec buffer1mov buffer1+1,09hjmp loop1time proc near ; 定时一秒的子程序mov dx,io8253c ; 向 8253 写控制字mov al,37h ; 使0 通道为工作方式 3 out dx,almov ax,1000h ; 循环计数初值1000 mov dx,io8253aout dx,al; 先写低字节mov al,ahout dx,al; 后写高字节mov dx,io8253cmov al,71h ; 设8253 通道 1 工作方式0out dx,almov ax,1000h ; 循环计数初值1000mov dx,io8253bout dx,al ; 先写低字节mov al,ahout dx,al; 后写高字节rettime endpcode endsend start七、实验总结:本次实验需要结合上次实验的知识,应用 8253 硬件延时,因此增加了些许难度,代码的修改也不少。
七段数码管实验报告篇一:西南交大 7段数码管显示译码器实验报告实验四 7段LED数码管显示译码器设计西南交大计算机组成原理实验(代码)实验要求:本实验要求实现16位的二进制数的7段LED数码管显示译码电路,采用动态扫描显示,可以实现计数值或固定值。
实验原理:动态扫描:由3-8译码器的输出来决定哪个数码管亮,sel为3-8译码器的输入,sel=0—7从左到右依次点亮8个数码管,要实现动态扫描,就必须让sel的值随着CLK的每一次上升沿触发而变化。
16位的输入每四位一组作为4个数码管的显示数据,当然还需要一个中间变量实现输入数的转码。
实验代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY tt3 ISPORT( CLK:IN STD_LOGIC;INN:IN STD_LOGIC_VECTOR(15 DOWNTO 0);SEL:buffer STD_LOGIC_VECTOR(2 DOWNTO 0);LED7:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END;ARCHITECTURE ONE OF tt3 ISSIGNAL DATA:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK)BEGINIF CLK EVENT AND CLK= 1 THENIF SEL = 011 THEN SEL = 000ELSE SEL =SEL+1;END IF;CASE SEL ISWHEN 000 = DATA =INN(3 downto 0);WHEN 001 = DATA =INN(7 DOWNTO 4);WHEN 010 = DATA =INN(11 DOWNTO 8);WHEN 011 = DATA =INN(15 DOWNTO 12);WHEN OTHERS = NULL;END CASE;END IF;END PROCESS;PROCESS(DATA)BEGINCASE DATA ISWHEN 0000 = LED7 = 00111111 --0WHEN 0001 = LED7 = 00000110 --1WHEN 0010 = LED7 = 01011011 --2WHEN 0011 = LED7 = 01001111 --3WHEN 0100 = LED7 = 01100110 --4WHEN 0101 = LED7 = 01101101 --5WHEN 0110 = LED7 = 01111101 --6WHEN 0111 = LED7 = 00000111 --7WHEN 1000 = LED7 = 01111111 --8WHEN 1001 = LED7 = 01101111 --9WHEN 1010 = LED7 = 01110111 --10WHEN 1011 = LED7 = 01111100 --11WHEN 1100 = LED7 = 00111001 --12WHEN 1101 = LED7 = 01011110 --13WHEN 1110 = LED7 = 01111001 --14WHEN 1111 = LED7 = 01110001 --15WHEN OTHERS = NULL;END CASE;END PROCESS;END;波形图设计:引脚锁定:Clk----A14 SEL[0]-----PIN_C22SEL[1]----PIN_D22SEL[2]----PIN_G9 SEG[0]---PIN_G16—a ~~~~SEG[7]---PIN_M21—dpDATA[0]—DATA[3]锁定于k1,k2,k3,k4 DATA[4]-DATA[7]锁定于k7,k8,k9,k10DATA[11]-DATA[8] 锁定于s1,s2,s3,s4DATA[15]-DATA[12] 锁定于s7,s8,s9,s10篇二:实验四实验七段数码管显示实验实验四七段数码管显示实验一、实验目的掌握数码管显示数字的原理。
7段数码管实验报告实验目的:本实验的目的是通过控制 7 段数码管的亮灭状态来显示不同的数字和字母。
实验原理:7 段数码管常用于显示数字和字母,每个数码管由 7 个 LED灯组成,分别表示 A、B、C、D、E、F、G 等 7 个段。
通过控制这些LED 灯的亮灭状态,就可以显示不同的数字和字母。
在实际应用中,通常需要使用一个译码器来根据输入的数字或字母输出相应的控制信号。
常用的译码器有 7447、DM9368 等。
这些译码器通常都是 BCD 码到 7 段数码管的译码器。
在本实验中,我们将使用 7447 译码器来控制 7 段数码管的亮灭状态。
7447 译码器具有 4 个输入线和 7 个输出线,每个输入线上的 BCD 码可以转换成相应的控制信号,用于控制数码管的 7 个 LED 灯。
实验材料:1. 7 段数码管2. 7447 译码器3. 电路板4. 电压源5. 连接线实验步骤:1. 将 7447 译码器插入电路板上相应的插槽中,并将数码管连接到电路板上。
2. 将电压源连接到电路板上,并调节电压和电流值。
3. 根据所需显示的数字或字母,设置相应的BCD 码输入信号。
4. 打开电源,观察数码管是否能够正确显示。
实验结果:通过本实验,我们可以成功控制 7 段数码管的亮灭状态,实现了数字和字母的显示。
同时,我们也了解了 7447 译码器的原理和使用方法。
实验小结:本实验是电子技术的基础实验之一,通过实验我们深入了解了7 段数码管和 7447 译码器的原理和应用,同时也锻炼了我们的动手能力和实验技能。
在实际应用中,7 段数码管和译码器常常被用于数字显示、计数器、时钟、温度计等电子设备中,具有广泛的应用前景。
《单片机原理及其接口技术》课程设计报告课题 LED显示地电子钟院系自动控制与机械工程学院目录一、设计目地及要求 (1)二、系统设计 (1)三、硬件设计 (1)1、A T89C51 (2)2、LED数码管显示部分 (2)2、晶振部分 (3)4、按键部分 (3)四、软件设计 (4)1、protues软件 (4)2、流程图 (4)3、仿真结果 (6)五、总结与心得体会 (7)六、附录(C语言程序)...... . (8)一、设计目地及要求1、设计题目:LED显示地电子钟2、设计任务:基于AT89C51单片机,制作一个LED显示地智能电子钟.3、设计要求:(1)、用6个7段LED数码管作为显示设备,设计时钟功能.(2)、显示格式,日期:YY MM DD,时间:HH MM SS.(3)、可以分别设计年、月、日,时、分、秒.在复位后地日期应该为:12 01 01,时间为:00 00 00.(4)、秒钟复位功能,当秒位键按下后,秒地那位回到00 .(5)、键盘按键个数应该万为己确定.(6)、@时间、月、日自行交替显示,或者按键切换显示.二、系统设计设计中采用AT89C51芯片及LED显示器,一些独立式按键构成一个简单地数字电子钟.设计中是采用单片机地内部定时器进行定时,程序框图如图2.1所示:图2.1系统框图整个电子钟地工作原理是:在正常地供电状态下,首先利用单片机定时,到了相应地时间由单片机将所需要显示地数据送到LED显示器地输入口,当有键按下时则进入相应地按键显示和调整状态,进行按键调整.三、硬件设计:硬件设计是指应用系统地电路设计,包括单片机芯片、控制电路、存储器、I/O接口等等.硬件设计时,应考虑留有充分余量,电路设计力求无误,因为在系统调试中不易修改硬件结构.如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示部分、电源部分、晶振部分、按键部分等组成.1、单片机最小系统——AT89C51.AT89C51是一种带8K字节闪烁可编程可擦除只读存储器地低电压,高性能CMOS8位微处理器,俗称单片机.时钟电路由一个12MHZ地石英晶体振荡器和两个22pF地地电容组成振荡电路和分频电路,为单片机提供内部时钟.复位电路采用上电复位和按键复位结合地方式对电路进行复位,主要是通过RST引脚送入单片机.如图3. 1:图3.1 89C51单片机图2、 LED数码管显示模块本系统利用6位LED数码管显示时间,共阴极结构.LED数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应地引脚送入低电平.图3.2 LED数码管地数值表及其引脚图3、晶振模块:下图所示为时钟电路原理图,在A T89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2.而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定地自激振荡器.时钟电路产生地振荡脉冲经过触发器进行二分频之后,才成为单片机地时钟脉冲信号.图3.3 晶振部分电路图4、按键模块:本设计中主要有8 个控制按键,按键功能为:(1)、P1.0键位为秒复位键,当使用时,使秒所显示数据复位.回到0 0;(2)、P1.1键位为分钟加“1”;(3)、P1.2键位为小时加“1”;(4)、P1.3键位为切换日期和时间;(5)、P1.4键位为天数加“1”;(6)、P1.5键位月份加“1”;(7)、P1.6键位为年份加“1”;(8)、P1.7为清零开关,当功能切换为日期显示时,P1.7键位为日期复位.图3.4 独立按键部分电路图四、软件设计:1、Protues软件地介绍:Proteus 软件所提供了30多个元件库,数千种元件.元件涉及到数字和模拟、交流和直流等.在Proteus软件包中,不存在同类仪表使用数量地问题.Proteus还提供了一个图形显示功能,可以将线路上变化地信号,以图形地方式实时地显示出来,其作用与示波器相似但功能更多.提供软件调试功能.在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等地当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方地软件编译和调试环境,如Keil C51 uVision2等软件.具有强大地原理图绘制功能.总之,该软件是一款集单片机和SPICE分析于一身地仿真软件,功能极其强大.在protues绘制好原理图后,调入已编译好地目标代码文件:*.HEX,可以在protues地原理图中看到模拟地实物运行状态和过程.用Protues软件进行仿真,其仿真地电路图如图4.1所示仿真设计图如下:图4.2 .1 仿真电路图2、程序设计流程图根据所编写地C语言程序,画出如下所示地流程图,程序按照流程图地步骤运行.图4.2.1 主程序流程图图4.2.2时间处理子程序图图4.23键盘扫描程序流程图3、软件仿真结果经过仿真,得到要求中地结果,如图所示:图4.3.1清零结果图图4.3.2日期复位结果图图4.3.3秒复位结果图五、设计总结我们电气工程机自动化专业地学生学习单片机原理及接口技术课程,配套地开设课程设计.我们三个班地同学在一起进行了一次单片机地课程设计地实训,实训地时间为一个周,在这个周地实训中,我们通过本课程设计明白了这样地课程是培养学生地主专业课,是培养现代化人才地重要技术之一.单片机地课程设计是学习单片机理论地重要实践环节,在单片机地实验课程基础上,我们通过课程地设计和学习,使我们增进对单片机地感性认识,加深对单片机理论地地理解,使我们掌握单片机地内部功能模块地应用,掌握单片机地接口功能和扩展地应用,掌握一些特殊器件地使用方法,学习编辑综合地程序.使我们了解和掌握单片机应用系统地硬件和软件地设计地方法和调试地过程.充分发挥我们地主观能动性,更好地激发了我们地学习激情和学习地兴趣.这次试训培养了我们大学生能主动利用芯片解决工程上实际地问题地意识,培养了我们地工程实践能力、实际动手能力和自我学习地能力.使我们为完成从实际工程立题、调研、方案论证、方案实施、系统地调试、编写使用说明书等调研过程地基本训练,为今后在相关地领域中从事和单片机有关地设计、开发、应用等工作打下扎实地基础.六、附录用C语言编写地程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,/*定义并初始化变量*/0x80,0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF}。
七段共阴数码管电子钟PLC程序设计原理控制要求:1.用四个七段数码管分别显示“时十位”、“时个位”、“分十位”和“分个位”。
2.用两个发光二极管显示“秒闪烁”。
3.有“预置”和“校对”时间功能。
I/O分配:X0—运行开关,X1—预置按钮;Y0—A,Y1—B,Y2—C,Y3—D,Y4—E,Y5—F,Y6—G;Y7—“秒闪烁”指示;Y13—“时十位”显示,Y12—“时个位”显示,Y11—“分十位”显示,Y10—“分个位”显示。
COM端接线:COM1和COM2(Y0—Y7所对应的公共端)接24V直流电源“+”极,COM3(Y10—Y13所对应的公共端)和COM接24V电源“-”极。
一、总体设计思想为了减少输出点数和接线,可以将四个共阴数码管的阳极都用Y0—Y6来驱动,但让其依次轮班接通;四个数码管的阴极分别用Y10—Y13来同步控制其接通“-”极的时间,以期达到四个数码管轮番显示的目的。
二、具体设计过程1.用两个定时器T0和T1产生秒脉冲,用Y7输出。
2.用计数器C0将秒脉冲变成分脉冲。
3.用位左移指令[SFTL]形成分个位左移码。
4.用位左移指令[SFTL]形成分十位左移码。
5.用位左移指令[SFTL]形成时个位左移码。
6.用位左移指令[SFTL]形成时十位左移码。
7.用位左移指令[SFTL]安排四个数码管轮番接通。
8.将四个位左移码分别译成七段数码管的字显示码,并考虑四个数码管轮番接通问题。
9.将字显示码用Y0—Y6输出。
个位编码表由编码表可得逻辑表达式:M40=(M1+M3+M4+M6+M7+M8+M9+M10)M100M41=(M1+M2+M3+M4+M5+M8+M9+M10)M100M42=(M1+M2+M4+M5+M6+M7+M8+M9+M10)M100M43=(M1+M3+M4+M6+M7+M9)M100M44=(M1+M3+M7+M9)M100M45=(M1+M5+M6+M7+M9+M10)M100M46=(M3+M4+M5+M6+M7+M9+M10)M100M60=(M21+M23+M24+M26+M27+M28+M29+M30)M012M61=(M21+M22+M23+M24+M25+M28+M29+M30)M012M62=(M21+M22+M24+M25+M26+M27+M28+M29+M30)M012 M63=(M21+M23+M24+M26+M27+M29)M012M64=(M21+M23+M27+M29)M012M65=(M21+M25+M26+M27+M29+M30)M012M66=(M23+M24+M25+M26+M27+M29+M30)M012十位编码表由编码表可得逻辑表达式:M50=(M13+M15+M16+M18)M101M51=(M13+M14+M15+M16+M17)M101 M52=(M13+M14+M16+M17+M18)M101 M53=(M13+M15+M16+M18)M101M54=(M13+M15)M101M55=(M13+M17+M18)M101M56=(M15+M16+M17+M18)M101M70=(M33+M35)M103M71=(M33+M34+M35)M103M72=(M33+M34)M103M73=(M33+M35)M103M74=(M33+M35)M103M75=M33*M103M76=M35*M103 输出:Y0=M40+M50+M60+M70Y1=M41+M51+M61+M71Y2=M42+M52+M62+M72Y3=M43+M53+M63+M73Y4=M44+M54+M64+M74Y5=M45+M55+M65+M75Y6=M46+M56+M66+M76AF G BE CD七段共阴数码管。
数字钟设计报告1. 引言数字钟是一种常见的显示时间的设备,它采用数字显示方式,能够准确地显示当前的时间。
本文将介绍数字钟的设计过程、原理以及制作方法。
2. 设计原理数字钟的设计原理基于电子时钟的概念。
它由一个时钟芯片、数字显示模块和控制电路组成。
主要分为以下几个模块:2.1 时钟芯片时钟芯片是整个数字钟的核心部件,负责产生和维护精确的时间。
它通常采用晶振来生成时钟脉冲,并且能够根据输入的时间信号进行计数和更新。
2.2 数字显示模块数字显示模块用于将时间以数字形式显示出来。
它通常由七段数码管组成,每个数码管可以显示一个数字0-9。
通过控制每个数码管的亮灭,可以实现显示任意的数字。
2.3 控制电路控制电路负责调度时钟芯片和数字显示模块的工作,并且根据需要进行相应的控制操作。
它通常包括时钟信号的分频电路、扫描控制电路等。
3. 设计步骤数字钟的设计步骤如下:3.1 确定需求首先需明确数字钟的需求,包括显示的格式、功能要求等。
3.2 选取器件根据需求选取合适的时钟芯片、数字显示模块和控制电路。
3.3 连接器件根据器件的规格书和引脚图,将时钟芯片、数字显示模块和控制电路按照正确的方式连接起来。
3.4 编写控制程序根据选取的器件,编写相应的控制程序,实现时间的计数、显示和控制功能。
3.5 测试和校准完成连接和编程后,进行测试和校准,确保数字钟的工作稳定和准确。
4. 制作过程数字钟的制作过程包括如下几个步骤:4.1 准备材料和工具准备时钟芯片、数字显示模块、控制电路板、面板等材料和工具。
4.2 搭建电路根据设计步骤中的连接方法,将时钟芯片、数字显示模块和控制电路进行连接和焊接。
4.3 安装面板将连接好的电路板安装在面板上,同时安装按钮、开关等控制元件。
4.4 调试和测试对制作好的数字钟进行调试和测试,确保其工作正常。
4.5 完善和装饰对数字钟进行外观美化,例如涂漆、装饰图案等,使其更加美观。
5. 总结通过以上步骤,我们可以完成一个基本的数字钟设计和制作。
七段数码管课程设计一、课程目标知识目标:1. 理解七段数码管的基本结构及其工作原理;2. 掌握七段数码管的电路连接方式,能够正确进行电路图的绘制;3. 学会使用七段数码管进行数字的显示,并了解其显示原理。
技能目标:1. 能够运用所学知识,设计并搭建简单的七段数码管电路;2. 培养学生动手实践能力,学会使用基本电子元件进行电路连接;3. 培养学生的问题分析能力和团队合作能力,通过实际操作,解决电路连接和显示过程中的问题。
情感态度价值观目标:1. 培养学生对电子技术的兴趣和热情,激发学习动力;2. 培养学生的创新意识,鼓励他们在实践中积极探索,勇于尝试;3. 培养学生的责任心,让他们明白学习电子技术对国家和未来发展的重要意义。
课程性质:本课程为电子技术实践课程,结合理论知识,强调学生的动手实践能力。
学生特点:七年级学生对电子技术有一定的兴趣,好奇心强,喜欢动手操作,但理论知识掌握程度不一。
教学要求:结合学生特点,注重理论与实践相结合,以学生为主体,教师为主导,引导学生在实践中掌握知识,培养技能,提高素养。
通过课程目标的分解,使学生在课程学习中获得具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容根据课程目标,本章节教学内容主要包括以下几部分:1. 七段数码管基础知识:介绍七段数码管的结构、工作原理及其特点;- 教材章节:第二章第二节“显示器件简介”2. 电路连接与绘制:讲解如何将七段数码管与微控制器连接,并绘制相应的电路图;- 教材章节:第三章第一节“电路图的绘制与识别”3. 数字显示原理:阐述七段数码管显示数字的原理,包括动态扫描和静态显示;- 教材章节:第二章第三节“数字显示技术”4. 实践操作:指导学生动手搭建七段数码管电路,实现数字显示;- 教材章节:第五章“电子技术实践”5. 电路调试与故障排查:教授学生如何对搭建的电路进行调试,排查并解决问题;- 教材章节:第六章第二节“电路调试与故障排查”教学大纲安排:第一课时:介绍七段数码管基础知识,引导学生认识显示器件;第二课时:讲解电路连接与绘制,让学生学会如何将七段数码管与微控制器连接;第三课时:分析数字显示原理,让学生了解七段数码管的显示方式;第四课时:进行实践操作,指导学生动手搭建电路,实现数字显示;第五课时:进行电路调试与故障排查,培养学生的问题解决能力。
微机原理与接口技术课程设计报告2009-2010学年第二学期设计题目: LED七段数码管数字钟小组成员:杜晓杰白杨娜陈迪所学专业:计算机科学与技术所在班级:计科061指导教师:高国红完成时间: 2010-06-06目录内容提要 (2)一、题目设计的目的和意义 (3)1、题目的意义 (3)2、系统的主要功能: (3)3、设计思路: (3)二、设计所用器件 (4)1、七段数码管显示 (4)2、8253芯片的内部结构及引脚 (5)3、可编程并行接口8255A (6)4、可编程中断控制器8259A (7)三、硬件连接图: (8)四、软件设计流程及描述 (9)1、主程序流程图: (9)2、定时中断服务子程序框图如下: (9)3、中断处理过程 (11)五、心得体会 (12)附录一:参考文献 (12)附录二:源程序代码 (12)内容提要选用8253的计数器2进行100ms的定时,其输出 OUT2与8259的IRQ7相连,当定时到100 ms时产生一个中断信号,在中断服务程序中进行时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号,时、分的数值通过对8255的编程可送到七段数码管上显示。
一、题目设计的目的和意义1、题目的意义掌握8255、8259、8253芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8088微处理器完成了电子钟的小系统的独立设计。
同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
2、系统的主要功能:(1).设计并完成LED七段数码管数字钟电路。
(2).数字钟显示格式为:HH: MM。
(3).具有通过读内存能够调整时、分、秒的功能。
3、设计思路:(1)在主程序中要分别对8253、8259、8255进行初始化编程,8253的计数器2可在方式0下工作。
第1篇一、实验背景数码管是一种常用的显示器件,它可以将数字、字母或其他符号显示出来。
数码管广泛应用于各种电子设备中,如计算器、电子钟、电子秤等。
本实验旨在通过实践操作,让学生了解数码管的工作原理,掌握数码管的驱动方法,以及数码管在电子系统中的应用。
二、实验原理1. 数码管类型数码管分为两种类型:七段数码管和液晶数码管。
本实验主要介绍七段数码管。
七段数码管由七个发光二极管(LED)组成,分别代表七个笔画。
当七个LED中的某个或某几个LED点亮时,就可以显示出相应的数字或符号。
根据发光二极管的连接方式,七段数码管可分为共阳极和共阴极两种类型。
2. 数码管驱动方式(1)静态驱动静态驱动是指每个数码管独立驱动,每个数码管都连接到单片机的I/O端口。
这种方式下,数码管显示的数字或符号不会闪烁,但需要较多的I/O端口资源。
(2)动态驱动动态驱动是指多个数码管共用一组I/O端口,通过控制每个数码管的扫描时间来实现动态显示。
这种方式可以节省I/O端口资源,但显示的数字或符号会有闪烁现象。
3. 数码管显示原理(1)共阳极数码管共阳极数码管的特点是七个LED的阳极连接在一起,形成公共阳极。
当要显示数字时,将对应的LED阴极接地,其他LED阴极接高电平,即可显示出相应的数字。
(2)共阴极数码管共阴极数码管的特点是七个LED的阴极连接在一起,形成公共阴极。
当要显示数字时,将对应的LED阳极接地,其他LED阳极接高电平,即可显示出相应的数字。
4. 数码管驱动电路(1)BCD码译码驱动器BCD码译码驱动器是一种将BCD码转换为七段数码管所需段码的电路。
常用的BCD码译码驱动器有CD4511、CD4518等。
(2)74HC595移位寄存器74HC595是一种8位串行输入、并行输出的移位寄存器,常用于数码管的动态驱动。
它可以将单片机输出的串行信号转换为并行信号,驱动数码管显示。
三、实验目的1. 了解数码管的工作原理和驱动方式。
微机原理与接口技术实验报告实验名称: 七段数码管姓名:学号:专业班级:指导老师:实验日期2012年11月24日一:实验目的掌握数码管显示数字的原理二:实验内容动态显示:按图23连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255 C口的PC1,PC0。
编程在两个数码管上显示“56”三:硬件电路四:源程序ASM程序data segmentioport equ 0d400h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart: m ov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80hout dx,almov di,offset buffer1 ;设di为显示缓冲区loop2: mov bh,02lll: mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov al,0mov dx,io8255aout dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay: loop delay ;延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,0ffhmov ah,06int21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21hcode endsend startCPP程序/************************//* 七段数码管(二)*//************************/#include<stdio.h>#include<conio.h>#include"ApiEx.h"#pragma comment(lib,"ApiEx.lib")void main(){printf("--------------------EXP11_5_LED_2---------------------\n");printf("1. 8255 (PA0-PA6) === LED (a-g)\n");printf("2. 8255 (PC0-PC1) === LED (S0-S1)\n");printf("3. I/O (288-28F) === 8255 (CS)\n");printf("4. TPC (GND) === LED (dp)\n");printf("Press any key to begin!\n\n");getch();if(!Startup()) /*打开设备*/{printf("ERROR: Open Device Error!\n");return;}printf("Please enter any key return!");do{PortWriteByte(0x28b,0x82);/*设置8255的A口C口均为输出*/PortWriteByte(0x288,0x6d);PortWriteByte(0x28a,0x02);/*显示十位5*/Sleep(1000);PortWriteByte(0x288,0x7d);PortWriteByte(0x28a,0x01);/*显示个位6*/Sleep(1000);}while(!kbhit());PortWriteByte(0x28a,0x00);Cleanup(); /*关闭设备*/}五:实验难点与重点掌握数码管显示数字的原理以及连接数码管显示电路也是一个难点,给我们的实验过程造成很大困扰。
实验微机原理——七段数码管实验目的:通过学习和实验七段数码管的使用原理,了解并掌握七段数码管的基本工作模式和使用方法。
实验器材:1. Arduino开发板2.七段数码管模块3.杜邦线4.面包板实验步骤:1. 搭建电路连接:将Arduino开发板与七段数码管模块通过杜邦线连接起来,确保连接无误并固定在面包板上。
2. 编写Arduino代码:打开Arduino开发环境,编写控制七段数码管的代码。
3. 引入库文件:在代码开头引入SevenSegmentTM1637库文件,该库文件提供了七段数码管的控制函数。
4.定义数码管引脚:根据实际连接情况,在代码中定义数码管的引脚,包括时钟引脚CLK和数据引脚DIO。
5. 初始化数码管:在Arduino的setup(函数中初始化数码管,设置时钟引脚和数据引脚。
6.控制数码管显示:通过调用库文件提供的函数,控制数码管显示数字、字母或符号。
7.实验验证:a.显示数字:通过调用库文件提供的显示函数,将数字显示在数码管上,并观察结果。
b.显示字母:同样通过调用显示函数,可以将字母显示在数码管上。
c.显示符号:还可以显示一些符号,如加号、减号、等号等。
8.实验总结:总结实验结果,并进一步思考如何扩展和应用七段数码管。
实验原理:七段数码管是一种常见的显示器件,由七个LED组成。
每个LED对应一个线段,形成数字0-9和字母A-F等字符。
通过控制每个LED的亮灭,可以显示不同的字符。
数码管一般有两个主要引脚,时钟引脚CLK和数据引脚DIO。
时钟引脚用于控制刷新速度,数据引脚用于传输要显示的字符信息。
实验结果:经过实验,可以观察到七段数码管正常显示数字、字母和符号。
通过改变显示内容和调整刷新速度,可以实现不同的显示效果。
实验思考:除了显示基本字符外,七段数码管还可以显示其他内容吗?如何扩展七段数码管的显示能力?可以通过什么方式调整显示的亮度和刷新速度?实验小结:通过这个实验,我了解了七段数码管的基本原理和使用方法。
南通大学计算机科学与技术学院微机原理课程设计报告书课题名 LED七段数码管数字钟_____________________________班级_________电126___________ _姓名________孔晓鹏______ ________指导教师梁惺彦日期 2014.2.24 ~ 2014.2.28课程设计报告书格式提纲如下:目录1 设计目的2 设计内容3 设计要求4 设计原理与硬件电路5 程序流程图6 程序代码7 程序及硬件系统调试情况该部分记录测试数据、调试结果及调试过程中遇到的主要问题和解决办法。
8 设计总结与体会9 参考文献格式如下:期刊文献格式:[序号]作者.文目[J].期刊名,年,卷号(期数):起止页码图书文献格式:[序号]作者.书名[M].出版地:出版者,年份,起止页码[1]M. V. Berry and M. Robnik,Statistics of energy levels without time reversal symmetry:Aharonov-Bohm chaotic billiards[J].J. Phys. A,1986,19:649-668[2]张茂军.虚拟现实系统[M].北京:科学出版社,2001,114-169[3]王传昌,王昌传.高分子化工的研究对象[J].天津大学学报,1997,53(3):1-7目录1、设计目的------------------------------------------------------错误!未定义书签。
2、设计内容------------------------------------------------------错误!未定义书签。
3、设计要求------------------------------------------------------错误!未定义书签。
4、设计原理与硬件原理--------------------------------------------错误!未定义书签。
(1)七段数码管的显示-----------------------------------------错误!未定义书签。
(2)键盘扫面显示---------------------------------------------错误!未定义书签。
(3)8253计数器和8259中断-----------------------------------错误!未定义书签。
(4)硬件连接-------------------------------------------------错误!未定义书签。
5、程序流程图----------------------------------------------------错误!未定义书签。
(1)七段数码管的显示-----------------------------------------错误!未定义书签。
(2)键盘扫描显示---------------------------------------------错误!未定义书签。
(3)定时器设计----------------------------------------------错误!未定义书签。
6、程序代码-----------------------------------------------------错误!未定义书签。
7、程序及硬件系统调试情况---------------------------------------错误!未定义书签。
8、设计总结与体会-----------------------------------------------错误!未定义书签。
9、参考文献 -----------------------------------------------------错误!未定义书签。
一、设计目的掌握8255、8259、8253芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8088微处理器完成了电子钟的小系统的独立设计。
同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
二、设计内容本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在对秒计数得到分和小时值,并送入显示缓冲区,用总线方式控制数码管显示。
同时,利用实验箱提供的键盘扫描电路和显示电路来调整时、分、秒。
三、设计要求1.数字钟显示格式为:HH:MM:SS。
2.具有通过键盘能够调整时、分、秒的功能。
3.设计电路并在实验台上连接线路四、设计原理与硬件原理1.设计原理图1:八段数码LED显示电路本设计用到了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
8位段码输出地址为0X004H,位码输出地址为0X002H。
此处X是由KEY/LED CS 决定,参见地址译码。
做键盘和LED 实验时,需将KEY/LED CS 接到相应的地址译码上。
以便用相应的地址来访问。
例如,将KEY/LED CS 接到CS0上,则段码地址为08004H,位码地址为08002H。
2、硬件原理(1)七段数码管显示(共阴极)图2:七段数码管(2)键盘扫描显示图3. 键盘扫描电路实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。
向列扫描码地址逐列输入低电平,然后从行码地址读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的时延,防止键盘抖动。
(3)8253计数器和8259中断图4. 8253计数器扩展电路图5. 8259中断扩展电路(4)硬件连接8253用定时器/计数器1,8253片选接CS4,地址为0C000H,8253时钟源CLK1接分频电路的F/64输出,频器的Fin接4MHz时钟,8253的GATE1接VCC;8259中断INT0接8253的OUT1,片选接CS5,地址为0D000H。
显示电路的KEY/LED CS 接CS0,地址为08000H。
5、程序流程图(1)七段数码管的显示(2)键盘扫描显示(3)定时器设计图8:读键输入子程序框图 图9:定时中断服务子程序框图6、程序代码CONTROL equ 0c003h COUNT0 equ 0c000h COUNT1 equ 0c001h COUNT2 equ 0c002hmd8255 equ 82h ; 8255 工作方式PA8255 equ 0A000h ; 8255 PA 口输出地址 CTL8255 equ 0a003h ; 8255 控制口地址 IN_KEY equ 08001h ; 键盘读入口OUTBIT equ 08002h ; 位控制口 OUTSEG equ 08004h ; 段控制口ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4 ICW2 equ 00100000b ; 中断号为20HICW4 equ 00000001b ; 工作在8086/88 方式 OCW1 equ 11111110b ; 只响应INT0 中断 CS8259A equ 0d000h ; 8259地址CS8259B equ 0d001hdata segmentCNT db 0Hour db 0Minute db 0Second db 0LEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)dinglin db 6 dup(?)LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h KeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hdata endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:call soundmov 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 ; 关所有八段管retDisplayLED endpTestKey proc nearmov dx, OUTBITmov al, 0out dx, al ; 输出线置为0mov dx, IN_KEYin al, dx ; 读入键状态not aland al, 0fh ; 高四位不用retTestKey endpGetKey proc nearmov ch, 00100000bmov cl, 6KLoop:mov dx, OUTBITmov al, ch ; 找出键所在列not alout dx, alshr ch, 1mov dx, IN_KEYin al, dxnot aland al, 0fhjne Goon_ ; 该列有键入dec cljnz KLoopmov cl, 0ffh ; 没有键按下, 返回0ffh jmp Exit1Goon_:dec clshl cl, 2 ; 键值= 列X 4 + 行mov ch, 4LoopC:test al, 1jnz Exit1shr al, 1inc cldec chjnz LoopCExit1:mov dx, OUTBITmov al, 0out dx, almov ch, 0mov bx, offset KeyTableadd bx, cxmov al, [bx] ; 取出键码mov bl, alWaitRelease:mov dx, OUTBITmov al, 0out dx, al ; 等键释放mov ah, 10call Delaycall TestKeyjne WaitReleasemov al, blretGetKey endpIEnter proc nearpush axpush dxcall soundinc Secondmov al, Secondcmp al, 60jne Exitmov Second, 0inc Minutemov al, Minutecmp al, 60jne Exitmov Minute, 0inc Hourmov al, Hourcmp al, 24jne Exitmov Hour, 0Exit:mov dx, CS8259Amov al, 20h ; 中断服务程序结束指令out dx, alpop dxpop axiretIEnter endpIInit procmov dx, CS8259Amov al, ICW1out dx, almov dx, CS8259Bmov al, ICW2out dx, almov al, ICW4out dx, almov al, OCW1out dx, almov dx,CTL8255mov al,80Hout dx,alretIInit endpStart proc nearmov ax, datamov ds, axmov ax,PA8255mov al,01Hout dx,almov LEDBuf, 03fh ; 显示00.00.00mov LEDBuf+1, 0bfhmov LEDBuf+2, 03fhmov LEDBuf+3, 0bfhmov LEDBuf+4, 03fhmov LEDBuf+5, 03fhmov Hour, 0mov Minute, 0mov Second, 0climov ax, 0mov ds, axmov al, 76h; 01110010Bmov dx, CONTROLout dx, almov ax, 62500mov dx, COUNT1out dx, al ; 计数器低字节mov al, ahout dx, al ; 计数器高字节mov al, MD8255mov dx, CTL8255out dx, almov bx, 4*ICW2 ; 中断号mov ax, codeshl ax, 4 ; x 16add ax, offset IEnter ; 中断入口地址mov [bx], axmov ax, 0inc bxinc bxmov [bx], ax ; 代码段地址为0 call IInitmov ax, datamov ds, axmov CNT, 0 ; 计数值初始为0 mov al, CNTstiLP: ; 等待中断,并计数。