液晶1602显示矩阵键盘
- 格式:doc
- 大小:27.00 KB
- 文档页数:3
一、原理图:二、程序#include<reg51.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件#include<math.h>sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P1^7; //忙碌标志位,#define NO_KEY_PRESS 0xff/********************************************************************************************************/unsigned char code tab[]={0xb7,0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb};unsigned long num1,num2,alg;unsigned char flag;void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<15;j++);}/********************************************************************************************************/void delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。
1602字符型液晶显示器在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
1602字符型LCD简介:字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。
一般1602字符型液晶显示器实物如图10-53:图10-53 1602字符型液晶显示器实物图1602LCD的基本参数及引脚功能:1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:图10-54 1602LCD尺寸图1602LCD主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 数据2 VDD 电源正极10 D3 数据3 VL 液晶显示偏压11 D4 数据4 RS 数据/命令选择12 D5 数据5 R/W 读/写选择13 D6 数据6 E 使能信号14 D7 数据7 D0 数据15 BLA 背光源正极图10-55 读操作时序图10-56 写操作时序1602LCD的RAM地址映射及标准字库表:液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
1602液晶显示器资料字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的。
而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。
在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。
所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602液晶的正面(绿色背光,黑色字体)1602液晶背面(绿色背光,黑色字体)另一种1602液晶模块,显示屏是蓝色背光白色字体字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:DDRAM地址与显示位置的对应关系(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。
这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H 地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。
1602液晶资料介绍1602液晶是一种常见的字符型液晶显示模块,它具有两行、每行16个字符的显示能力。
由于其简单易用的特点,1602液晶广泛应用于各种嵌入式系统和电子设备中。
在本文档中,将介绍1602液晶的主要特性、技术规格以及使用方法,并提供一些常见问题的解答。
技术规格•显示模式: 2行16字符•字符尺寸: 5x8 点阵•工作电压: 5V•控制芯片: HD44780 或兼容芯片•接口类型: 并行接口•提供背光功能引脚定义1602液晶模块一般使用16个引脚进行连接,其中包括数据线、控制线和背光线。
以下是常用引脚的定义:•VSS: 电源接地•VDD: 电源正极•VO: 对比度调节•RS: 命令/数据选择•RW: 读/写选择•E: 使能端•D0-D7: 数据线•A: 背光阳极•K: 背光阴极使用方法下面介绍使用1602液晶的基本步骤:1.连接引脚:将1602液晶的引脚与你的控制器或其他设备连接。
确保引脚连接正确,并检查电源连接。
2.初始化液晶:在使用液晶前,需要进行初始化操作。
这一步骤一般包括设置显示模式、光标模式和清屏等。
3.发送数据:使用你的控制器发送字符和命令到1602液晶。
根据需要,可以显示特定的字符、字符串或其他控制命令。
4.控制光标:如果需要控制光标的位置,可以发送相应的命令来移动光标。
5.清屏:当需要清除屏幕内容时,发送清屏命令即可清空显示区域。
示例代码以下示例代码演示了如何使用Arduino控制1602液晶显示模块:```cpp #include <LiquidCrystal.h>// 初始化液晶对象 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);void setup() { // 设置液晶的列数和行数 lcd.begin(16, 2);// 在第一行显示文本 lcd.print(。
1602液晶1602液晶是一种常用的液晶显示模块,它是基于蓝色背光的字符型液晶显示器。
该显示模块由一块16列2行的液晶和一个控制芯片组成,能够显示32个字符。
它广泛应用于各种电子设备,如数字电子秤、温湿度计、计时器等。
1602液晶具有显示效果清晰、功耗低、驱动方式简单等特点。
它采用了反射式的LCD技术,配合背光源进行光学调节,能够在不同的环境光照条件下显示清晰。
同时,1602液晶还具有较低的功耗,适用于需要长时间显示文字内容的应用。
它的驱动方式也相对简单,只需通过控制芯片发送指令和数据即可实现文字的显示。
在1602液晶的控制芯片中,有一个上升沿触发的自动读写功能,可以简化控制电路,减少外接元件。
另外,该芯片还具备多种显示模式和字符设置的功能,可以满足不同需求。
1602液晶模块的引脚布局合理,使用起来比较方便。
一般来说,其中的15个数字引脚分别是:VSS、VDD、VO、RS、R/W、E、D0~D7。
通过这些引脚,可以与单片机等设备进行连接,并实现对液晶的控制。
为了方便使用,一些供应商还会在1602液晶模块中加入一个IIC 接口转换电路,使得其可以通过IIC总线与其他设备通信。
这样一来,就不需要繁琐的接线,只需通过串行通信即可实现与其他设备的数据交互。
这样的设计更加灵活,适用于一些对数据传输速度要求较高的场景。
然而,需要注意的是,1602液晶模块本身不具备自动换行和滚屏的功能,因此在使用时需要通过程序控制来实现。
另外,虽然1602液晶模块可以显示字符,但对于图形等更复杂的显示内容则无能为力。
因此,在一些需要显示更丰富信息的应用中,可能需要其他类型的显示模块来替代。
总之,1602液晶是一种常见的液晶显示模块,具备显示效果清晰、功耗低、驱动方式简单等优点。
它能够满足一些基本的显示需求,适用于各种电子设备。
但需要注意的是,它在一些功能方面还存在一定的限制。
随着技术的不断发展,未来可能会出现更先进、功能更完善的显示模块。
1602 LCD显示电话拨号键盘按键概述本文档介绍了1602 LCD显示电话拨号键盘按键的设计方案及其主要功能。
该方案主要由硬件部分和软件部分组成,硬件部分包括1602液晶显示屏、电话拨号键盘、Arduino板、面包板等;软件部分主要使用Arduino IDE编程,实现LCD屏幕显示、按键检测等功能。
该方案能够检测电话拨号键盘的按键状态并在1602 LCD显示屏上显示对应按键。
设计方案硬件部分硬件部分主要包括以下几个方面:1. 1602液晶显示屏1602液晶显示屏是本方案的显示设备,通过数根引脚与Arduino板相连。
在本方案中,主要利用它显示电话号码和被按下的按键。
2. 电话拨号键盘电话拨号键盘是本方案的主要输入设备,它可以检测到被按下的按键,并将这些信息通过引脚连接Arduino板。
3. Arduino板Arduino板是本方案的主要控制器,它和显示设备、输入设备之间互相连接,通过Arduino IDE编程,实现程序运行、数据传输等功能。
4. 面包板面包板主要是为了方便电路的连接和调试,以及充分利用现成的模块和元器件。
软件部分软件部分主要使用Arduino IDE编程,实现以下几个方面的功能:1. 显示屏幕显示利用Arduino IDE编程,控制1602液晶显示屏上显示电话号码、被按下的按键等相关信息。
2. 按键事件检测利用Arduino IDE编程,通过对电话拨号键盘输入端口的状态检测,实现对按键事件的识别。
主要功能1. 显示电话号码本方案所设计的1602 LCD显示屏,通过数根引脚与Arduino板相连。
在本方案中,主要利用它显示电话号码和被按下的按键。
2. 按键检测利用Arduino IDE编程,通过对电话拨号键盘输入端口的状态检测,实现对按键事件的识别。
当电话拨号键盘检测到按键事件,则通过Arduino板进行响应,并在1602 LCD显示屏上显示对应按键信息。
本文介绍了1602 LCD显示电话拨号键盘按键的设计方案及其主要功能。
《单片机原理及应用课程设计》报告——利用矩阵键盘来控制1602液晶显示器的显示设计2011年12 月7 日目录1.课程设计的目的12.课程设计的要求3.硬件设计3.1设计思想3.2主要元器件介绍3.3.功能电路介绍3.31 1602液晶显示器3.32 3*4矩阵键盘(1)矩阵式键盘的结构与工作原理(2)矩阵式键盘的按键识别方法4.软件设计4.1设计思想4.2软件流程图4.3源程序:5.调试运行6.设计心得体会:1.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2.课程设计要求2.1在3*4矩阵键盘上输入信息2.2在1602芯片上显示时间信息。
2.3显示数据的设计与变换3.硬件设计3.1设计思想在3*4矩阵键盘上输入信息,通过中央处理器处理信息,再通过1602液晶显示器显示信息。
3.2主要元器件介绍(1)电源电路(2)STC89C82RC单片机一块。
(3)1602液晶显示器一块(4)杜邦线若干。
(5)3*4矩阵键盘3.3.功能电路介绍3.31 1602液晶显示器液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。
1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。
1602外观如下图所示1602引脚说明注意事项:从该模块的正面看,引脚排列从右向左为:15脚、16脚,然后才是1-14脚(线路板上已经标明)。
VDD:电源正极,4.5-5.5V,通常使用5V电压;VL:LCD对比度调节端,电压调节范围为0-5V。
2、超详细矩阵键盘控制1602程序实例说明(带电路图)By 即墨天2 一、电路图/*----------------------------------------------//程序功能:通过矩阵键盘在LCD1602任意位置输入0~9,且可通过光标二次修改;------------ 能退格,能清除显示,还能自己任意定义16个按键的意义.//调试状态:仿真实现//时间:2014-7-25-----------------------------------------------*/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit Lcd_RS = P2^0;sbit Lcd_RW = P2^1;sbit Lcd_EN = P2^2;uchar code table[] = "51201314" ;uchar code table1[] = "20140815" ;uchar code key16[]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77} ; //该键盘特征码是在特定的接线下有效,请参见电路原理图uchar key_number;void delayMS(uint x){uchar i;while(x--) for(i = 0; i < 120; i++);}//----------------------------------------------//忙检查//-----------------------------------------------bit Busy_Check(){bit state;Lcd_RS = 0;Lcd_RW = 1;Lcd_EN = 1;delayMS(1);state=(bit)(P0&0x80); //屏蔽底7位,state的值仅有高位决定Lcd_EN = 0;delayMS(1);return state;}//---------------------------------------------//向LCD写数据//----------------------------------------------void LCD_Wdata(uchar dat){while(Busy_Check()); //忙等待Lcd_RS = 1;Lcd_RW = 0;Lcd_EN = 0;P0 = dat;Lcd_EN = 1; //高脉冲delayMS(1);Lcd_EN = 0;}//---------------------------------------------//向LCD写指令//----------------------------------------------void LCD_Wcmd(uchar cmd){while(Busy_Check()); //忙等待Lcd_RS = 0;Lcd_RW = 0;P0 = cmd;delayMS(1);Lcd_EN = 0;Lcd_EN = 1; //高脉冲delayMS(1);Lcd_EN = 0;}//---------------------------------------------------------//LCD初始化//---------------------------------------------------------void Init_Lcd(){LCD_Wcmd(0x38);//显示模式设置delayMS(1);LCD_Wcmd(0x0f);//开显示,显示光标,光标闪烁delayMS(1);LCD_Wcmd(0x06);//当读写一个字符后地址指针加一,且光标加一delayMS(1);LCD_Wcmd(0x01);//清屏delayMS(1);}//---------------------------------------------------------//键盘模块//---------------------------------------------------------bit pushkey() //判断是否有键按下{P1=0xf0;if(P1!=0xf0)return (1);elsereturn (0);}void key_scan()//矩阵扫描{ uchar keycode,p;delayMS(15); // 延时消抖if(P1!=0xf0){P1 = 0xf7; //键盘扫描码初值,逐行扫描,P1.3=0,扫描第4列while(1){keycode = P1; //读出数据,看是否在此行上的某列按键被按下if((keycode&0xf0)!=0xf0) break;// 如果扫描到按下的键,则退出P1=_cror_(P1,1); //否则,左移,扫描下一列}while((pushkey())); //等待按键释放for(p = 0 ; p<16 ;p++){if ( keycode== key16[p])key_number=p; //与特征值对比得与哪个键按下}}}void LCD_address(uchar hang,uchar lie )//显示字符先输入显示的位置{if (hang%2==1) LCD_Wcmd(0x80+(lie%16)-1);else LCD_Wcmd(0x80+0x40+(lie%16)-1);}void LCD_display(){ uchar j;LCD_address(1,1);while(table1[j]!='\0'){LCD_Wdata(table[j]);j++;}}void main(){ uchar n=0;Init_Lcd(); //初始化LCDLCD_display();while(1){if(pushkey())//判断是否有键按下{key_scan();switch(key_number){case 10: LCD_Wcmd(0x10);break; //光标左移(相当于A 被按下)case 11: LCD_Wcmd(0x14);break; //光标右移(相当于B被按下)case 12: n++; //光标下移(相当于C被按下)if((n%2)==1) //第二次被按下的时候,光标回到第一行{LCD_Wcmd(0x80+0x40);break;}else LCD_Wcmd(0x80);break;case 13: LCD_Wcmd(0x10);LCD_Wdata(0x00);LCD_Wcmd(0x10);break; //产生退格功能,按下一次后清除前一次的显示case 15: LCD_Wcmd(0x01);break;//清屏default: LCD_Wdata(key_number+0x30);break;}}} ;}。