实验报告七-键盘扫描及显示实验

合集下载

实验报告 - - 实验七 - 八段数码管显示实验

实验报告 -  - 实验七 - 八段数码管显示实验

实验报告 - - 实验七 - 八段数码管显示实验EDA实验报告之实验七八段数码管显示实验1、实验目的1)了解数码管动态显示的原理。

2)了解用总线方式控制数码管显示2、实验要求:利用实验仪提供的显示电路, 动态显示一行数据.提示:把显示缓冲区(例如可为60H~65H作为缓冲区)的内容显示出来,当修改显示缓冲区的内容时,可显示修改后的内容(为键盘扫描、显示实验做准备)。

3、实验说明本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

8位段码、6位位码是由两片74LS374输出。

位码经MC1413或ULN2021倒相驱动后,选择相应显示位。

本实验仪中 8位段码输出地址为0X004H,位码输出地址为0X002H。

此处X是由KEY/LED CS 决定,参见地址译码。

做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。

以便用相应的地址来访问。

例如,将KEY/LED CS接到CS0上,则段码地址为08004H,位码地址为08002H。

七段数码管的字型代码表如下表:a ----- f| |b | | ----- | g | e| |c -----d 。

h显示字形 g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 10 0 0 0 1 1 0 06h 2 1 0 1 1 0 1 1 5bh 3 1 0 01 1 1 1 4fh 4 1 1 0 0 1 1 0 66h 5 1 1 0 1 1 01 6dh 6 1 1 1 1 1 0 1 7dh 7 0 0 0 0 1 1 1 07h 8 1 1 1 1 1 1 1 7fh9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h b1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h d 1 0 11 1 1 0 5eh E 1 1 1 1 0 0 1 79h F 1 1 1 0 0 0 1 71h4、原理图及连线5、实验内容1) 使用仪器、仪表,开发平台型号本实验用到了WAVE 6000软件平台,电脑一台,LAB6000实验箱,示波器,若干连线,串行数据线。

键盘扫描程序实验报告

键盘扫描程序实验报告

一、实验目的1. 理解键盘扫描的基本原理。

2. 掌握使用C语言进行键盘扫描程序设计。

3. 学习键盘矩阵扫描的编程方法。

4. 提高单片机应用系统的编程能力。

二、实验原理键盘扫描是指通过检测键盘矩阵的行列状态,判断按键是否被按下,并获取按键的值。

常见的键盘扫描方法有独立键盘扫描和矩阵键盘扫描。

独立键盘扫描是将每个按键连接到单片机的独立引脚上,通过读取引脚状态来判断按键是否被按下。

矩阵键盘扫描是将多个按键排列成矩阵形式,通过扫描行列线来判断按键是否被按下。

这种方法可以大大减少引脚数量,降低成本。

本实验采用矩阵键盘扫描方法,使用单片机的并行口进行行列扫描。

三、实验设备1. 单片机开发板(如51单片机开发板)2. 键盘(4x4矩阵键盘)3. 连接线4. 调试软件(如Keil)四、实验步骤1. 连接键盘和单片机:将键盘的行列线分别连接到单片机的并行口引脚上。

2. 编写键盘扫描程序:(1)初始化并行口:将并行口设置为输入模式。

(2)编写行列扫描函数:逐行扫描行列线,判断按键是否被按下。

(3)获取按键值:根据行列状态,确定按键值。

(4)主函数:调用行列扫描函数,读取按键值,并根据按键值执行相应的操作。

3. 调试程序:将程序下载到单片机,观察键盘扫描效果。

五、实验程序```c#include <reg51.h>#define ROW P2#define COL P3void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);}void scan_key() {unsigned char key_val = 0xFF;ROW = 0xFF; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值}void main() {while (1) {scan_key();if (key_val != 0xFF) {// 执行按键对应的操作}}}```六、实验结果与分析1. 实验结果:程序下载到单片机后,按键按下时,单片机能够正确读取按键值。

实验二 键盘扫描实验

实验二  键盘扫描实验

