单片机实验键盘显示
1-单片机键盘与显示电路设计

独立式按键 单片机控制系统中,往往只需要几个 功能键,此时,可采用独立式按键结构。 1.独立式按键结构 独立式按键是直接用I/O口线构成的单 个按键电路,其特点是每个按键单独占 用一根I/O口线,每个按键的工作不会影 响其它I/O口线的状态。独立式按键的典 型应用如图9-3所示。
V CC
P 1.0 P 1.1 P 1.2 P 1.3 P 1.4 P 1.5 P 1.6 P 1.7
P1口某位结构
P1口电路中包含有一个数据输出锁存器、一个三态数据输入缓冲器 、一个数据输出的驱动电路。 P1口的功能和驱动能力
P1口只可以作为通用的I/O口使用;
P1可以驱动4个标准的TTL负载电路; 注意在P1口作为通用的I/O口使用时,在从I/O端口读入数据时,应 该首先向相应的I/O口内部锁存器写“1”。 举例:从P1口的低四位输入数据 MOV MOV P1,#00001111b ;;先给P1口底四位写1 A,P1 ;;再读P1口的底四位
依此规律循环,即可使各位数码管显 示将要显示的字符。虽然这些字符是在不 同的时刻分别显示,但由于人眼存在视觉 暂留效应,只要每位显示间隔足够短就可 以给人以同时显示的感觉。 采用动态显示方式比较节省I/O口,硬 件电路也较静态显示方式简单,但其亮度 不如静态显示方式,而且在显示位数较多 时,CPU要依次扫描,占用CPU较多的时 间。
矩阵式按键 单片机系统中,若使用按键较多时,通 常采用矩阵式(也称行列式)键盘 1.矩阵式键盘的结构及原理 矩阵式键盘由行线和列线组成,按键位 于行、列线的交叉点上,其结构如下图9-4 所示。
+5 V 0 4 8 12 0 1 5 9 13 1 2 6 10 14 2 3 7 11 15 3 0 1 2 3
单片机 键盘接口实验

实验六键盘接口实验一、实验目的1、掌握Keil C51软件与Protues软件联合仿真调试的方法;2、掌握单片机的键盘接口电路;3、掌握单片机的键盘扫描原理;4、掌握键盘的去抖原理及处理方法。
二、实验仪器与设备1、微机一台2、Keil C51集成开发环境3、Protues仿真软件三、实验内容1、用Protues设计一矩阵键盘接口电路。
要求利用P1口接一4×4矩阵键盘。
串行口通过一74LS164接一共阴极数码管。
用线反转法编写矩阵键盘识别程序,用中断方式,并将按键的键值0-F通过串行口输出,显示在数码管上。
2、将P1口矩阵键盘改成8个独立按键,重新编写识别和显示程序。
四、实验说明矩阵键盘识别一般包括以下内容:⑴判别有无键按下。
⑵键盘扫描取得闭合键的行、列号。
⑶用计算法或查表发的到键值;⑷判断闭合键是否释放,如没释放则继续等待。
⑸将闭合键的键值保存,同时转去执行该闭合键的功能。
五、实验步骤1、用Protues设计键盘接口电路;2、在Keil C51中编写键盘识别程序,编译通过后,与Protues联合调试;3、按动任意键,观察键值是否能正确显示。
六、实验电路仿真图矩阵键盘电路图见附录1。
独立按键电路图见附录2。
七、实验程序实验程序见附录3、4。
八、实验总结1、矩阵键盘常用的检测方法有线反转法、逐行扫描法。
线反转法较简单且高效。
在矩阵键盘的列线上接一与门,利用中断方式查询按键,可提高CPU的运行效率。
2、注意用线反转法扫描按键时,得到的键值不要再赋给temp,最好再设一新变量接收键值,否则再按下按键显示数字的过程中,再按按键会出现乱码。
3、学会常用与门、与非门的使用方法。
附录1:矩阵键盘实验电路图附录2:独立按键实验电路图附录3:矩阵键盘实验程序#include <REG51.H>char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};char code KEY_TABLE[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};char code tab1[10]={0xfe,0xde,0x9e,0x9a,0x92,0x82,0x82,0x80,0xff};char temp,num,i,m;int t;bit flag=0;void Delay_ms(t){int i;for(;t>0;t--)for(i=0;i<124;i++);}void main(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1; PT0=1; SCON=0;EX0=1; IT0=1; EA=1;P1=0xf0;while(1){SBUF=tab1[m];while(TI==0); TI=0;Delay_ms(400); //500msm++;if(m==9) m=0;}}void int_1() interrupt 0{P1=0xf0;if(P1!=0xf0){Delay_ms(10);if(P1!=0xf0){temp=P1;P1=0x0f;temp=temp|P1;for(i=0;i<16;i++){if(temp==KEY_TABLE[i]){temp=i; break;}}SBUF=LED_TAB[temp];while(TI==0); TI=0; TR0=1;while(flag==0); flag=0;} } P1=0xf0;}void timer_0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;t++;if(t==300){t=0; flag=1; TR0=0;}}附录4:独立按键实验#include <REG51.H>char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};char code KEY_TABLE2[]={ 0xfe,0xfd,0xfb,0x f7, 0xef,0xdf,0xbf,0x7f,} ;char code tab1[10]={0xfe,0xde,0x9e,0x9a,0x 92, 0x82,0x82,0x80,0xff};char temp,i,m;int t;bit ff;bit flag=0;void Delay_ms(t){int i;for(;t>0;t--)for(i=0;i<124;i++);}void main(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1; SCON=0; EX0=1;IT0=1; PT0=1; EA=1;P1=0xff;while(1){ff=IE0;SBUF=tab1[m];while(TI==0); TI=0;Delay_ms(400);m++;if(m==9) m=0;}}void timer_0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;t++;ff=IE0;if(t==300){t=0;flag=1;}}void int_0() interrupt 0{EX0=0;Delay_ms(10);temp=P1;if(temp!=0xff){for(i=0;i<8;i++){if(temp==KEY_TABLE2[i]){temp=i; break;}}SBUF=LED_TAB[temp];while(TI==0); TI=0;TR0=1; while(flag==0);flag=0; TR0=0;P1=0xff; EX0=1;}}。
单片机实验报告——矩阵键盘数码管显示

