实验六 键盘接口和七段数码管的控制实验
实验六键盘显示控制实验

实验六键盘显示控制实验一、实验目的1.掌握8279键盘显示电路的基本功能及编程方法。
2 •掌握一般键盘和显示电路的工作原理。
3.进一步掌握定时器的使用和中断处理程序的编程方法。
二、实验内容1. 8237键盘显示电路的基本原理本实验系统中把键盘显示电路设计在一块扩展电路板上,用一根20芯的扁平电缆与实验台上扩展插头J7相连。
小键盘上每按一个键,6位数码管上显示出相应字符,其对应关系如下表6-1。
2.设计电子时钟利用实验台上提供的定时器8253和扩展板上提供的8279以及键盘和数码管显示电路,设计一个电子钟。
由8253中断定时,小键盘控制电子钟的启停及初始值的预置。
电子钟显示格式如下:7407 74073fe2feITfe3B i BKb_6B B/B HEJRR QcCRRnorJ R --CDV44K ccvfLT OBTkK TUQEO -LIUO_HEEZM —ZuB4U2U2U lu B CCVCCVCDD CDDXX . XX . XX 由左向右分别为时、分、秒 并具有如下功能:① C 键:清除,显示00. 00. 00。
② G 键:启动,电子钟计时。
③ D 键:停止,电子钟停止计时④ P 键:设置时、分、秒值。
输入时依次为时、分、秒,同时应有判断输入 错误的能力,若有错,则显示:E ----------- 。
此时按P 键重新输入预置值。
⑤ E 键:程序退出,返回DOS 。
3.硬件电路图硬件电路图如图6-1。
图6-1键盘显示控制电路图4. 硬件连线100x87545275452754526 722864H11做电子钟实验时,实验台上8253的CLK0接1MHz,GATE0和GATE1接入口清显示+5V , OUTO 接 CLK1 , OUT1 接 IRQ 。
CS 接 280H~287H 。
5 •编程提示(1)显示按键程序框图显示铵键程序框图如图 6-2 (a )主程序 框图,(b )键盘显示子程序框图,(c )显示子 程序框图。
实验六 七段LED数码管显示实验

实验六七段LED数码管显示实验
一、实验目的
学习LED显示器的使用方法。
二、实验设备
MUT—Ⅲ型实验箱、8086CPU模块。
三、实验内容
输出LED的位选码和段选码,在七段LED显示器上循环显示8字。
四、实验原理介绍
显示器的段选码由8255A的PA口提供,显示器的位扫描信号由8255A的PB 口提供给共阴极LED数码管的公共端。
五、实验步骤
1、实验连线
将LED数码管右侧的短路快取下。
8255A的PA0~PA7分别连LED-A~LED-DP,8255A的PB0~PB5分
别连接LED1~LED6,8255CS连CS0。
2、编写调试并运行程序,在LED显示器上显示8字并循环,调
整延时程序,观察运行结果。
六、实验提示
1、各端口地址:
PA口:04A0H
PB口:04A2H
PC口:04A4H
控制口:04A6H
2、LED显示的方法为动态显示。
七、实验报告要求
1、画出程序框图。
2、编写并整理经过运行,证明是正确的源程序,并加以注释。
7段数码管控制接口设计

