1、1602键盘显示摘要在日常生活中,我们经常要通过按键来实现对电子装置的控制,小到手表手机,中到电视电脑,大到各种复杂仪器,都需要通过按键来实现各种操作。本次课程设计作为实践教学的一个重要环节,将以按键控制显示为主题,以1602液晶、MM74C922解码芯片、AT89C52单片机及其接口芯片为核心构造一个键盘控制显示系统,并使用Proteus软件对所设计的电路进行仿真,仿真结果是在1602液晶上显示所按下的键值。关键词:Proteus仿真 AT89C52 1602液晶 MM74C922解码芯片第一章 总体设计1.1电路结构分析本次设计的目标为单片机控制的键盘识别显示系统,主要采用AT89C52单
2、片机作为核心,由矩阵键盘电路、译码芯片、液晶显示等模块构成,分别对按键信息和显示电路以及软、硬件各个部分进行控制;本设计采用C言编程来实现对单片机的控制。实际运作时,单片机会将检测到的按键信号转换成数字,显示于1602液晶上。系统主要结构可以拆分如下: 矩阵键盘:按键传送输入信息;此键盘采用的是4X4矩阵键盘,能输入09,+,=,空格,返回,清零。 键盘识别:矩阵键盘连接的是MM74C922解码芯片,通过解码芯片来识别输入的按键位置。 AT89C52:采用软件编程来实现按键信息的提取和转换; 1602液晶:用于显示最终被单片机转换过的按键信息。 由以上构思可以设计此按键显示电路。1.2总体方案
3、设计总体电路原理框图:如图 1.2所示图1.2总体电路原理方框图 本次设计分两步来完成,第一步,解码芯片调试系统,将解码芯片接口连接到矩阵键盘作为AT89C52单片机的输入装置,然后以P2口作为输出端并连接一个数码管观察输出结果。第二步,1602的液晶调试系统,此过程就是将数码管换成1602液晶在进行结果显示。1.3蜂鸣器模块设计蜂鸣器模块设计 如图 1.3所示图 1.3 蜂鸣器模块电路图蜂鸣器的驱动电流比较大一般要500MA1000MA,所以不能直接接在AT82C52单片机的接口上,需要加一个三极管来进行驱动。发声源程序如下:#define BEEP() P1=0x80 /蜂鸣器定义void
4、 Sounder() /发生函数INT8U i;for(i=0;i100;i+) delay(3);BEEP(); 1.4电路图设计1.4.1解码芯片调试系统电路图如图1.3.1所示: 图 1.4.1解码芯片调试系统电路图此电路图为解码芯片调试系统电路图,按键位置是由解码芯片进行识别。当按下K0键时,解码芯片进行采集DCBA端输出 0000,表示第一个键按下,OA允许输出端为高电平有效,此时蜂鸣器发声提示,数码管则显示0。K9键按下时,解码芯片DCBA端输出0008,表示第九个键按下,OA允许输出端为高电平有效,此时蜂鸣器发声提示,数码管则显示9。KF键按下时,解码芯片DCBA端输出0015示
5、第九个键按下,OA允许输出端为高电平有效,此时蜂鸣器发声提示,数码管则显示F。仿真结果能完成上述功能,则证明调试成功。1.4.2 总体电路图 如图1.3.2所示 图 1.4.2 总体电路图 此电路为总体电路图设计,当有键按下时,解码芯片会对按键进行识别,并发送相应的代码到P3口,此时蜂鸣器发声提示,经过单片机的处理,按键的值会在1602液晶上进行显示。如果仿真结果能完成上述功能,则证明调试成功。第二章 硬件电路2.1 MM74C922解码芯片2.1.1MM74C922特点及引脚功能MM74C922具有下列特点:1.功耗低,电压35V;2.三态门输出,与LPTTL兼容;3.输出锁存按下的最后的键
6、;4.用一个电容器就可以消除键盘抖动;5.两键轮回;6.行具有上拉功能;7.具有芯片内或芯片外时钟;8.最大开关电阻为50K。MM74C922采用18脚双列直插封装,其引脚排列如图2.1.1所示。各引脚功能如下: Y1Y4为行键输入端;X1X4为列键输入端;OSC为振荡器的外接引线端,可用外部的输入脉冲或电容器;DADD为数据输出端,可与微机直接接口;KBM为键颤屏蔽端; _OE为数据输出允许端,低电平有效;DAV为数据输出有效,高电平有效;VCC为电源端, 接35V;GND为接地端。 Y1 VCC Y2 DA Y3 DB Y4 DC OSC DD KBM OE X3 DAV X4 X1 GN
7、D X2 图2.1.1 MM74C922引脚排列图2.1.2MM74C92真值表如表2.1.2所示 表2.1.2 MM74C922真值表开关位置数据输出开关位置 数据输出D C B AD C B A0(Y1X1)0 0 0 08(Y3X1)1 0 0 01(Y1X2)0 0 0 19(Y3X2)1 0 0 12(Y1X3)0 0 1 010(Y3X3)1 0 1 03(Y1X4)0 0 1 111(Y3X4)1 0 1 14(Y2X1)0 1 0 012(Y4X1)1 1 0 05(Y2X2)0 1 0 113(Y4X2)1 1 0 16(Y2X3)0 1 1 014(Y4X3)1 1 1 0
8、7(Y2X4)0 1 1 1 15(Y4X4)1 1 1 1 键盘扫描可采用外部时钟或外接电容来执行。译码器具有芯片的上拉电阻,使开关电阻可以高达50k。开关矩阵中不需要二极管就可以消除多重开关,内部消颤电路仅需要一个单一电容就可以实现。当有键按下时,数据输出有效为高电平;当键释放后,数据输出有效返回到低电平。即使有另外一个键按下,在正常消颤期间后,数据输出有效返回至高电平表明接受新的键输入。在任何两个开关之间备有两键轮回功能。即使某一键释放,内部锁存器仍然锁存住按下的最后的键值。三态门输出便于总线的扩展和运行。2.21602液晶 2.2.1 1602液晶功能引脚 如图2.2.1所示 图 2.
9、2.1 1602液晶功能引脚2.2.2液晶命令集及双行液晶DDRAM地址 如表2.2.2所示 表 2.2.2 液晶命令集及双行液晶DDRAM地址命令 命令位功能RSR/W DB7DB0复位显示器0000000001清屏,光标归位光标归位000000001*设地址计数器清零,DDRAM数据不变,光标移动到左上角字符进入模式00000001I/DS设置字符进入时的屏幕移位方式显示开关0000001DCB设置显示开关,光标开关,闪烁开关显示光移位000001S/CR/L*设置字符与光标移动功能设置00001DLNF*设置DL,显示行数,字体设置CGRAM地址0001CGRAM地址设置6位的CGRAM
10、地址值以读/写数据设置 DDRAM地址001DDRAM地址设置7位的CGRAM地址值以读/写数据命令命令位功能RSR/WDB7DB0忙标志/地址计数器01BF由最后写入的DDRAM或CGRAM地址设置指令设置的DDRAM/CGRAM地址读忙标志及地址计数器CGRAM/DDRAM 写数据1 0写入字节数据(先设置RAM地址)向CGRAM/DDRAM写入字节数据CGRAM/DDRAM 读数据11读取字节数据(先设置RAM地址)从CGRAM/DDRAM读取字节数据RS为寄存器选择位RS=0时选择命令寄存/状态寄存器,RS=1时选择数据寄存器I/D=1递增,I/D=0递减S=0时显示屏不移动,S=1时
11、,如果I/D=1且有字符写入时显示屏左移,否则右移D=1显示屏开开,D=0显示屏关C=1时光标处现在地址计数器所指的位置,C=0时光标不出现B=1时光标出现闪烁,B=0光标不闪烁S/C=0时,RL=0则光标左移,否则右移S/C=1时,RL=0则字符和光标左移,否则右移DL=1时数据长度为8位,DL=0时为使用D7D4共4位,分两次发送一个字节N=0为单行显示,N=1时为双行显示F=1时为5x10点阵字体,F=0时为5x7点阵字体BF=1时LCD忙,BF=0时LCD就绪 双行液晶的DDRAM地址 2x20 LCD DDRAM(8093/C0E3)2x16 LCD DDRAM(808F/C0CF)
12、2x8 LCD DDRAM(8087/C0C7)808182838485868788898A8B8C8D8E8F90919293C0C1C2C3C4C5C6C7C8C9CACBCCCDCEDFD0D1D2D3 2.2.3基本操作时序1).读状态: 输入: RS=L,W=H,E=H 输出:DB0DB7=状态2)写指令: 输入: RS=L,RW=L,DB0DB7=指令码,E=高脉冲 输出:无3) 读数据: 输入: RS=H,RW=H,E=H 输出:DB0DB7数据4) 写数据: 输入: RS=H,RW=L,DB0DB7数据,E=高脉冲 输出:无2.2.3初始化过程1)延时 15ms2)写指令 38
13、H(不检测忙信号)3)延时5ms4)写指令 38H(不检测忙信号)5)延时 5ms6)写指令 38H(不检测忙信号)7)(以后每次写指令、读/写数据操作之前均需检测忙信号)8)写指令 38H:显示模式设置9)写指令 08H:显示关闭10)写指令 01H:显示清屏11)写指令06H: 显示光标移动设置12)写指令0CH: 显示开及光标设置2.2.3读操作时序读操作时序 如图2.2.4所示 图 2.2.4读操作时序 读操作程序如下:void Read_LCD_Command(INT8U cmd) /读命令 LCD_BUSY_WAIT(); RS_0(); RW_0(); P2=cmd; delay
14、(5); EN_1(); EN_0();void Read_LCD_Data(INT8U dat) /读数据LCD_BUSY_WAIT();RS_1();RW_0();P2=dat;delay(5);EN_1();EN_0();2.2.5写操作时序 写操作时序图 如图2.2.5图 2.2.5 写操作时序图 写操作程序如下:void Write_LCD_Command(INT8U cmd) /写命令 LCD_BUSY_WAIT(); RS_0(); RW_0(); P2=cmd; delay(3); EN_1(); EN_0();void Write_LCD_Data(INT8U dat) /写
15、数据LCD_BUSY_WAIT();RS_1();RW_0();P2=dat;delay(3);EN_1();EN_0();2.3 AT89C52单片机AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。 AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个
16、外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。实际引脚连线的部分如图2.3图 2.3 AT89C52单片机2.4 数码管译码电路中常用的显示器有LED(数码管)和LCD(液晶显示器)。这两种显示器都具有线路简单、耗电少、成本低、寿命长等优点。本系统输出结果选用1个七段数码管显示。数码管有共阴共阳之分,本系统采用共阴型。LED的外形结构如图2.4,外部有10个引脚,其中GND脚为公共端也称位选端,其余8个引脚称
17、为段选端,当要使某一位数码管显示某一数字(0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。图2.4 LED数码管结构 如下表2.4即两种数码管中数字显示对应的段码:表2.4 LED显示段码 字型共阳极段共阴极段字型共阳极段共阴极段0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H 第三章 解码芯片调试系统3.1 解码芯片调试系统
18、的4X4矩阵键盘设计,接线图如3.1所示 图 3.1 解码芯片调试系统的4X4矩阵键盘设计电路图3.2 解码芯片的接口设计,如图3. 2所示解码芯片的A、B、C、D口接P1.0P1.4, OE口接地始终保持拉低,OA口接P1.7发送允许信号,X1X4,Y1Y4,分别与矩阵键盘的X,Y端口相接。图 3.2 解码芯片接口设计电路图3.3 数码管的接口设计,如图3.3所示 数码管的ag端接在P2.0P2.7端作为输出显示 图 3.3 数码管的接口设计电路图3.4解码芯片软件流程图解码芯片软件流程图 如图3.4所示 图 3.4 解码芯片调试系统软件流程图3.5解码芯片调试系统源程序代码#include
19、 #define INT8U unsigned char#define INT16U unsigned int#define BEEP() P3=0x80 /蜂鸣器定义#define Key_Pressed (P1 & 0X80)=0X80) /判断是否有键按下#define Key_NO (P1 & 0X0F) /判断键值INT8U code SEG_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; void delay(INT16U ms) /延时程序 INT8U i
20、,j; for(i=0;ims;i+) for(j=0;j110;j+); void Sounder() /蜂鸣器INT8U i;for(i=0;i100;i+) delay(5);BEEP();void main()P1=0XFF;P0=0x00;P2=0X00;P3=0XFF;while(1)if(Key_Pressed)P2=SEG_CODEKey_NO; /显示键值Sounder();此程序可以完成4X4矩阵键盘上任意键的显示即0F的先显示,当有按键按下时,蜂鸣器会进行按键提示。3.6解码芯片调试系统仿真分析 图 3.6.1 0显示图 当按下K0键时,数码管显示结果 图 3.6.2 9
21、显示图当按下K9按键时,数码管显示的结果 图 3.6.3 F显示图当按下KF按键时,数码管显示的结果第四章 1602液晶显示系统4.11602液晶显示的4x4矩阵键盘设计, 如图 4.1 图 4.1 1602液晶显示系统的4x4矩阵键盘设计 因为1602液晶远远比数码管的功能强大,可以显示更多符号,所此键盘设计不仅保留了09个数字而且还加入了“+ - = 空格 撤销 清屏”等操作。解码芯片的连线设计和图3.2一样在此不再重复。4.21602液晶显示系统接口电路图设计 如图4.2所示 图 4.2 1602液晶显示系统接口电路图 1602液晶的D0D7引脚接在P2.0P2.7口,RS、RW、E、引
22、脚则分别接在P1.0、P1.1、P1.2口。4.31602液晶显示系统软件流程图 1602液晶显示软件流程图 如图4.3 图 4.3 1602液晶显示系统软件流程图4.4 1602液晶显示系统的源程序代码#include #include #define INT8U unsigned char#define INT16U unsigned int#define BEEP() P1=0x80 /蜂鸣器定义#define Key_Pressed()(P3 & 0X10)!=0x00) /判断是否有键按下#define Key_NO (P3 & 0X0F) /获取键值#define RS_1() R
23、S=1#define RS_0() RS=0#define RW_1() RW=1#define RW_0() RW=0#define EN_1() EN=1#define EN_0() EN=0sbit RS=P10; /寄存器选择sbit RW=P11; /读/写sbit EN=P12; /使能extern void Initialize_LCD(); /液晶初始化extern void LCD_ShowString(INT8U x,INT8U y,char *str); /字符串显示char code CHAR_Table=0123456789+-= ; /定义键值char Disp_S
24、tring17;void delay(INT16U ms) /延时函数 INT8U i,j;for(i=0;ims;i+) for (j=0;j110;j+); void Sounder() /发生函数INT8U i;for(i=0;i100;i+) delay(3);BEEP(); void LCD_BUSY_WAIT() /忙等待INT16U i; RS_0();RW_1();P2=0X00;EN_1();delay(3);for(i=0;i20;i+) if(P2 & 0x80) = 0)/D7=0 表示LCD控制器空闲,则退出检测 break; EN_0();P2=0XFF;void
25、Write_LCD_Command(INT8U cmd) /写命令寄存器 LCD_BUSY_WAIT(); RS_0(); RW_0(); P2=cmd; /delay(5); EN_1(); EN_0();void Write_LCD_Data(INT8U dat) /写数据寄存器LCD_BUSY_WAIT();RS_1();RW_0();P2=dat;/delay(5);EN_1();EN_0();void Initialize_LCD() /初始化Write_LCD_Command(0X38); /置功能;8位,双行,5x7Write_LCD_Command(0X01); /清屏Writ
26、e_LCD_Command(0X06); /自负进入模式:屏幕不动,字符后移Write_LCD_Command(0X0C); /显示开,关光标void LCD_ShowString(INT8U x,INT8U y,char *str) /显示函数INT8U i=0;if(y=0)Write_LCD_Command(0x80|x);elseif(y=1)Write_LCD_Command(0xC0|x);for(i=0;i16 & stri!=0;i+) Write_LCD_Data(stri);void main() char c; INT8U sLen; P1=0x00; /P3=0x00;
27、 P3=0xFF; Initialize_LCD(); LCD_ShowString(0,0,-08101.lb.20-);while(1) if(Key_Pressed() sLen=strlen(Disp_String); if (Key_NO=0x0D) /处理0x000x0D Sounder(); c=CHAR_TableKey_NO; if(sLen0)Disp_StringsLen-1=0; Sounder(); break; case 0x0F: Disp_String0=0; Sounder(); break; LCD_ShowString(0,1, ); LCD_ShowString(0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1