实验二键盘扫描实验一、实验目的 熟悉 VHDL 的语法和编译排错,重点掌握组合逻辑中显示译码器的设计。

附加学习 键盘和数码管显示控制。

二、实验内容 1. 设计一个 BCD 码到 LED 的七段译码器,非 BCD 值时仅 G 段亮(输出为“—” ) 。

2. 下载验证键盘显示实验。

3. 改写程序,将学号的数据固定地显示在 1-8 位数码管上。

4. 将 F 键功能改为换向键,即可以控制数字滚动显示的方向。

三、实验步骤 1. 用文本输入法,在键盘显示程序的译码部分,分别用三种语法填写 BCD 到 LED 的译 码器。

三种语法为 When else、With select、Case,建议使用模板。

每一种都需编 译通过提交程序。

2. 选一种语法,编译,绑定引脚,下载验证结果。

3. 改写程序,将 0--7 的数据固定地显示在 1-8 位数码管上。

编译、下载验证结果。

4. 将 F 键功能改为换向键,即可以控制数字滚动显示的方向。

编译、下载验证结果。

四、实验硬件图图 1 4x4 键盘图 2 数码管动态显示原理框图一种推荐的适配卡连线如下表所示: 输 信 号 CLK1 入 对应芯片引 入 名 端子名 端 子 名 PIN_A20 10HZ 功 能 时钟 输 信 号 出 名 对应芯片 引 入 功 端 子 名 端子名 PIN_C1 PIN_B1 PIN_C3 PIN_E5 PIN_B3 PIN_B4 PIN_A16 PIN_C17 PIN_A17 PIN_A18 PIN_A7 PIN_A8 PIN_A9 PIN_A10 C D E F G H C1 C2 C3 C4 R1 R2 R3 R4 键盘行 能 段选 段选 段选 段选 段选 段选 键盘列LED_SEG[2] LED_SEG[3] LED_SEG[4]LED_BIT[0] PIN_G4 LED_BIT[1] PIN_E3 LED_BIT[2] PIN_D2 LED_BIT[3] PIN_C2 LED_BIT[4] PIN_B2 LED_BIT[5] PIN_C4 LED_BIT[6] PIN_E6 LED_BIT[7] PIN_A3 LED_SEG[0] PIN_G3 LED_SEG[1] PIN_E4BIT1 BIT2 BIT3 BIT4 BIT5 BIT6 BIT7 BIT8 A B位选 1 位选 2 位选 3 位选 4 位选 5 位选 6 位选 7 位选 8 段选 段选LED_SEG[5] LED_SEG[6] LED_SEG[7] KEYCOL[0] KEYCOL[1] KEYCOL[2] KEYCOL[3] KEYROW[1] KEYROW[2] KEYROW[3] KEYROW[4]五、实验文件(需要填写译码部分) KEYSCAN 时钟扫描程序 文件名:KEYSCAN.VHD library IEEE; use IEEE.std_logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity KEYSCAN is port ( CLK1: in STD_LOGIC; KEYROW1,KEYROW2,KEYROW3,KEYROW4: in STD_LOGIC;--键盘行接口 KEYCOL: out STD_LOGIC_VECTOR (3 DOWNTO 0);--键盘列接口 LED_BIT: out STD_LOGIC_VECTOR (7 DOWNTO 0); --LED 位选接口 LED_SEG: out STD_LOGIC_VECTOR (7 DOWNTO 0)); --LED 段选接口 end KEYSCAN; architecture KEYSCAN_ARCH of KEYSCAN is SIGNAL SEG : STD_LOGIC_VECTOR (6 DOWNTO 0);--LED 段选 SIGNAL BIT : STD_LOGIC_VECTOR (2 DOWNTO 0);--LED 位选 SIGNAL NUM : STD_LOGIC_VECTOR (3 DOWNTO 0);--显示数字 SIGNAL COUNT : STD_LOGIC_VECTOR (4 DOWNTO 0);--计数脉冲 SIGNAL COUNT0 : STD_LOGIC; --计数脉冲最低位 LSB SIGNAL COL: STD_LOGIC_VECTOR (1 DOWNTO 0); --键盘列begin --计数器模块 PROCESS (CLK1) BEGIN IF CLK1'event AND CLK1 = '1' THEN COUNT <= COUNT+1; END IF; END PROCESS; --计数器模块 --键盘模块 COL <=COUNT(3 DOWNTO 2); KEYCOL <= "1110" WHEN COL = 0 ELSE "1101" WHEN COL = 1 ELSE "1011" WHEN COL = 2 ELSE "0111" WHEN COL = 3 ELSE "1111"; COUNT0 <= COUNT(0); PROCESS (count0,COUNT,KEYIN1,KEYIN2) BEGIN IF COUNT0'event and (COUNT0 = '1')THEN --分四行扫描 IF (KEYROW1 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "00"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); --COUNT(1 DOWNTO 0)只起分频延时的作用 ELSIF (KEYROW2 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "01"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); ELSIF (KEYROW3 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "10"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); ELSIF (KEYROW4 = '0') and (COUNT(1) = '0') THEN NUM(3 DOWNTO 2)<= "11"; NUM(1 DOWNTO 0) <= COUNT(3 DOWNTO 2); END IF; END IF; END PROCESS; --键盘模块--显示模块 BIT <= COUNT(4 DOWNTO 2); --位选扫描信号 LED_BIT <= "11111110" WHEN BIT = 0 ELSE "11111101" WHEN BIT = 1 ELSE "11111011" WHEN BIT = 2 ELSE "11110111" WHEN BIT = 3 ELSE "11101111" WHEN BIT = 4 ELSE "11011111" WHEN BIT = 5 ELSE "10111111" WHEN BIT = 6 ELSE "01111111" WHEN BIT = 7 ELSE "11111111"; --译码部分请填写完整 --pgfedcba --参考码表 0-f 十六进制 --3FH 06H 5BH 4FH --6FH 77H 7CH 39H --参考码表 0-f 二进制 --0111111 0000110 1011011 --1111111 1101111 1110111--位选扫描信号译码66H 6DH 7DH 07H 5EH 79H 71H 1001111 11111007FH1100110 1101101 1111101 0000111 0111001 1011110 1111001 1110001--译码部分完,输出到 LED 段选,同时选通位选端 LED_SEG(6 DOWNTO 0)<=SEG; LED_SEG(7) <= '0'; --显示模块 end KEYSCAN_ARCH; 六、实验注意事项 程序较大,结合电路理解很费时间,应事先预习。