七、实验参考程序
注意:q的位数根据具体 时钟确实,7段显示译码 接线以具体情况为准。
八、仿真结果
九、实验报告要求
1. 整理实验结果,填写实验报告。 2.小结实验心得体会。 3.回答思考题:
还可以有几种方法实现试验要求?
将外部时钟进行分频处理(编写分频功能模 块);
使用分频后的时钟进行计数,得到数码管输出 控制的计数状态;
当程序下载成功时,7段数码管依次分时显示递 增或递减数据。
试验方框图如下图所示:
clk
分 分 分 divclk 分 分 分 counter 分 分 分
Y[6..0]
rst
分分分分分分分分
实验三:利用可编程逻辑器件 进行7段数码管控制接口的设计
实验目的 1、 通过实验复习可编程逻辑器件开发软件的设 计操作流程; 2、掌握七段数码管的功能和设计方法; 3、掌握用硬件描述语言的方法设计七段数码管 控制模块; 4、利用用可编程逻辑器件进行7段数码 管定时更新。
三、实验器材
1.台式计算机 1台。 2.可编程逻辑器件实验箱1套。 3.下载电缆一套。 4.示波器一台。 5.万用表1台
六、实验内容和步骤
设计输入: 1、启动Quartus软件; 2、新建工程; 3、根据设计类型选择新建图形或语言文件; 4、根据讲课内容及实验指导书中介绍的方法完
成整个实验的设计输入。
电路的编译与适配
1、选择芯片型号; 2、编译生成 * •pof文件(CPLD)及* •sof文 件(FPGA); 3、分配引脚; 4、电路仿真与时序分析; 5、对芯片进行编程下载,直到硬件实现。
掌握计数器的功能
掌握用图形和语言相结合的方法设计计数器, 并进行软件功能仿真和固件代码下载,最后 在实验箱实现设计的功能。
七段数码管实验

;段码
LOOP2: OV ADD MOV MOV OUT MOV MOV OUT PUSH MOV
BH,02 BYTE PTR BZ,BH DI DI DI, BZ BL,[DI] ;bl为要显示的数 DI BH,0 SI,OFFSET LED ;置led数码表偏移地址为SI SI,BX ;求出对应的led数码 AL,BYTE PTR [SI] DX,IO8255B ;自8255B的口输出 DX,AL AL,BYTE PTR BZ ;使相应的数码管亮 DX,IO8255A DX,AL AX AX,05
MOV
AH,01 ;从键盘接收字符 INT 21H CMP AL,'0' ;是否小于0 JL EXIT ;若是则退出 CMP AL,'9' ;是否大于9 JG EXIT ;若是则退出 SUB AL,30H ;将所得字符的ASCII码减30H MOV BX,OFFSET LED ;bx为数码表的起始地址 XLAT ;求出相应的段码 MOV DX,IO8255B ;从8255的A口输出 OUT DX,AL JMP SSS ;转SSS EXIT: MOV AH,4CH ;返回 INT 21H CODE ENDS END START
LED2.ASM
DATA SEGMENT IOPORT EQU 0A400H IO8255A EQU IOPORT+0A0H IO8255B EQU IOPORT+0A2H IO8255CON EQU IOPORT+0A6H LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH BUFFER1 DB 5,6 ;存放要显示的个位和十位 BZ DW ? ;位码 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,IO8255CON ;将8255设为B,A口输出 MOV AL,80H OUT DX,AL MOV DI,OFFSET BUFFER1 ;设di为显示缓冲区
计数器7段数码管控制接口技术课程设计报告材料