单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。
按其它键没有结果。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
5、掌握利用Keil51软件对程序进行编译。
6、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
51单片机键盘数码管显示(带程序)

期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。
8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。
2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。
它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。
A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。
RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。
单片机键盘显示实验报告

单片机的键盘和显示实验报告㈠实验目的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从上面的结果可以看出,本次实验基本完成了实验要求。
带键盘、显示的单片机

封面纸带键盘、显示的单片机中文摘要本设计采用阵列式的键盘输入,用4*4的键盘形式,这样可以有效的减少对单片机I/O口的占用。
显示电路用动态扫描,这样可以减少电路的电能损耗。
软件设计上键盘行送数,列进行读方式,并用查表格方式来获取键值,0~9键定义为数值键、A~F定义为功能键。
显示电路的软件设计用动态显示,当输入为数值时分别从左到右显示各自的键值;当输入为功能键的时候,分别显示左移、右移、闪烁、停止、清零、熄灭的各种不同状态。
关键词:键盘及其显示动态扫描查表法功能键一、方案设计与论证:1设计方案:方案一:完全由硬件构成,通过数字电路来实现。
利用移位寄存器、编码器、计数器、8421BCD码译码器等芯片的组合来搭建电路。
方案二:由PLC加少量外围电路来实现。
利用PLC的可编程,把16个按键的识别信号从PLC机的X0~X15端输入,显示则通过PLC的Y口输出BCD 码分别去驱动八个数码管。
而主要的电路逻辑则由对PLC的编程来实现。
方案三:采用89C51单片机来实现。
单片机软件编程灵活、自由度大,可用软件实现各种算法和逻辑控制。
此方案主要89C51单片机配合少量的外围电路构成。
大体可分为:键盘、数据处理、数码显示三部分。
键盘采用方阵式排列,对于键盘按键识别由89C51中的扫描程序来实现。
数码显示由89C51单片机的I/O口送出的BCD码转换为0,1给74LS164,由74LS164并行驱动8个数码管。
而由一片74LS138配合89C51来选通数码,以实现动态显示。
而大量的数据处理完全由89C51内部程序来完成。
2、方案论证。
比较以上三种方案,方案一是全硬件设计方法,此法电路复杂,使用芯片多,浪费资源,制作困难,也不利于系统的扩展。
方案二采用PLC为核心的设计来实现,同样能完成各种功能,但由于PLC机价格昂贵,不利于小系统的开发。
相比之下,方案三就有很大的优势。
其电路更为简单,器件成本低,调试方便,适合小系统的开发。
单片机原理及接口技术(C51编程)单片机的开关检测、键盘输入 与显示的接口设计