汇编数码显示及键盘实验实验报告

汇编数码显示及键盘实验实验报告

汇编数码显⽰及键盘实验实验报告数码显⽰及键盘实验【实验内容】1、数码管显⽰0-72、独⽴按键识别【需要了解的知识】1、GPIO设定2、数码管动态扫描显⽰原理,键盘扫描⼯作原理,输⼊与输出及其处理【实验预习】仔细预读实验指导电⼦⽂档的实验六、七及其前⾯的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验⼀数码管显⽰0-7实验任务:1)先将“0-7”数码管的段码值写⼊存储器中,使8位数码管从右⾄左显⽰0-7.实验步骤:1)⾸先在硬盘上建⽴⼀个⽂件夹;2)启动Keil C51软件;3)执⾏Keil C51软件的菜单“Project|New Project……”,弹出⼀个名为“Create New Project”的对话框。

输⼊⼯程⽂件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项⽬选择ATMEL的AT89S52的CPU。

选择之后,点击“确定”按钮;5)接下来弹出⼀个对话框提⽰你是否要把标准8051的启动代码添加项⽬中去,此时,点击“否”按钮;6)执⾏菜单“File|New……”,出现⼀个名为“Text1”的⽂档。

接着执⾏菜单“File|Save”弹出⼀个名为“Save As”的对话框,将⽂件名改为“.asm”后缀,然后保存;7)添加源程序⽂件到⼯程中,⼀个空的源程序⽂件建成。