《EDA技术综合设计》课程设计报告报告题目:计数器7段数码管控制接口技术作者所在系部:作者所在专业:作者所在班级:作者姓名:作者学号:指导教师姓名:完成时间:内容摘要掌握VHDL语言基本知识,并熟练运用VHDL语言来编写程序,来下载实践到硬件上,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
利用VHDL语言设计一个七段数码管控制引脚,在时钟信号的控制下,使6位数码管动态刷新显示十进制计数器及其进位,十二进制计数器,四位二进制可逆计数器,六十进制计数器的计数结果,这期间需要seltime分频器来动态的给各个计数器分配数码管,并显示数字的变化。
关键词:VHDL语言编程七段数码管控制引脚芯片目录一概述 (1)二方案设计与论证 (1)三单元电路设计与参数计算 (1)3.1数码管译码器 (1)3.2 十进制计数器 (2)3.3六十进制计数器 (3)3.4四位二进制可逆计数器 (5)3.5时间数据扫描分时选择模块 (6)3.6顶层文件 (8)四总的原理图 (9)五器件编程与下载 (9)六性能测试与分析(要围绕设计要求中的各项指标进行) (10)七实验设备 (10)八心得体会 (10)九参考文献 (10)课程设计任务书一、概述设计一个共阴7段数码管控制接口,在硬件时钟电路的基础上,采用分频器,输出一个1S的时钟信号。
一个带使能输入、进位输出及同步清0的增1十进制计数器。
一个带使能输入及同步清0的六十进制同步加法计数器和一个四位二进制可逆计数器。
要求:在时钟信号的控制下,使6位数码管动态刷新显示上述计数器的计数结果。
二、方案设计与论证首先VHDL语言编写底层文件和三个计数器的程序,再编写分频器和数码管的程序,最后用例化语句编写顶层文件,分别都调试在确认无误后把顶层文件下载到试验箱,连接导线,完成后实现在时钟信号的控制下,6位数码管动态刷新显示三个计数器的技术结果。
三、单元电路设计1.数码管译码器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity deled isport(num:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0));end deled;architecture fun of deled isbegin-- abcdefgled<="1111110"when num="0000"else "0110000"when num="0001"else"1101101"when num="0010"else"1111001"when num="0011"else"0110011"when num="0100"else"1011011"when num="0101"else"1011111"when num="0110"else"1110000"when num="0111"else"1111111"when num="1000"else"1111011"when num="1001"else"1110111"when num="1010"else"0011111"when num="1011"else"1001110"when num="1100"else"0111101"when num="1101"else"1001111"when num="1110"else"1000111"when num="1111";end fun;原理图2.十进制计数器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,clr,en:in std_logic;co:out std_logic;q:buffer std_logic_vector(3 downto 0)); end cnt10;architecture behave of cnt10 isbeginprocess(clk,clr,en)beginif(en='0')then q<="0000";elsif(clk'event and clk='1')thenif(clr='1')then q<="0000";elsif(q=9)then q<="0000";co<='1';else q<=q+1;co<='0';end if;end if;end process;end behave;原理图仿真波形图3.六十进制计数器程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt60 ISPORT(clk,clr,en:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END cnt60;ARCHITECTURE behave OF cnt60 ISSIGNAL qh,ql:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(clk,clr,en)BEGINIF(en='1')THEN ql<="0000";qh<="0000";ELSIF(clk'event and clk='1')THENIF(clr='1')THEN ql<="0000";qh<="0000";ELSIF(ql=9)THEN ql<="0000";IF(qh=5)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;q<=qh&ql;END PROCESS;END behave;原理图波形图4.四位二进制可逆计数器程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kn4 isport(clk,clr,plus_sub:in std_logic;q:buffer std_logic_vector(3 downto 0));end kn4;architecture behave of kn4 isbeginprocess(clk,clr,plus_sub)beginif(clk'event and clk='1')thenif(clr='1')then q<="0000";elsif(plus_sub='1')thenif(q=15)then q<="0000";else q<=q+1;end if;elsif(plus_sub='0')thenif(q=0)then q<="1111";else q<=q-1;end if;end if;end if;end process;end behave;原理图波形图5.时间数据扫描分时选择模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk,reset,ci:in std_logic;Kn4,cnt10:in std_logic_vector(3 downto 0);cnt60:in std_logic_vector(7 downto 0);daout:out std_logic_vector(3 downto 0);dp:out std_logic;sel:out std_logic_vector(2 downto 0));end seltime;architecture fun of seltime issignal count:std_logic_vector(2 downto 0);beginsel<=count;process(clk,reset)beginif(reset='0')thencount<="000";elsif(clk'event and clk='1')thenif(count>="101")thencount<="000";elsecount<=count+1;end if;end if;case count iswhen"000"=>daout<=cnt10(3 downto 0);dp<='0'; when"001"=>daout(3 downto 1)<="000";daout(0)<=ci;dp<='0'; when"010"=>daout<=kn4(3 downto 0);dp<='0'; when"011"=>daout<=cnt60(7 downto 4);dp<='0'; when others=>daout<=cnt60(3 downto 0);dp<='0'; end case;end process;end fun;原理图6.顶层文件程序library ieee;use ieee.std_logic_1164.all;entity ss_top isport(clk,clr,en,plus_sub,clkdsp:in std_logic;a,b,c,d,e,f,g,dpout:out std_logic;sel:out std_logic_vector(2 downto 0));end ss_top;architecture one of ss_top iscomponent cnt60port(clk,clr,en:in std_logic;q:out std_logic_vector(7 downto 0));end component;component kn4port(clk,clr,plus_sub:in std_logic;q:buffer std_logic_vector(3 downto 0)); end component;component cnt10port(clk,clr,en:in std_logic;co:out std_logic;q:buffer std_logic_vector(3 downto 0)); end component;component deledPORT(num:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0)); end component;component seltimeport(clk,reset,ci:in std_logic;cnt60:in std_logic_vector(7 downto 0);kn4:in std_logic_vector(3 downto 0);cnt10:in std_logic_vector(3 downto 0);dp:out std_logic;daout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0)); end component;signal cnt60_out:std_logic_vector(7 downto 0);signal kn4_out:std_logic_vector(3 downto 0);signal cnt10_out:std_logic_vector(3 downto 0);signal cnt10_co:std_logic;signal ledout:std_logic_vector(6 downto 0);signal seltime_out:std_logic_vector(3 downto 0);Begina<=ledout(6);b<=ledout(5);c<=ledout(4);d<=ledout(3);e<=ledout(2);f<=ledout(1);g<=ledout(0);u1:deled port map(num=>seltime_out,led=>ledout);u2:cnt10 port map(clk=>clk,clr=>clr,en=>en,co=>cnt10_co,q=>cnt10_out);u3:cnt60 port map(clk=>clk,clr=>clr,en=>en,q=>cnt60_out);u4:kn4 port map(clk=>clk,clr=>clr,plus_sub=>plus_sub,q=>cnt16_out);u5:seltimeport map(clk=>clkdsp,reset=>clr,ci=>cnt10_co,cnt60=>cnt60_out,kn4=>kn4_out,cnt10=>cnt10_out,daout=>seltime_out,dp=>dpout,sel=>sel);end one;四、总的原理图五、器件编程与下载用VHDL语言编译四种计数器的、译码器和分时器的程序,然后把他们用例化语句编译成顶层文件,仿真成功以后下载到试验箱通过数码管显示出结果,试验成功。
实验报告2--7段数码管显示实验