5.2.1 开关检测案例1
图5-3 开关、LED发光二极管与P1口的连接
5.2.1 开关检测案例1
参考程序如下: #include <reg51.h> #define uchar unsigned char void delay( ) {
uchar i,j; for(i=0; i<255; i++) for(j=0; j<255; j++); }
5.1.2 I/O端口的编程举例
03 用循环左、右移位函数实现
OPTION
使用C51提供的库函数,即循环左移n位函数和循环右
移n位函数,控制发光二极管点亮。参考程序:
#include <reg51.h> #include <intrins.h> 函数的头文件 #define uchar unsigned char void delay( ) {
5.1.2 I/O端口的编程举例
#include <reg51.h> #define uchar unsigned char uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd , 0xfe }; /*前8个数据为左移点亮 数据,后8个为右移点亮数据*/ void delay( ) {
// P1口为输入 // 读入P1口的状态,送入state // 屏蔽P1口的高6位
5.2.2 开关检测案例2
switch (state) {
// 判P1口低2位开关状态
(完整版)单片机毕业课程设计---4×4矩阵式键盘识别显示电路的设计

数理与信息工程学院《单片机原理及应用》期末课程设计题目:4×4矩阵式键盘识别显示电路的设计专业:电子信息工程班级:电信061班姓名:姜铮铮学号:指导老师:余水宝成绩:( 2008.12 )目录第1节引言 (2)1.1 4*4矩阵式键盘系统概述 (2)1.2 本设计任务和主要内容 (3)第2节系统主要硬件电路设计 (4)2.1 单片机控制系统原理 (4)2.2 单片机主机系统电路 (5)2.2.1 时钟电路 (4)2.2.2 复位电路 (5)2.2.3 矩阵式键盘电路 (5)2.3 译码显示电路 (6)第3节系统软件设计 (11)3.1 软件流程图 (8)3.2 系统程序设计 (9)第4节结束语 (12)参考文献…………………………………………………………………………1 34*4矩阵式键盘识别显示电路的设计数理与信息工程学院电信061 姜铮铮指导教师:余水宝第一节引言矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。
单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
4*4矩阵式键盘采用AT89S51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。
单片机将检测到的按键信号转换成数字量,显示于LED显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
1.1 4*4矩阵式键盘识别显示系统概述矩阵式键盘模式以N个端口连接控制N*N个按键,实时在LED数码管上显示按键信息。
显示按键信息,既降低了成本,又提高了精确度,省下了很多的IO端口为他用,相反,独立式按键虽编程简单,但占用IO口资源较多,不适合在按键较多的场合应用。
并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键,在这种情况下如果用独立式按键的话,显然太浪费IO端口资源,为了解决这一问题,我们使用矩阵式键盘。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七8255 键盘显示实验【实验目的】1.熟悉8255与单片机的接线和I/O编程方法;2.熟悉数码管的显示原理与编程;3.熟悉8255扫描键盘与读取键值的编程。
【实验内容】使用单片机、8255模块和数码管显示电路,编程实现在数码管上从右至左显示0-5,当有键按下时在数码管最右1位显示按键的键码。
【实验原理与设计】1.硬件电路设计本次实验使用实验箱上的E1、E3和F6模块电路。
如图7.1所示。
E1E3F6图7.1 实验箱(1)8255模块(E3区)PA口作为位扫描口(键扫描口),PB口输出字形码,PC口作为键值读入口,与数码管显示电路和矩阵键盘模块电路(F6区)相应接口连接,8255的数据总线D0-D7、读(/RD)、写(/WR)、端口选择A0、A1和片选/CS已和单片机接好。
各端口地址如下:PA口:0FF28H;PB口:0FF29H;PC口:0FF2AH;控制口:0FF2BH单片机与8255模块电路连接图如图7.2所示。
图7.2 单片机与8255的电路连接(2)数码管显示电路(F6区)实验箱上提供的数码管显示电路如图7.3所示。
实验时需将数码管显示电路中的JLED与8255的PB口相连,JS与8255的PA口相连,JLED和JS分别位于E6区,同时E6区SW3、SW4和SW4红色拨码开关打在“OFF”位置。
图7.3数码管模块连接电路(3)矩阵键盘模块电路(F6区)实验箱上提供的矩阵键盘模块电路如图7.4所示,实验时将该电路中的JR(位于E6区)与8255的PC口相连。
图7.4矩阵键盘模块电路2.程序设计根据实验内容程序主流程图如图7.5所示。
图7.5 主程序流程图(1)初始化MOV A, #81H ;PA口(位扫描口)和PB口(字形码)做输出,PC口(键扫描口)做输入MOV DPTR, #0FF2BH ;实验箱接线决定8255的控制口地址为FF2BHMOVX @DPTR, A ;将命令字82H送给8255控制口确定各口工作方式(2)显示数据子程序显示数据子程序流程图如图7.6所示。
图7.6 显示子程序流程图实验箱数码管是共阴极的,但数码管的接口电路(74LS240,754510)决定了PB口应输出共阳码,将数据共阳码作成数据表利用查表指令得到显示数据的码值;PA口应输出低电平扫描信号,数码管才能正确显示数据;每一位数码管选通时间应保持在1-5ms之内(建议2ms),PA口轮扫一遍的时间不应超过20ms;参考程序如下:DISPLAY:MOV R0, #00H ;显示第一位数据0,R0为显示的数据MOV R1, #0FEH ;位扫描初值,最右位先显示,R1为显示的位数MOV R2, #06 ;6位数码管显示0~5,R2为循环次数NEXT: MOV A, R1 ;位扫描数据送给AMOV DPTR, #0FF28H ;PA口(位扫描口)地址送给DPTRMOVX @DPTR, A ;位扫描数据送给PA口RL AMOV R1, A ;位扫描数据左移准备显示下一个数据MOV A, R0 ;显示数据送A用DPTR查表指令查字形码MOV DPTR, #DMTAB ;共阳码数据表表头赋予DPTRMOVC A, @A+DPTR ;单字节表,因此A里的显示数据即为偏移量MOV DPTR, #0FF29H ;PB口(字形码)地址送给DPTRMOVX @DPTR, A ;输出字形码送PB口LCALL DELAY2MS ;所输出一位数据保持2msMOV A, #0FFHMOV DPTR, #0FF29HMOVX @DPTR, A ;将全灭字形码送当前显示为意于消隐INC R0 ;准备下一个显示数据DJNZ R2, NEXT ;判断6位显示完否?RETDMTAB:DB C0H,0F9H,0A4H, 0B0H,99H,92H, 82H,0F8H,DB 80H, 90H,88H,83H, 0C6H,0A1H,86H,08EH ;0~F共阳码数据表,此表最好放在显示子程序之后DELAY2MS: MOV R6, #4 ; 1×1=1usDly1: MOV R7, #250 ; 1×1×4=4usDJNZ R7, $ ; 2×1×250×4=2msDJNZ R6, Dly1 ; 2×1×4=8usRET ;延时2ms子程序(3)扫描键盘扫描键盘时让PA口输出00H,读PC口数值,通过判断它的值是否等于03H来判断是否有键按下;当检测到有按键后,延时10~20ms再判断一次是否有键按下以消除抖动。
扫描键盘子程序流程图如图7.7所示。
图7.7 扫描键盘子程序流程图判断是否有键需要设置标志位,可以用PSW.5用户标志位F0作有键标志位,由图7.4可知实验箱上16个按键分别接PC0和PC1上,如果有按键这两位肯定不是1,PC的其它位与这16个按键无关可屏蔽清零。
参考程序如下:SCAN_KEY: MOV DPTR, #0FF28HMOV A, #00HMOVX @DPTR, A ;PA口输出00HMOV DPTR, #0FF2AHMOVX A, @DPTR ;读PC口数据ANL A, #03H ;屏蔽PC口高6位PC2~PC7清零CJNE A, #03H, SCAN2 ;16个按键分别接PC0和PC1上,如果有按键这两位肯定不是1SJMP NEXT1 ;等于03H没有按键子程序返回SCAN2: LCALL DELAY20MS ;不等于03H调延时消抖MOVX A, @DPTR ;延时后再次读PC口数据ANL A, #03HCJNE A, #03H, KEY ;延时后不等03H说明真的有键按下将有键标志位置1SJMP NEXT1 ;延时相等说明只是抖动没有真的按键按下子程序返回KEY: SETB F0 ;用户标志位F0作为有键按下标志位置1NEXT1: RET ;子程序返回DELAY20MS: MOV R6, #40 ; 1×1=1usDly1: MOV R7, #250 ; 1×1×40=40usDJNZ R7, $ ; 2×1×250×40=20msDJNZ R6, Dly1 ; 2×1×40=80usRET ;延时20ms子程序(4)读键值PA口8根口线分列输出0,PC口读入,根据PC口读入的数据和扫描的PA口列数值确定键值。
为确保再次判断是否有键按下读键值前要将有键标志位F0清零。
读键值子程序流程图如图7.8所示。
图7.8 读键值子程序流程图因为实验箱按键不是按照4*4标准键盘接的,16个按键只接在2根线上没有规律可循,所以不用按照行号加列号得到键值,因此本实验中将16个按键按照行编成键值表,表中前8位是PC0行上的按键,后8位是PC1行上的按键,由图7.4可知它们分别是07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH,0CH,0DH。
参考程序如下:READ_KEY: CLR F0 ;清有键按下标志位MOV R3, #0FEH ;PA口第0列输出0,从该列开始判断MOV R6, #00H ;列数存R6里MOV R4, #08H ;PA口扫描总列数KEYSM1: MOV A, R3MOV DPTR, #0FF28HMOVX @DPTR, A ;列扫描信号送给PA口RL A ;准备下列扫描信号MOV R3, A ;列扫描信号暂存R3中MOV DPTR, #0FF2AHMOVX A, @DPTR ;读PC口数据按键ANL A, #03H ;屏蔽高6位只判断PC0和PC1CJNE A, #03H, JSADD ;判断所扫描列是否有按键否INC R6 ;列数加1DJNZ R4, KEYSM1 ;相等没键按下扫描下一列SJMP NEXT2 ;所有列扫描完后退出读键值子程序JSADD: JNB ACC.0,KEY_PC0 ;A的值为PC口数据,通过判断ACC.0是否为0来判断按键是否是PC0行的JNB ACC.1,KEY_PC1 ;A的值为PC口数据,通过判断ACC.1是否为0来判断按键是否是PC1行的SJMP NEXT2 ;两行都不是退出读键值子程序KEY_PC0: MOV A, R6 ;PC0行的按键只有扫描列数作为查表偏移量LJMP CJH ;查表获取键号KEY_PC1: MOV A, R6ADD A, #8 ;PC1行的按键查表偏移量是扫描列数加8CJH: MOV DPTR, #KEYTAB ;表头地址赋予DPTRMOVC A, @ A + DPTR ;查表取出键码MOV R5, A ;保存键号到R5中NEXT2: RETKEYTAB:DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH,0CH,0DH(5)显示键码按实验内容要求把键号送最低位(最左边)显示,其它数码管均不显示即可,参考程序如下:DISP_KEY: MOV A, #0FEHMOV DPTR, #0FF28HMOVX @DPTR, AMOV A, R5MOV DPTR, #DMTABMOVC A, @A+DPTRMOV DPTR, #0FF29HMOVX @DPTR, ALCALL DELAY2MSRET【实验操作步骤】1.接线连接各实验模块,SW3、SW4、SW5拨向“OFF”。
连接仿真器,开实验箱电源。
2.查询串口号,设置波特率,打开KEIL3软件,建立工程,并进行工程设置;3. 输入、编辑源程序,编译、连接和调试;4. 程序调试:1) 执行“单步/宏单步”命令,观察记录0-5数字显示的过程;2) 连续运行程序,观察记录数字显示状态;3) 按键,观察记录显示按键的结果;4) 改变扫描周期的时间,观察记录数码管显示的效果。
5.根据实验报告要求,完成实验报告;6. 退出调试软件,关闭实验箱电源,拆线整理实验箱,关闭计算机,完成实验报告并上交。
【实验总结】1.本实验中显示使用的是共阴码还是共阳码,要显示数字6时,8255的PB口应输出的数据时多少?2.键盘可分为哪两类?本实验用的是什么类型键盘?【预习报告】(1)实验题目、实验人姓名、班级、学号、实验时间、实验地点。
(5分)(2)硬件电路的连接,包括各实验模块在实验箱上的位置和各模块电路之间的接线说明。
(15分)(3)实验内容要求、主程序流程图(相关子程序流程图可省略)及源程序(完整连贯程序,不允许分段写)。
(40分)流程图要求图用尺画,程序手写,没有流程图和程序不允许做实验。
【实验报告】在预习报告基础上完成以下内容:(5)实验调试程序的操作步骤和调试过程中出现的问题与解决。