单击Keil C51软件左边项⽬⼯作窗⼝“Target1”上的“+”,将其展开。

然后右击“Source Group1”⽂件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择⽂件类型为“Asm Source file(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序⽂件已经出现在项⽬⼯作窗⼝的“Source Group1”⽂件夹中;输⼊源程序代码;9)点击⼯具栏“Options for target”按钮,弹出⼀个对话框,定义“Xtal”为11.0592.下⾯依序是存储模式、程序空间⼤⼩等设置,均⽤默认值即可。

单片机键盘显示实验报告

单片机键盘显示实验报告

单片机的键盘和显示实验报告㈠实验目的1.掌握单片机I/O的工作方式;2.掌握单片机以串行口方式0工作的LED显示;3.掌握键盘和LED显示的编程方法。

㈡实验器材1.G6W仿真器一台2.MCS—51实验板一台3.PC机一台4.电源一台㈢实验内容及要求实验硬件线路图见附图从线路图可见,8051单片机的P1口作为8个按键的输入端,构成独立式键盘。

四个LED显示器通过四个串/并移位寄存器74LS164接口至8051的串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示的段码数据,TXD则作为发送时钟来对显示数据进行移位操作。

编写一个计算器程序,当某一键按下时可执行相应的加、减、乘、除运算方式,在四个显示器上显示数学算式和最终计算结果。

注:①通过按键来选择加、减、乘、除四种运算方式。

②输入两个数字均为一位十进制数,可预先放在内存中。

㈣实验框图(见下页)㈤思考题1.当键盘采用中断方式时,硬件电路应怎样连接?P1.4~P1.7是键输出线,P1.0~P1.3是扫描输入线。

输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5 V电源,输出端接至8051的外部中断输入端。

2.74LS164移位寄存器的移位速率是多少?实验中要求计算的式子和结果之间相差一秒,移位寄存器的移位速率应该是每秒一位吧。

其实这个问题确实不知道怎么回答。

