实验报告七-键盘扫描及显示实验
实验报告 - - 实验七 - 八段数码管显示实验
实验报告 - - 实验七 - 八段数码管显示实验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(键盘扫描及显示)
机械式薄膜式电容式霍尔效应式键盘接口电路实例: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. 实验材料- 键盘A:机械键盘- 键盘B:薄膜键盘- 键盘C:触摸板2. 实验步骤1. 进行键盘A的实验:由实验者使用键盘A进行10次查询操作(先手工输入一段文字再进行查询),记录每次的击键速度和准确性。
2. 进行键盘B的实验:由实验者使用键盘B进行10次查询操作,并记录数据。
3. 进行键盘C的实验:由实验者使用触摸板进行10次查询操作,并记录数据。
4. 分析和比较实验结果。
四、实验结果1. 键盘A的实验结果序号击键速度(字/分钟)准确性(百分比)1 120 95%2 130 92%3 115 98%4 125 94%5 110 96%6 135 90%7 121 96%8 114 95%9 118 93%10 112 97%2. 键盘B的实验结果序号击键速度(字/分钟)准确性(百分比)1 95 92%2 100 89%3 90 96%4 105 93%5 92 95%6 97 91%7 100 93%8 91 92%9 98 90%10 93 94%3. 键盘C的实验结果序号击键速度(字/分钟)准确性(百分比)1 80 88%2 85 83%3 90 86%4 75 81%5 88 84%6 82 87%7 85 82%8 79 85%9 84 83%10 81 86%五、实验分析通过对实验结果的分析,可以得出以下结论:1. 在击键速度方面,机械键盘(键盘A)表现出最高的性能,平均每分钟击键速度为120字。
键盘显示实验报告
键盘显示实验报告键盘显示实验报告一、引言键盘是我们日常生活中常用的输入设备之一,它通过按下不同的按键来输入字符和命令。
在计算机科学领域,键盘显示是一项重要的实验,它涉及到了计算机硬件和软件的相互配合。
本文将介绍一个键盘显示实验的设计和结果分析。
二、实验设计1. 实验目的本实验的目的是通过键盘输入字符,并在计算机屏幕上进行显示。
通过这个实验,我们可以深入了解键盘的工作原理和计算机输入输出的基本知识。
2. 实验材料本实验所需的材料包括:计算机、键盘、显示器和相应的连接线。
3. 实验步骤(1) 将键盘与计算机通过连接线连接好。
(2) 打开计算机,并启动相应的键盘显示程序。
(3) 在键盘上按下不同的按键,观察计算机屏幕上的显示效果。
(4) 分析和记录实验结果。
三、实验结果在本次实验中,我们按下了键盘上的不同按键,并观察了计算机屏幕上的显示效果。
实验结果表明,键盘输入的字符能够准确地显示在屏幕上,并且显示的速度非常快。
四、结果分析1. 键盘工作原理键盘是一种输入设备,它通过按下不同的按键来输入字符和命令。
当我们按下键盘上的某个按键时,键盘会发送一个信号给计算机,计算机通过解读这个信号来确定我们按下的是哪个按键,并将相应的字符显示在屏幕上。
2. 计算机输入输出键盘显示实验涉及到了计算机的输入输出过程。
输入是指将外部信息传递给计算机的过程,而输出是指将计算机处理后的信息传递给外部的过程。
在本实验中,键盘是输入设备,它将我们按下的按键信息传递给计算机;而显示器是输出设备,它将计算机处理后的字符信息显示在屏幕上。
3. 键盘显示的应用键盘显示技术在计算机领域有着广泛的应用。
无论是在日常办公还是在专业领域,键盘输入都是必不可少的。
通过键盘,我们可以输入文字、命令、密码等信息,实现与计算机的交互。
键盘显示技术的发展也为计算机的普及和应用提供了方便。
五、实验总结通过本次键盘显示实验,我们深入了解了键盘的工作原理和计算机输入输出的基本知识。
单片机实验五报告_单片机键盘实验
单片机实验五报告_单片机键盘实验一、实验目的本次单片机键盘实验的主要目的是让我们深入了解单片机与键盘的接口技术,掌握如何通过编程实现对键盘输入的检测和响应,从而提高我们在单片机应用开发中的实际操作能力。
二、实验原理在单片机系统中,键盘通常是作为输入设备使用的。
常见的键盘有独立式键盘和矩阵式键盘两种类型。
独立式键盘是每个按键单独占用一根 I/O 线,其优点是电路简单,编程容易,但缺点是占用较多的 I/O 口资源。
矩阵式键盘则是将按键排列成矩阵形式,通过行线和列线的交叉来识别按键。
这种方式可以有效地节省 I/O 口资源,但电路和编程相对复杂一些。
在本次实验中,我们采用了矩阵式键盘。
其工作原理是通过逐行扫描或者逐列扫描的方式,检测行线和列线的电平状态,从而确定按下的按键。
三、实验设备及材料1、单片机开发板一块2、计算机一台3、编程软件(如 Keil C51)4、下载工具(如 STCISP)四、实验步骤1、硬件连接将矩阵式键盘与单片机的 I/O 口进行连接,注意行线和列线的对应关系。
连接好电源和地线,确保硬件电路正常工作。
2、软件编程打开编程软件,创建一个新的工程。
编写初始化程序,包括设置 I/O 口的工作模式、中断等。
编写键盘扫描程序,通过循环扫描行线和列线的电平状态,判断是否有按键按下。
当检测到按键按下时,根据按键的编码执行相应的操作,如在数码管上显示按键值、控制 LED 灯的亮灭等。
3、编译和下载对编写好的程序进行编译,检查是否有语法错误。
如果编译成功,使用下载工具将程序下载到单片机中。
4、实验调试观察硬件电路的工作状态,看是否有异常现象。
按下不同的按键,检查程序的响应是否正确。
如果出现问题,通过调试工具(如单步调试、断点调试等)查找并解决问题。
五、实验代码以下是本次实验的部分关键代码:```cinclude <reg51h>//定义键盘的行和列define ROW_NUM 4define COL_NUM 4//定义行线和列线的端口sbit ROW1 = P1^0;sbit ROW2 = P1^1;sbit ROW3 = P1^2;sbit ROW4 = P1^3;sbit COL1 = P1^4;sbit COL2 = P1^5;sbit COL3 = P1^6;sbit COL4 = P1^7;//定义按键值的编码unsigned char code KeyCodeMapROW_NUMCOL_NUM ={{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'','0','','D'}};//键盘扫描函数void KeyScan(){unsigned char i, j, temp;unsigned char keyValue = 0;//逐行扫描for (i = 0; i < ROW_NUM; i++){//先将所有行线置高电平ROW1 = ROW2 = ROW3 = ROW4 = 1;//将当前行线置低电平switch (i){case 0: ROW1 = 0; break;case 1: ROW2 = 0; break;case 2: ROW3 = 0; break;case 3: ROW4 = 0; break;}//读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4;//如果有列线为低电平,则表示有按键按下if (temp!= 0xF0){//延迟去抖动delay_ms(10);//再次读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4; if (temp!= 0xF0){//确定按下的按键for (j = 0; j < COL_NUM; j++){if ((temp &(1 << j))== 0){keyValue = KeyCodeMapij;break;}}//执行相应的操作switch (keyValue){case '1'://具体操作break;case '2':break;//其他按键的操作}}}}}//主函数void main(){while (1){KeyScan();}}```六、实验结果及分析在实验过程中,我们成功地实现了对矩阵式键盘的输入检测,并能够根据不同的按键执行相应的操作。
按键检测驱动实验报告
班级_08网络一班_ 学号__20080611052_ 姓名__袁晓洋___按键检测实验[实验目的]深入理解单片机IO输入的特性和编程方法理解4×4键盘的工作原理和扫描原理掌握利用单片机单IO口实现对4×4键盘扫描输入的方法[实验内容]采用单片机的IO口实现对4×4键盘的低电平扫描,将扫描输入的结果按照按钮与数码的对应关系显示到7段数码管上。
[实验步骤]在此填写在proteus中的操作步骤,并附绘制的电路图首先加入根据课本121页,连接电路,一个P0端口连接按键,P2端口连接数码管,设置按钮,设置8个10K的电阻,如图所示:在此填写keil C51代码并附详细注释#include <reg51.h> 添加头文件#define KEYP P0 定义键盘连接到P0#define SEG7P P2 定义七段数码管连接到P2Char code TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xa0,0x83,0xa7,0xa1,0x84,0x8e,0xbf,0x7f}; 0-9,a-f的显示char disp=0x7f; 声明七段显示器初值只显示小数点unsigned char scan[4]={0xef,0xdf,0xbf,0x7f}; 显示器及键盘的扫描码void delay(int); 声明延迟函数void scanner(void); 声明扫描函数main() 主程序{while(1) 无穷循环{scanner(); 一直扫描键盘和显示七段显示器}}void scanner(void) 扫描函数开始{unsigned char col,row,dig; 定义变量col:列,row:行dig:显示位unsigned char rowkey,kcode; 定义变量rowkey:行键值kcode:按键码for(col=0;col<4;col++) for循环扫描第col列{KEYP=scan[col]; 高4位输出扫描信号,低4位输入行值SEG7P=disp; 输出数字rowkey=~KEYP&0x0f; 读入KEYP值,取反,再相与消除高4位00001111if(rowkey!=0) 若按键被按下{ if(rowkey==0x01) row=0; 说明第0行被按下else if(rowkey==0x02) row=1; 说明第1行被按下else if(rowkey==0x04) row=2; 说明第2行被按下else if(rowkey==0x08) row=3; 说明第3行被按下 kcode=4*col+row; 计算出按键的号码disp=TAB[kcode];将键值编码后写入最右侧while(rowkey!=0) 当按钮未放开rowkey=~KEYP&0x0f; 再读入行键值}delay(4); 延迟函数延迟4ms}}void delay(int x) 延迟函数{int i,j; 声明变量i,jfor(i=0;i<x;i++)for(j=0;j<600;j++); 延迟约5ms}[实验总结]总结试验中遇到的问题和问题的解决方法。
单片机课程实验报告模板
微控制器课程实验报告目录实验一:单灯闪烁 (3)实验目的 (3)实验设备 (3)软件程序 (3)效果说明 (6)操作截图 (6)实验二:炮马灯设计 (9)实验目的........................................................................ 错误!未定义书签。
实验设备........................................................................ 错误!未定义书签。
软件程序........................................................................ 错误!未定义书签。
效果说明........................................................................ 错误!未定义书签。
操作截图........................................................................ 错误!未定义书签。
实验一:单灯闪烁目的1.熟悉单片机I/O接口的线路连接。
2.了解如何使用模拟器。
3、学习单片机I/O接口的控制方法。
实验设备一个470欧电阻,一个二极管,一个+5V电源,一个AT89C51。
实验原理一个470欧电阻,一个二极管,一个+5V电源,一个AT89C51,Keil uVision2软件,ISIS 7 专业软件。
软件项目组织机构0000H启动P1.0阿卡德莱_SETB P1.0呼叫延迟AJMP 开始延迟:MOV R5,#4D1:MOV R6,#200D2:移动R7,#123无DJNZ R7,$DJNZ R6, D2DJNZ R5, D1RET结尾硬件电路效果说明单片机的P1.0控制1个LED灯实现其亮灭的变化,时间间隔为0.2s。
键盘扫描显示实验报告
一、实验目的1. 理解键盘扫描的基本原理,掌握键盘扫描的方法。
2. 掌握数码管显示的基本原理,实现键盘扫描信息的实时显示。
3. 熟悉8255并行接口芯片在键盘扫描和数码管显示中的应用。
二、实验原理1. 键盘扫描原理:键盘扫描是指通过硬件电路对键盘按键进行检测,并将按键信息转换为可识别的数字信号的过程。
本实验采用行列式键盘,通过扫描键盘的行线和列线,判断按键是否被按下。
2. 数码管显示原理:数码管是一种用来显示数字和字符的显示器,由多个发光二极管(LED)组成。
本实验采用七段数码管,通过控制各个段(A、B、C、D、E、F、G)的亮灭,显示相应的数字或字符。
3. 8255并行接口芯片:8255是一款通用的并行接口芯片,具有三个8位并行I/O口(PA、PB、PC),可用于键盘扫描和数码管显示的控制。
三、实验设备1. 实验平台:PC机、8255并行接口芯片、行列式键盘、七段数码管、面包板、导线等。
2. 软件环境:汇编语言编程软件、仿真软件等。
四、实验步骤1. 硬件连接:将8255并行接口芯片、行列式键盘、七段数码管连接到实验平台上,按照电路图进行连线。
2. 编写程序:使用汇编语言编写键盘扫描和数码管显示的程序。
(1)初始化8255并行接口芯片:设置PA口为输出端口,PB口为输出端口,PC口为输入端口。
(2)扫描键盘:通过PC口读取键盘的行线状态,判断是否有按键被按下。
若检测到按键被按下,读取对应的列线状态,确定按键的位置。
(3)数码管显示:根据按键的位置,控制数码管的段(A、B、C、D、E、F、G)的亮灭,显示相应的数字。
3. 仿真调试:使用仿真软件对程序进行调试,确保程序能够正确扫描键盘和显示数字。
五、实验结果与分析1. 实验结果:成功实现了键盘扫描和数码管显示的功能。
当按下键盘上的任意按键时,数码管上会显示对应的数字。
2. 分析:(1)键盘扫描部分:通过读取PC口的行线状态,判断是否有按键被按下。
当检测到按键被按下时,读取PB口的列线状态,确定按键的位置。
矩阵键盘显示实验
矩阵键盘显示实验报告20 -20 学年第学期学院电子信息学院课程矩阵键盘显示实验姓名学号指导老师日期 20XX年XX月XX日矩阵键盘显示实验一、实验目的1、掌握矩阵键盘检测的原理和方法;2、掌握按键消抖的方法;3、再次熟悉数码管的显示。
二、实验任务从4×4矩阵键盘输入4位字符(如“15EF”),并显示于4位数码管。
三、实验原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1-1所示。
在矩阵键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
图1-1 矩阵键盘矩阵键盘的按健识别方法很多,其中最常见的方法是行扫描法。
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,下面介绍矩阵键盘的扫描过程。
(1)判断有无键按下第一步:向所有的列输出口线输出低电平;第二步:然后将行线的电平状态读入;第三步:判断读入的行线值。
若无键按下,所有的行线仍保持高电平状态;若有键按下,行线中至少应有一条线为低电平。
(2)去除按键的抖动去抖原理:当判断到键盘上有键按下后,则延时一段时间再判断键盘的状态,若仍为有键按下状态,则认为有一个键按下,否则当作按键抖动来处理。
(3)按键识别(列或行扫描法)在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将列(行)线置为低电平,即在置某根列(行)线为低电平时,其列(行)线为高电平,再逐行(列)检测各行(列)线的电平状态。
若某行为低电平,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。
(4)求按键的键值根据闭合键的行值row和列值col采用计算法(如健值=行号×4+列号)或查表法将闭合键的行值和列值转换成所定义的键值。
电路原理图如下图所示。
图1-2 键盘显示实验电路四、程序流程图五、实验结果及分析总结(1)实验测试效果图如下:(2)分析总结:1、在这次的实验中我们将初始化部分、键盘扫描部分、数码管显示部分等分别写成了独立的函数,这样的程序看起来简洁、明了,在使用的时候直接调用就好了。
实验八 键盘扫描显示实验
实验八键盘扫描显示实验一、实验目的1、了解普通4×4键盘扫描的原理。
2、进一步加深七段码管显示过程的理解。
二、硬件要求1、4×4键盘阵列。
2、FPGA主芯片EP1K30TC144-3。
3、可变时钟源。
4、七段码显示区。
三、实验原理本实验主要完成的实验是完成4×4键盘扫描的,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。
键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。
四、实验内容及步骤本实验内容是完成4×4键盘的扫描,然后将正确的键值进行显示,实验步骤如下:1、编写键盘扫描和显示的VHDL代码。
2、用MaxPlusII对其进行编译仿真。
3、在仿真确定无误后,选择芯片ACEX1K EP1K30TC144-3。
4、给芯片进行管脚绑定,在此进行编译。
5、根据自己绑定的管脚,在实验箱上对键盘接口、显示接口和FPGA之间进行正确连线。
6、给目标板下载代码,在4×4键盘输入键值,观看实验结果。
五、实验连线如果是调用的本书提供的VHDL代码,则实验连线如下:Clk:FPGA工作时钟信号,大约位5KHz至50KHz即可。
Kr[0:3]:分别接4×4键盘部分的R1、R2、R3和R4。
单片机按键实验报告
单片机按键实验报告篇一:单片机按键扫描实验报告键盘扫描一.实验目的(1)掌握矩阵键盘接口电路和键盘扫描编程方法。
(2)掌握按键值处理与显示电路设计。
二.实验任务(1)设计4*4键盘,编写各个键的特征码和对应的键值(0~F);(2)编程扫描按键,将按键对应的数字值使用数码管显示出来。
三.实验电路及连线方法1.采用动态显示连线方法:电路由2 片74LS573,1 个六字一体的共阴数码管组成。
由U15 输出段选码,U16 做位选码,与单片机的采用I/O 口连接方式,短路片J22 连接P2.0,J23 连接P2.3,做输出信号锁存。
(实际电路连接是d7-d6-d5-d4-d3-d2-d1-d0?h-c-d-e-g-b-a-f)。
PW12 是电源端。
2.键盘电路连线方法:电路由16 个按键组成,用P1 口扩展4×4 行列式键盘。
J20 是键盘连接端,连接到P1 口。
J21 是行列键盘、独立键盘选择端,当J21 的短路片连接2-3脚时,构成4×4 行列式键盘;当J21 的短路片连接2-1 脚时,可形成3×4 行列式键盘,4 个独立式按键S4、S8、S12、S16,这4 个独立按键分别连接P1.4~P1.7;其他12 个键3×4 行列式键盘。
PW15 是电源端。
四.编程思路1.采用反转法识别按键的闭合。
2.采用动态显示将键值显示出来。
五.算法流程图六.资源分配1.用P1口进行查找按键2.用R3做键值指针3.用R1做动态显示为选码指针。
4.R5为延时指针。
七.程序设计KPIN:ORG MOV MOV ANL MOV 0000H P1,#0F0H A,P1 A,#0F0H B,AMOVP1,#0FHMOVA,P1ANLA,#0FHORLA,BCJNE A,#0FFH,KPIN1AJMP EXITKPIN1: MOVB,AMOVDPTR,#TABKPMOVR3,#0KPIN2: MOVA,R3MOVC A,@A+DPTRCJNE A,B,KPIN3MOVA,R3LOOP: MOVR1,#0FEH;键盘动态显示 LOOP1: MOVA,R3ANLA,#0FHMOV DPTR,#TABMOVC A,@A+DPTRCLRP2.0CLRP2.1MOVP0,ASETB P2.0NOPCLRP2.0LOOP2: MOVA,R1;位选码MOVP0,ASETB P2.1MOVR5,#250LOOP3: DJNZ R5,LOOP3CLRP2.1SJMP LOOPKPIN3: INCR3CJNE A,#0FFH,KPIN2EXIT: RETTABKP: DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBHDB 0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,67H,0FFHTAB: DB77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH,5FHDB 79H,33H,7CH,3BH,1BHEND八.调试出现的问题及解决问题1:程序正常运行,但按键显示出现乱码解决:动态显示笔形码错误,并改正。
硬件实验七 键盘扫描显示实验
硬件实验七 键盘扫描显示实验
一、实验要求
在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
实验程序可分成三个模块。
①键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:将显示单元的内容在显示器上动态显示。
③主程序:调用键输入模块和显示模块。
二、实验目的
1、掌握键盘和显示器的接口方法和编程方法。
2、掌握键盘扫描和LED 八段码显示器的工作原理。
三、实验电路及连线
这里只是键盘草图,详细原理参见图1
四、实验说明
本实验仪提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的延时,防止键盘抖动。
地址中的X 是由KEY/LED CS 决定,参见地址译码。
做键盘和LED 实验时,需将KEY/LED CS 接到相应的地址译码上。
以便用相应的地址来访问。
例如将KEY/LED CS 信号接CS0上,则列扫描地址为08002H ,行码地址为08001H 。
列扫描码还可以分时用作LED 的位选通信号。
读回行码 (0X001H)
列码
(0X002H)
数据总线
五、实验框图。
单片机实训报告键盘和数码管显示(WORD档)
单片机实训报告(一)班级:测控 9 0 1学号:姓名实验名称:键盘和数码管显示实验目的:熟悉掌握ZLG7289的功能和特性,ZLG7289芯片各引脚名称及功能和ZLG7289与微控制器的接口,ZLG7289的SPI接口和控制指令。
同时进一步熟悉掌握keil软件的操作和编程。
实验原理:ZLG7289是一款数码显示驱动和键盘扫描管理的芯片。
主要有如下的特性:1.直接驱动8位共阴式数码管或64只独立的LED;2.管理多达64只按键,自动消除抖动;3.段电流可达15mA以上,位电流可达100mA;4.具有左移、右移、闪烁、消隐、段点亮等多种功能;5.与微控制器之间采用三线SPI总线接口,占用I/O资源少。
电路主要由芯片ZLG7289、8位共阴极数码管、64键的键盘矩阵以及单片机构成。
ZLG7289的控制电路图:电路的工作原理:当ZLG7289接收到单片机发出的指令(包括纯指令)后,经过读取、分析和处理,将会在数码管上显示相对应的操作指令。
当ZLG7289检测到有效的按键时,KEY脚将从高电平变为低电平,并一直保持到按键结束。
在此期间,如果ZLG7289接收到“读键盘数据指令”,则输出当前按键的键盘代码。
ZLG7289芯片各引脚名称及功能:引脚名称说明1、2 RTCC、Vcc 接电源3、5 NC 悬空4 Vss 接地6 /CS 片选输入端,低电平时,可向其发指令或读键盘。
ZLG7289使用SPI串行总线与微控制器接口。
SPI接口SPI串行总线是Motorola公司推出的一种同步串行接口。
通常它需要四条线,就可与微控制器之间实现全双工的同步串行通讯。
SPI串行总线主要有如下的特性:1.采用主从模式(Master Slave)架构,支持多Slave模式,一般只支持单Master,Master 控制时钟。
2.采用四线,实现全双工通信。
图1 SPI接口连线示意图SPI的数据传输时序模式SPI接口定义了四种数据传输的时序模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。