SPI主机实验——7段数码显示一、实验目的1、通过本实验进一步掌握对ARM7.0软件和EasyJTAG仿真器的使用;2、进一步熟悉EasyARM2131开发板硬件结构,掌握各引脚功能和接线;3、掌握SPI主机实验,熟悉该实验程序,并能作出简单的修改并实现其功能;4、在SPI实验中,通过改变实验程序,实现7段数码管和流水灯同时运行的功能。
二、实验仪器装有ADS1.2及EasyJTAG仿真器的电脑一台;ARM7开发板一块。
三、实验原理图4.61 SPI接口控制74HC595图中已经将最高位输出(SQH)连线到LPC2131的SPI接口的MISO0,可用来读回74HC595移位输出的数据。
下图是8路LED控制电路:该实验演示在7段数码管上显示一些字符,字符的字模表存于一数组中,流程图如下图4.62所示。
图4.62 LED数码管显示实验流程图1、特性2、结构SPI总线配置及数据传输3、SPI外设描述4、基本操作5主机操作四、实验内容与结果1、实验程序如下#include "config.h"#define HC595_CS (1 << 29) // P0.29口为74HC595的片选const uint32 LEDS8 = (0xFF << 18); // P1[25:18]控制LED8~LED1,低电平点亮/************************************************************************ ******************************** 函数名称:DelayNS()** 函数功能:长软件延时** 入口参数:dly 延时参数,值越大,延时越久** 出口参数:无************************************************************************* *******************************/void DelayNS(uint32 dly){uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);}const uint32 LED_TBL[] = {0x00, 0xFF, // 全部熄灭后,再全部点亮0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐个点亮0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐个叠加0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐个递减0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 两个靠拢后分开0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 从两边叠加后递减};/********************************************************************************************************** 函数名称:MSPI_Init()** 函数功能:初始化SPI接口,设置为主机。
七段数码管实验报告
七段数码管实验报告篇一:西南交大 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篇二:实验四实验七段数码管显示实验实验四七段数码管显示实验一、实验目的掌握数码管显示数字的原理。
实验六 键盘接口实验
实验六键盘接口实验姓名:专业:通信工程学号:一、实验目的1.掌握Keil C51软件与Proteus软件联合仿真调试的方法;2.掌握单片机的键盘接口电路;3.掌握单片机键盘扫描原理;4.掌握键盘去抖原理及处理方法。
二、实验仪器与设备1.微机一台2.Keil C51集成开发环境3.Proteus仿真软件三、实验内容1.用Proteus设计一矩阵键盘接口电路。
要求利用P1口接一4*4矩阵键盘。
串行口通过一74LS164接一共阴极数码管。
2.用线反转法编写矩阵键盘识别程序,要求采用中断方式;无按键按下时,数码管循环写“8”,有按键按下时产生中断并将按键的键值0~F通过串行口输出,在数码管上显示3秒后返回;返回后,数码管继续循环画“8”。
3.将P1口矩阵键盘改为8个独立键盘,采用中断扫描方式,key0~key6显示键值,key7每按一次数码管加一。
四、实验步骤1.用Proteus设计键盘接口电路;2.在Keil C51中编写键盘识别程序,编译通过后,与Proteus联合调试;3.按动任意键,观察键值是否正确。
五、实验程序一、矩阵键盘#include<reg51.h>#define uint unsigned int#define uchar unsigned charUchar code table0[]={0x7e,0xbe,0xde,0xee,0x7d,0xbd,0xdd,0xed,0x7b,0xbb,0xdb,0xeb,0x77,0xb7,0xd7,0xe7 };uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };uchar code table2[]={0x01,0x21,0x61,0x65,0x6d,0x7d,0x7d,0x7f,0x00};uchar temp,key,m,num,i;void delay(uint c){ uint a,b;for(;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}void main(){ SCON=0x00; TI=0; EA=1;EX0=1; IT0=1; P1=0xf0;while(1){ SBUF=table2[m++];while(TI==0); delay(100); TI=0;if(m==9) {m=0;} }}void INT_0() interrupt 0{ EX0=0; delay(20); EX0=1;P1=0xf0;if(P1!=0xf0){ delay(20);if(P1!=0xf0){ temp=P1; P1=0x0f; key=temp|P1;for(i=0;i<16;i++)if(key==table0[i]) { num=i;break;}SBUF=table1[num]; delay(300);while(TI==0); TI=0;P1=0xf0;}}}XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC11nFC21nFC3220uR110kSRG8RC1/->&1D1324561081112913U274LS164012345678C9DA EBFU3AND_4二、独立键盘 #include<reg51.h>#define uint unsigned int #define uchar unsigned charuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar i,m=-1,key=0; bit flag=0;void delay(uchar c) { uchar a,b; for(;c>0;c--)for(a=142;a>0;a--) for(b=2;b>0;b--); }void main() { TMOD=0x01;TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1;P1=0xff; SCON=0x00; key=8; while(1) { switch(key) { case 8:SBUF=0X00;while(TI==0);TI=0;delay(200);break; case 0:SBUF=0x3f;while(TI==0);TI=0;delay(200);break; case 1:SBUF=0x06;while(TI==0);TI=0;delay(200);break;case 2:SBUF=0x5b;while(TI==0);TI=0;delay(200);break;case 3:SBUF=0x4f;while(TI==0);TI=0;delay(200);break;case 4:SBUF=0x66;while(TI==0);TI=0;delay(200);break;case 5:SBUF=0x6d;while(TI==0);TI=0;delay(200);break;case 6:SBUF=0x7d;while(TI==0);TI=0;delay(200);break;case 7:SBUF=table[m];while(TI==0);TI=0;if(m==9) m=0;delay(200);break;}}}void time0() interrupt 1{ if(P1!=0xff&&flag==0){if(P1==0xfe) {key=0;flag=1;}if(P1==0xfd) {key=1;flag=1;}if(P1==0xfb) {key=2;flag=1;}if(P1==0xf7) {key=3;flag=1;}if(P1==0xef) {key=4;flag=1;}if(P1==0xdf) {key=5;flag=1;}if(P1==0xbf) {key=6;flag=1;}if(P1==0x7f) { key=7;flag=1;m++;}}if(P1==0xff) flag=0;TH0=(65536-10000)/256;TL0=(65536-10000)%256;}XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC11nFC21nFC3220uR110kSRG8RC1/->&1D1324561081112913U274LS16401234567。
7段数码管实验报告
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 段数码管和译码器常常被用于数字显示、计数器、时钟、温度计等电子设备中,具有广泛的应用前景。
实验6:键盘接口系统实验
实验六:键盘接口系统实验一、实训目的1.熟悉中断键盘、非编码键盘、矩阵键盘的电路结构特点;2.实现中断键盘、非编码键盘、矩阵键盘的软件编程;二、实验仪器、材料1.微型计算机(PⅣ以上)2.编程、汇编与模拟平台软件Keil uVision33.电子技术专业仿真软件protues运行平台4.单片机实训开发电路板三、实验内容和步骤1.INT01)ORG 0000HSJMP STARTORG 0003HLOOP:JNB P3.2,LOOPLCALL DISPLYRETIORG 0030HST ART:MOV P0,#0C0HMOV R0,#00HMOV P2,#0FHMOV TCON,#00HMOV IE,#81HSJMP $DISPLY: INC R0CJNE R0,#10H,DISPLY1MOV R0,#00HDISPLY1: MOV A,R0ADD A,#03H ;对A进行地址修正MOVC A,@A+PC ;查字形码表MOV P0,A ;2RET ;1DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH// DT AB:DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH ;共阴极字型码// DB 77H,7cH,39H,5eH,79H,71H,00H,0f3H,76H,80H,40HEND2.非编码P2.7按键+共阳极4位数码管静态显示(递加)1)系统电路原理图如上2)参考源程序设计如下:ORG 0000HST ART: MOV P0,#0C0HMOV R0,#00HMOV P2,#0FHLOOP: JB P2.7,LOOPLCALL DISPLYSJMP LOOPDISPLY: JNB P2.7,DISPLYINC R0CJNE R0,#10H,DISPLY1MOV R0,#00HDISPLY1: MOV A,R0ADD A,#03H ;对A进行地址修正MOVC A,@A+PC ;查字形码表MOV P0,A ;2RET ;1DT AB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH // DT AB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH ;共阴极字型码// DB 77H,7cH,39H,5eH,79H,71H,00H,0f3H,76H,80H,40HEND3.矩阵4*4键盘+共阳极4位数码管并行显示(递加)2)参考源程序设计如下:KEY_DAT A DATA 30HORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HLOOP: LCALL SCANMOV A,KEY_DAT AMOV DPTR,#T ABMOVC A,@A+DPTRMOV P0,ALCALL DELAJMP LOOPSCAN: PUSH ACCPUSH PSWMOV A,#0FH ;列输出低电平MOV P1,AMOV A,P1 ;读行状态ANL A,#0FH ;屏蔽高4位的列值CJNE A,#0FH,KEYSCAN ;若有键按下,则KEYSCANSJMP EXITKEYSCAN:LCALL DEL ;去抖MOV R2,#7FH ;列值扫描初值MOV R3,#4 ;列数MOV R0,#00H ;列值计数器KEYSM1:MOV A,R2MOV P1,ARR A ;列扫描右移MOV R2,AMOV A,P1ANL A,#0FHCJNE A,#0FH,JSADDINC R0DJNZ R3,KEYSM1 ;未扫描完一遍,则循环EXIT: MOV A,#0FFHSJMP DONEJSADD:JB ACC.0,JSADD1MOV A,#0 ;行值送AAJMP JSADD4JSADD1:JB ACC.1,JSADD2MOV A,#4 ;行值送AAJMP JSADD4JSADD2:JB ACC.2,JSADD3MOV A,#8 ;行值送AAJMP JSADD4JSADD3:JB ACC.3,JSADD4MOV A,#12 ;行值送AJSADD4:ADD A,R0 ;行值+列值送入A,得到键值MOV KEY_DATA,ADONE: POP PSWPOP ACCRETDEL: MOV R6,#50DEL1: MOV R5,#200DJNZ R5,$DJNZ R6,DEL1RETKEY_TAB:DB 00H,01H,02H,03H,04H,05H,06H,07H ;0--8DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH ;9--16// T AB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0--9// DB 77H,7CH,39H,5EH,79H,71H ;A--FT AB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳极字型码DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH四、实训总结与分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六键盘接口和七段数码管的控制实验
一、实验目的
1. 学习4X4键盘的与CPU的接口原理
2. 掌握键盘芯片HD7279的使用,及8位数码管的显示方法;
二、实验内容
1. 通过4X4按键完成在数码管上的各种显示功能,以及LCD上显示。
三、实验设备
1.EL-ARM-860教学实验箱,PentiumII以上的PC机,仿真调试电缆。
2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,
仿真调试驱动程序。
四、实验原理
键盘和7段数码管的控制实验,是通过键盘的控制芯片HD7279A来完成的。
它的信号线及控制线连接到S3C2410上,驱动线直接连到8位共阴的7段数码管上。
由于其芯片的接口电压是5V的,而S3C2410的接口电压是3.3V,所以,HD7279A的信号、控制线经过CPLD把电压转换到3.3V,然后送入CPU中。
HD7279是一片具有串行接口的可同时驱动8位共阴式数码管或独立的LED的智能显示驱动芯片。
该芯片同时还可连接多达64键的键盘矩阵,单片即可完成显示键盘接口的全部功能。
内部含有译码器可直接接受BCD码或16进制码并同时具有两种译码方式。
此外还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等,具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。
HD7279在与S3C2410接口中,它使用了4根接口线。
片选信号#CS(低电平有效),时钟信号CLK,数据收发信号DATA,中断信号#KEY(低电平送出),EL-ARM-860实验箱与其的接口中,使用了三个通用I/O接口,和一个外部中断,实现了与HD7279A的连接,S3C2410的外部中断接HD7279的中断#KEY,三个I/O口分别与HD7279A的其他控制、数据信号线相连。
HD7279的其他管脚分别接4X4按键和8位数码管。
当程序运行时,按下按键,平时为高电平的HD7279A的#KEY就会产生一个低电平,送给S3C2410的外部中断5请求脚,在CPU中断请求位打开的状态下,CPU会立即响应外部中断5的请求,PC指针就跳入中断异常向量地址处,进而跳入中断服务子程序中,由于外部中断
4/5/6/7使用同一个中断控制器,所以,还必须判断一个状态寄存器,判断是否是外部中断5的中断请求,当判断出是外部中断5的中断请求,则程序继续执行,CPU这时,通过发送#CS 片选信号选中HD7279A,再发送时钟CLK信号和通过DATA线发送控制指令信号给HD7279A,
HD7279A得到CPU发送的命令后,识别出该命令,然后,扫描按键,把得到键值回送给CPU,同时,在8位数码管上显示相关的指令内容,CPU在得到按键后,有时,程序还会给此键值一定的意义,然后再通过识别此按键的意义,进而进行相应的程序处理。
要进一步开发显示功能,请参见关于HD7279芯片及相应的编程资料HD7279A.PDF的文档,其中有详细、完备的编程资料。
详细具体的应用,请参见\实验程序\HARDWARE\ADS\实验十一目录下的Key_Led.mcp项目文件。
请详细阅读代码注释。
五、实验步骤
1.本实验使用实验教学系统的CPU板,键盘、8位数码管。
在进行本实验时、AD通道选择开关、LCD电源开关、音频的左右声道开关、触摸屏中断选择开关等均应处在关闭状态。
2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。
3.打开超级终端,配置串口的属性(如COM1),配置波特率为115200,校验位无,数据位为8,停止位为1,数据控制流为无;检查连接是否可靠,可靠后,接入电源线,系统上电,同时按住“空格”键,进入VIVI状态。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验十一\Key_Led.mcp 项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载实验程序\HARDWARE\ADS\实验十一\Key_Led_Data\Debug中的映象文件程序映像Key_Led.axf。
6.在ADS调试环境下全速运行映象文件。
按下任意键值,观察数码管的显示。
说明:“0”键表示数码管测试,8个数码管闪烁,“4”键表示数码管复位,“1”键表示数码管右移8位,“2”键表示数码管循环右移,“9”键表示数码管左移8位,“A”键表示数码管循环左移。
其他按键在最右两个数码管上显示键值。
根据HD7279A.PDF文档可以进一步开发具体的相应的程序。