LED 显示用的段码与教科书所提供的不同,本实验采用如下段码:显示数符段码显示数符段码0BBH A DBH109H B F1H2EAH C B2H36BH D E9H459H E F2H573H F D2H否有否P1口置输入读P1口开 始显示“0000”是否有键按下?延迟消抖是否有键按下?是读键码加法运算减法运算除运算6F3H—40H70BH.04H8FBH┗┛A1H97BH┗┛1AH灭00H P DAH实验代码:ORG 0000HAJMP MAINORG 0030HMAIN:MOV 41H,#0BBH ;对几个存放地址进行初始化MOV 42H,#0BBHMOV 43H,#0BBHMOV 44H,#0BBHMOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示KEY:MOV R3,#08H;用来存放两个数据MOV R4,#02HMOV P1,#0FFH ;初始化P1口MOV A,P1 ;读取按键状态CPL A ;取正逻辑,高电平表示有键按下JZ KEY ;A=0时无键按下,重新扫描键盘LCALL DELAY1;消抖MOV A,P1 ;再次读取按键状态CPL AJZ KEY ;再次判别是否有键按下PUSH AKEY1:MOV A,P1CPL AANL A,#0FH ;判别按键释放JNZ KEY1 ;按键未释放,等待LCALL DELAY1;释放,延时去抖动POP AJB ACC.0,ADD1 ;K1按下转去ADD1JB ACC.1,SUB1 ;K1按下转去SUB1JB ACC.2,MUL1 ;K1按下转去MUL1JB ACC.3,DIV1 ;K1按下转去DIV1LJMP KEYADD1:LCALL BUFFER ;显示加数和被加数MOV 43H,#049HLCALL DISPLAY ;显示加号MOV A,R3ADD A,R4DA AMOV R3,A ;相加结果放入R6ANL A,#0FHMOV R4,A ;结果个位放入R7MOV A,R3SWAP A ;半字节交换,高四位放入低四位ANL A,#0FHMOV R3,A ;结果的高位放入R6LCALL L;显示缓存区设置LCALL DELAY2;延时一秒后显示LCALL DISPLAYLJMP KEYSUB1:LCALL BUFFER ;显示减数和被减数MOV 43H,#40HLCALL DISPLAY ;显示减号MOV A,R3CLR CY ;CY清零SUBB A,R4 ;做减法PUSH ARLC A ;带进位循环左移,最高位放入CYJC F ;判断最高位,若为1则跳转到负数ZHENG: POP AMOV R4,AMOV R3,#00H ;高位清零SJMP OUTFU:POP ACPL A ;取绝对值INC AMOV R4,AMOV R3,#11H ;显示负号OUT: LCALL L ;显示缓存区设置LCALL DELAY2 ;延时1s后显示LCALL DISPLAYLJMP KEYMUL1:LCALL BUFFER ;显示两位乘数MOV 43H,#99HLCALL DISPLAY ;显示乘号MOV A,R3MOV B,R4MUL AB ;结果放入AB,A中是低8位,B中是高8位MOV B,#0AHDIV AB ;十进制转换MOV R4,B ;结果个位放入R7MOV R3,A ;结果的十位放入R6LCALL LLCALL DELAY2LCALL DISPLAY ;延时1s后显示LJMP KEYDIV1:LCALL BUFFER ;显示除数和被除数MOV 43H,#62HLCALL DISPLAY ;显示除号MOV A,R3MOV B,R4DIV AB ;A除以BMOV R4,B ;余数放在R4中MOV R3,A ;商放在R3中MOV A,R4MOVC A,@A+DPTR ;调用段选号MOV 41H,A ;显示余数MOV A,R3MOVC A,@A+DPTRMOV 43H,A ;显示商MOV 42H,#00HMOV 44H,#00HLCALL DELAY2 ;延时1S后显示LCALL DISPLAYLJMP KEYBUFFER: MOV 41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号MOV DPTR,#TABLMOV A,R4MOVC A,@A+DPTRMOV 42H,AMOV A,R3MOVC A,@A+DPTRMOV 44H,ARETDISPLAY:MOV R5,#04H;共四位需要显示MOV R0,#41HDISPLAY1:MOV A,@R0MOV SBUF,ADISPLAY2:JNB TI,DISPLAY2;是否传完了CLR TIINC R0DJNZ R5,DISPLAY1RETL:MOV A,R4MOVC A,@A+DPTRMOV 41H,A ;R4对应的段码MOV A,R3MOVC A,@A+DPTRMOV 42H,A ;R3对应的段码MOV 43H,#00HMOV 44H,#00HRETDELAY1: ;普通延时MOV R1,#20HDS1:MOV R2,#0FFHDS2:DJNZ R2,DS2DJNZ R1,DS1RETDELAY2:MOV R6,#14H ;定时1SMOV TMOD,#01HDS3:MOV TH0,#3CHMOV TL0,#0B0H ;50msSETB TR0LOOP:JNB TF0,LOOPCLR TF0CLR TR0DJNZ R6,DS3 ;1s到,中断返回RETTABL:DB 0BBH 09H 0EAH 6BH ;段码表DB 59H 73H 0F3H 0BHDB 0FBH 7BH 00H 0DBHDB 0F1H 0B2H 0E9H 0F2HDB 0D2H 40H实验结果及分析按键1:8+2= 结果:10按键2:8-2= 结果: 6按键3:8*2= 结果:16按键4:8/2= 结果:4从上面的结果可以看出,本次实验基本完成了实验要求。

new 8(键盘扫描及显示)

new 8(键盘扫描及显示)

机械式薄膜式电容式霍尔效应式键盘接口电路实例:10K +5VCD E F 89A B 456701238255APA0PA1PA2PA3PC0PC1PC2PC3【分析】【键扫描过程】①②③④z 检测矩阵中是否有键压下z 消除键抖动A 口输出一个低电平C 口读入各列的值z 确定被压下键所在的行列号06(也可用其他方法得到键值)z 获取键的扫描码z 上一次压下的键是否已松开三、实验原理8255各接口及寄存器地址:8255A 方式选择控制字:89H1 0 0 0 X 0 01C口低4位I/O选择1:输入;0:输出C口高4位I/O选择1:输入;0:输出B口方式0:方式0;1:方式1B口I/O选择1:输入;0:输出A口I/O选择1:输入;0:输出A口方式00:方式001:方式11X:方式22、原理图:数码管共阴显示键扫键值平均电流约为10mA~20mA。

’F’00000111共阴数码管显示笔划码:笔划码:3FH, 06H, 5BH, 4FH, 66H, 6DH 笔划码:7DH, 07H, 7FH, 6FH, 77H, 7CH 笔划码:39H, 5EH, 79H, 71H, 00H, 0E3H4、动态显示Dp(h)¾只有一只数码管显示数值在字形口送笔划码,在字位口使显示数码管的共阴端为0,其它数码管的共阴端为1X6X5X1动态显示子程序流程框图:查表指令XLAT有按键依次检测1-4列,确定是第几行按键按下由行号,列号得键值键值送显示缓冲区按键弹起?调显示ANO YES。

实验报告七 键盘扫描及显示实验

实验报告七 键盘扫描及显示实验

信息工程学院实验报告课程名称:微机原理与接口技术 实验项目名称:键盘扫描及显示实验 实验时间:2017.1.6 班级: 姓名: 学号:一、实 验 目 的1. 掌握 8254 的工作方式及应用编程。

2. 掌握 8254 典型应用电路的接法。

二、实 验 设 备了解键盘扫描及数码显示的基本原理,熟悉 8255 的编程。

三、实 验 原 理将 8255 单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。

键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。

实验具体内容如下:将键盘进行编号,记作 0~F ,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 6 次按下的按键编号。

键盘及数码管显示单元电路图如图 7-1 和 7-2 所示。

8255 键盘及显示实验参考接线图如图 7-3 所示。

图 7-1 键盘及数码管显示单元 4×4 键盘矩阵电路图图7-2 键盘及数码管显示单元 6 组数码管电路图图7-3 8255 键盘扫描及数码管显示实验线路图四、实验内容与步骤1. 实验接线图如图7-3 所示,按图连接实验线路图。

图7-4 8255 键盘扫描及数码管显示实验实物连接图2.运行Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。

图7-5 8255 键盘扫描及数码管显示实验程序编辑界面3. 运行程序,按下按键,观察数码管的显示,验证程序功能。

五、实验结果及分析:1. 运行程序,按下按键,观察数码管的显示。

图7-6 实验结果分析:当按下键盘其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 6 次按下的按键编号。

六、实验总结:通过本实验,我了解键盘扫描及数码显示的基本原理,以及熟悉8255 的编程。

数码管显示和键盘扫描实验资料

数码管显示和键盘扫描实验资料

数码管显示和键盘扫描实验资料实验三LED数码管动态显示及4 X4 键盘控制实验一、实验目的1.巩固多位数码管动态显示方法。

2.掌握行扫描法矩阵式按键的处理方法。

3.熟练应用AT89S52学习板实验装置,进一步掌握keil C51的使用方法。

二、实验内容使用AT89S52学习板上的4位LED数码管和4 X 4矩阵键盘阵列做多位数码管动态显示及行扫描法键盘处理功能实验。

用P0口做数据输出,利用P1做锁存器74HC573的锁存允许控制,编写程序使4位LED数码管按照动态显示方式显示一定的数字;按照行扫描法编写程序对4 X 4矩阵键盘阵列进行定期扫描,计算键值并在数码管上显示。

三、实验系统组成及工作原理1.4位LED数码管和4 X 4矩阵键盘阵列电路原理图2.多位数码管动态显示方式说明4位共阴极LED动态显示3456数字的工作过程首先由I/O口(1)送出数字3的段选码4FH即数据01001111到4个LED共同的段选线上,接着由I/O口(2)送出位选码××××0111到位选线上,其中数据的高4位为无效的×,唯有送入左边第一个LED的COM端D3为低电平“0”,因此只有该LED的发光管因阳极接受到高电平“1”的g、d、c、b、a段有电流流过而被点亮,也就是显示出数字3,而其余3个LED因其COM端均为高电平“1”而无法点亮;显示一定时间后,再由I/O口(1)送出数字4的段选码66H即01100110到段选线上,接着由I/O 口(2)送出点亮左边第二个LED的位选码××××1011到位选线上,此时只有该LED的发光管因阳极接受到高电平“1”的g、f、c、b段有电流流过因而被点亮,也就是显示出数字4,而其余3位LED不亮;如此再依次送出第三个LED、第四个LED的段选与位选的扫描代码,就能一一分别点亮各个LED,使4个LED从左至右依次显示3、4、5、6。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息工程学院实验报告
课程名称:微机原理与接口技术 实验项目名称:键盘扫描及显示实验 实验时间:2017.1.6 班级: 姓名: 学号:
一、实 验 目 的
1. 掌握 8254 的工作方式及应用编程。

2. 掌握 8254 典型应用电路的接法。

二、实 验 设 备
了解键盘扫描及数码显示的基本原理,熟悉 8255 的编程。

三、实 验 原 理
将 8255 单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管
显示。

键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。

实验具体内容如下:将键盘进行
编号,记作 0~F ,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一
个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 6 次按下的按键编
号。

键盘及数码管显示单元电路图如图 7-1 和 7-2 所示。

8255 键盘及显示实验参考接线图如图 7-3 所
示。

图 7-1 键盘及数码管显示单元 4×4 键盘矩阵电路图
成 绩:
指导老师(签名):
图7-2 键盘及数码管显示单元 6 组数码管电路图
图7-3 8255 键盘扫描及数码管显示实验线路图
四、实验内容与步骤
1. 实验接线图如图7-3 所示,按图连接实验线路图。

图7-4 8255 键盘扫描及数码管显示实验实物连接图
2.运行Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。

图7-5 8255 键盘扫描及数码管显示实验程序编辑界面
3. 运行程序,按下按键,观察数码管的显示,验证程序功能。

五、实验结果及分析:
1. 运行程序,按下按键,观察数码管的显示。

图7-6 实验结果
分析:当按下键盘其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 6 次按下的按键编号。

六、实验总结:
通过本实验,我了解键盘扫描及数码显示的基本原理,以及熟悉8255 的编程。

通过本次实验加深了对理论编程的知识的理解,巩固了我的理论知识。

附录:
;Keyscan.asm
;键盘扫描及数码管显示实验
;查看端口资源分配情况,记录实验系统I/O端口始地址
IOY0 EQU 0D000H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DA TA SEGMENT
DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DA TA ENDS ;键值表,0~F对应的7段数码管的段位值
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA
START: MOV AX,DATA
MOV DS,AX
MOV SI,3000H ;建立缓冲区,存放要显示的键值
MOV AL,00H ;先初始化键值为0
MOV [SI],AL
MOV [SI+1],AL
MOV [SI+2],AL
MOV [SI+3],AL
MOV [SI+4],AL
MOV [SI+5],AL
MOV DI,3005H
MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,81H ;方式0,A口、B口输出,C口低4位输入
OUT DX,AL
MOV CX,0040h
BEGIN1: PUSH CX
BEGIN:
CALL DIS ;显示刷新
CALL CLEAR ;清屏
CALL CCSCAN ;扫描按键
JNZ GETKEY1 ;有键按下则跳置GETKEY1
POP CX
LOOP BEGIN1
MOV CX,0040h
MOV AH,01h ;判断PC键盘是否有按键按下
INT 16H
JZ BEGIN1 ;无按键则跳回继续循环,有则退出
QUIT: MOV AX,4C00H ;返回到DOS
INT 21H
GETKEY1:CALL DIS ;显示刷新
CALL DALL Y
CALL DALL Y
CALL CLEAR ;清屏
CALL CCSCAN ;再次扫描按键
JNZ GETKEY2 ;有键按下则跳置GETKEY2
JMP BEGIN ;否则跳回开始继续循环
GETKEY2:MOV CH,0FEH
MOV CL,00H ;设置当前检测的是第几列
COLUM: MOV AL,CH ;选取一列,将X1~X4中一个置0 MOV DX,MY8255_A
OUT DX,AL
MOV DX,MY8255_C ;读Y1~Y4,用于判断是哪一行按键闭合IN AL,DX
L1: TEST AL,01H ;是否为第1行
JNZ L2 ;不是则继续判断
MOV AL,00H ;设置第1行第1列的对应的键值
JMP KCODE
L2: TEST AL,02H ;是否为第2行
JNZ L3 ;不是则继续判断
MOV AL,04H ;设置第2行第1列的对应的键值
JMP KCODE
L3: TEST AL,04H ;是否为第3行
JNZ L4 ;不是则继续判断
MOV AL,08H ;设置第3行第1列的对应的键值
JMP KCODE
L4: TEST AL,08H ;是否为第4行
JNZ NEXT ;不是则继续判断
MOV AL,0CH ;设置第4行第1列的对应的键值
KCODE: ADD AL,CL ;将第1列的值加上当前列数,确定按键值CALL PUTBUF ;保存按键值
PUSH AX
KON: CALL DIS ;显示刷新
CALL CLEAR ;清屏
CALL CCSCAN ;扫描按键,判断按键是否弹起
JNZ KON ;未弹起则继续循环等待弹起
POP AX
NEXT: INC CL ;当前检测的列数递增
MOV AL,CH
TEST AL,08H ;检测是否扫描到第4列
JZ KERR ;是则跳回到开始处
ROL AL,1 ;没检测到第4列则准备检测下一列
MOV CH,AL
JMP COLUM
KERR: JMP BEGIN
CCSCAN PROC NEAR ;扫描是否有按键闭合子程序
MOV AL,00H
MOV DX,MY8255_A ;将4列全选通,X1~X4置0
OUT DX,AL
MOV DX,MY8255_C
IN AL,DX ;读Y1~Y4
NOT AL
AND AL,0FH ;取出Y1~Y4的反值
RET
CCSCAN ENDP
CLEAR PROC NEAR ;清除数码管显示子程序
MOV DX,MY8255_B ;段位置0即可清除数码管显示
MOV AL,00H
OUT DX,AL
RET
CLEAR ENDP
DIS PROC NEAR ;显示键值子程序
PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显示MOV SI,3000H
MOV DL,0DFH
MOV AL,DL
AGAIN: PUSH DX
MOV DX,MY8255_A
OUT DX,AL ;设置X1~X4,选通一个数码管
MOV AL,[SI] ;取出缓冲区中存放键值
MOV BX,OFFSET DTABLE
AND AX,00FFH
ADD BX,AX
MOV AL,[BX] ;将键值作为偏移和键值基地址相加得到相应的键值MOV DX,MY8255_B
OUT DX,AL ;写入数码管A~Dp
CALL DALL Y
INC SI ;取下一个键值
POP DX
MOV AL,DL
TEST AL,01H ;判断是否显示完?
JZ OUT1 ;显示完,返回
ROR AL,1
MOV DL,AL
JMP AGAIN ;未显示完,跳回继续OUT1: POP AX
RET
DIS ENDP
PUTBUF PROC NEAR ;保存键值子程序MOV SI,DI
MOV [SI],AL
DEC DI
CMP DI,2FFFH
JNZ GOBACK
MOV DI,3005H
GOBACK: RET
PUTBUF ENDP
DALL Y PROC NEAR ;软件延时子程序PUSH CX
MOV CX,0fffH
D1: MOV AX,00FFH
D2: DEC AX
JNZ D2
LOOP D1
POP CX
RET
DALL Y ENDP
CODE ENDS
END START。

相关文档
最新文档