LCD1602按键盘输入显示

合集下载

1602LCD显示电话拨号键盘按键说明文档

1602LCD显示电话拨号键盘按键说明文档

项目:1602LCD显示电话拨号键盘按键设计者:陈小玲1602液晶显示模块指令驱动程序设计介绍液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在各类仪表和低功耗系统中得到广泛的应用。

根据显示内容可以分为字符型液晶,图形液晶。

根据显示容量又可以分为单行16字,2行16字,两行20字等等。

这里介绍常用的字16字X2行的字符型液晶模块的使用方法。

这是一种通用模块。

与数码管相比该模块有如下优点:1.位数多,可显示32位,32个数码管体积相当庞大了2.显示内容丰富,可显示所有数字和大、小写字母3.程序简单,如果用数码管动态显示,会占用很多时间来刷新显示,而1602自动完成此功能。

1602采用标准的16脚接口,其中:(模块背面有标注)第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度(建议接地,弄不好有的模块会不显示)第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15~16脚:空脚(有的用来接背光)1602模块的设定,读写,与光标控制都是通过指令来完成,共有11条指令,如下:程序设计调试与实训:A键用于随机生成一道口诀题,数字键0-9用于输入结果(程序可限制最多只能输入俩位数),B键判断正误,如果正确则闪烁显示success,否则显示error, C键用于清除当前输入的答案,一遍重新输入,DJ键用于显示正确答案。

Proteus绘制的原理图编译的源代码://名称:1602LCD显示电话拨号键盘按键//说明:本例将电话拨号键盘上所拨号号码显示在1602液晶屏上。

LCD1602显示矩阵键盘键值

LCD1602显示矩阵键盘键值

main.c#include<reg52.h>#include"lcd.h"#define GPIO_KEY P1unsigned char KeyValue;//用来存放读取到的键值unsigned char KeyState;//用来存放按键状态unsigned char PuZh[]=" Pechin Science ";unsigned char dat[]="0123456789ABCDEF";void Delay10ms(); //延时50usvoid KeyDown(); //检测按键函数/******************************************************************************* * 函数名: main* 函数功能: 主函数* 输入: 无* 输出: 无*******************************************************************************/ void main(void){unsigned char i;LcdInit();KeyState=0;for(i=0;i<16;i++){// LcdWriteCom(0x80);LcdWriteData(PuZh[i]);}while(1){KeyDown();if(KeyState){KeyState=0;LcdWriteCom(0x80+0x40);LcdWriteData(dat[KeyValue]);}}}/******************************************************************************** 函数名: KeyDown* 函数功能: 检测有按键按下并读取键值* 输入: 无* 输出: 无*******************************************************************************/void KeyDown(void){char a;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f){Delay10ms();if(GPIO_KEY!=0x0f){KeyState=1;//测试列GPIO_KEY=0X0F;// Delay10ms();switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;// default: KeyValue=17; //检测出错回复17意思是把数码管全灭掉。

LCD1602显示

LCD1602显示

实训报告九实训目的:通过实现在LCD1602上显示由键盘输入的字符或数字的学习来掌握LCD1602的相关知识,掌握LCD1602的C语言程序设计,学会LCD1602的应用和加强矩阵按键的使用。

实训原理图:实训步骤:1.在ptoteus平台找出所需的元器件2.理解该实验的原理,按照原理图画出仿真图;3.根据实验要求写出如下程序:#include<reg51.h>#include<intrins.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned intsbit RS=P3^5;sbit RW=P3^6;sbit E=P3^7;uchar a[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f',};//延时函数void delay_lcd(uchar k){uint i,j;for(j=0;j<k;j++){for(i=0;i<60;j++);}}//测忙函数void test_1602busy(){P1=0xff;E=1;RS=0;RW=1;_nop_();_nop_();while(P1&0x80 ) //检测LCD DB7 是否为1{ E=0;_nop_();E=1;_nop_();}E=0;}//写命令函数void write_1602Command(uchar co){test_1602busy(); //检测LCD是否忙RS=0;RW=0;E=0;_nop_();P1=co;_nop_();E=1; //LCD的使能端高电平有效_nop_();E=0;}//写数据函数void write_1602Data(uchar Data){test_1602busy();P1=Data;RS=1;E=1;_nop_();E=0;}//初始化函数void init_1602(void){write_1602Command(0x38); //LCD功能设定,DL=1(8位),N=1(2行显示) delay_lcd(5);write_1602Command(0x01); //清除LCD的屏幕delay_lcd(5);write_1602Command(0x06); // LCD模式设定,I/D=1(计数地址加1) delay_lcd(5);write_1602Command(0x0F); //显示屏幕delay_lcd(5);}void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40 X|=0x80; //指令码为地址码+0X80write_1602Command(X);write_1602Data(DData);}void display_1602(uchar *DData,X,Y)//显示函数{uchar ListLength=0;Y&=0x01;X&=0x0f;while(X<16){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}//延时程序void delay(uint i){uint j;for (j=0;j<i; j++);}// 检测有没有键按下uchar checkkey(){uchar i ;uchar j ;j=0x0f;P2=j;i=P2;i=i&0x0f;if (i==0x0f) return (0);else return (0xff);}//键盘扫描程序uchar keyscan(){uchar scancode;uchar codevalue;uchar a;uchar m=0;uchar k;uchar i,j;if (checkkey() ==0) return (0xff);else{delay(100);if (checkkey()==0) return (0xff);else{scancode=0xf7;m=0x00; //键盘行扫描初值,M为列数for (i=1;i<=4;i++){k=0x10;P2=scancode;a=P2;for (j=0;j<4;j++) //J为行数{if ((a&k)==0){codevalue = m+j;while (checkkey()!=0);return (codevalue);}else k=k<<1;}m=m+4;scancode=~scancode; //为scancode右移时,移入的数为1scancode=scancode>>1;scancode=~scancode;}}}}//主函数void main(){uchar *s;uchar z;uchar i=0,j=0; //i为LCD的行,j为LCD的列delay_lcd(15);init_1602(); //1602初始化s="WELCOME TO HERE!";display_1602(s,0,0); //第一行显示"WELCOM TO HERE !"delay_lcd(200);delay_lcd(200);delay_lcd(200);while(1){if (checkkey()==0x00) continue;else{{i=1; //LCD在第二行显示z= keyscan();if (j>=16){j=0;i=1; break; }elseDisplayOneChar(j,i,a[z]);j++;delay(100);}}}}总结:通过本次的实训我掌握一些LCD1602的相关知识,学会了LCD1602的使用,并能通过按键在LCD1602上显示字符或数字,进一步加强了矩阵按键的运用,学会了LCD1602的C语言程序的设计,加深了我C语言程序的设计能力。

LCD1602显示中文汉字doc资料

LCD1602显示中文汉字doc资料

L CD1 6 0 2 显示中文汉字LCD1602 显示中文汉字LCD1602 相比大家都比较了解,但是我们一般只用来显示字符,数字。

最近在网上看许多人用LCD1602 来显示汉字,觉得有趣于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!!接下我谈谈我得做法,保证你10分钟之内一样可以在LCD1602 上显示你想显示的各种符号,汉字!!!首先:我们要弄清楚一个概念,其实我们使用1602 显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602 内部有一个64字节的自定义CGRAM ,那么好,我们就是要利用自定义字节来达到显示汉字的效果. 我们知道一个字符占8 个字节,所以在CGRAM 能够存放8 个字符。

也就是说,这个64 字节的CGRAM 是给我们提供写入数据的,那么我们怎么把我们要的汉字写入CGRAM 呢?不要急,大家查看LCD1602 的用户手册,里面提到当我们需要想CGRAM 写入数据时,我们需要先写入CGRAM 的地址,从手册上可知,CGRAM 的地址为0x40所以当我们要写入数据时,要先写入一条地址命令write_com(0x040); 然后把你要写入的数据通过写数据命令写入write_date( 你要写得数据);做完以上步骤了,是不是LCD1602 就会显示你输入的汉字呢?不要急,以上你只是把你要显示汉字的代码存放在CGRAM 里,就相当于其他常用字符一样固定在LCD 里面了,如果你不把它读出来,LCD 是不会显示当你把上面的步骤做完后,接下来要做的与你平常怎么使用 的,只不过是LCD1602里面增加了一些你自定义的字符,汉字。

可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输 入,那么我该怎么编写这些代码,呵呵,不要着急,接下来就要用到下面这个 取字模软件。

4収虫日式*偉改壬慨烁楼咀韋IH*丘出用片4B-S I 询厲 1 .11 g 佃如 ATI相信有的朋友应该都用过这个软件。

LCD1602中文资料程序和使用说明

LCD1602中文资料程序和使用说明

LCD1602中文资料程序和使用说明一、硬件连接和初始化步骤:1.将LCD1602的16个引脚连接到MCU(单片机)的相应引脚上。

其中,VCC和GND分别接到电源正负极,VO接到可调电位器的中间引脚(用于调节背光亮度),RS、RW和E分别接到MCU的IO口上,D0-D7分别接到MCU的8个IO口上。

2.初始化LCD1602的操作包括设置显示模式、显示光标、输入模式等,具体步骤如下:a.将8位数据接口设置为并行输入模式,即设置D0-D3为输入模式。

b.设置显示模式为2行显示,5x8点阵字符,显示器不移动。

c.将显示光标设置为闪烁显示。

d.设置数据输入方式为向右移动,同时字符显示不移动。

e.清除显示内容,将光标位置设置为第一行第一列。

f.打开显示器和光标显示功能。

二、常用函数和操作方法:1. void lcd1602_init( 初始化LCD1602,包括上述硬件连接和初始化步骤。

2. void lcd1602_clear( 清除显示内容。

3. void lcd1602_setCursor(int row, int column) 设置光标位置,row表示行数(从0开始),column表示列数(从0开始)。

4. void lcd1602_print(String str) 在当前光标位置打印字符串str。

5. void lcd1602_shiftDisplayLeft( 将显示内容向左移动一位。

6. void lcd1602_shiftDisplayRight( 将显示内容向右移动一位。

7. void lcd1602_scrollDisplayLeft( 将整个显示内容向左滚动一格。

8. void lcd1602_scrollDisplayRight( 将整个显示内容向右滚动一格。

9. void lcd1602_noCursor( 关闭光标显示。

10. void lcd1602_cursor( 打开光标显示。

lcd1602液晶显示模块工作原理

lcd1602液晶显示模块工作原理

lcd1602液晶显示模块工作原理LCD1602液晶显示模块,是基于液晶原理制造的一种显示设备,用于显示一定范围内的字符和图形,具有低功耗、可读性高和驱动电压低的特点。

液晶显示器广泛应用于信息显示、电子设备和仪器仪表等领域,此处将介绍LCD1602液晶显示模块的工作原理。

液晶是一种介于液态和晶态之间的物质,具有相对固定的空间结构和形态。

在适当的电场作用下,液晶与晶体的结构会发生变化,使振动光学变化。

液晶分为向列型和扭曲型两种,其中向列型液晶被广泛应用于液晶显示器中。

LCD1602液晶显示模块采用的是向列型TN液晶,即垂直于基板的向列型液晶。

这种液晶具有易于制造和密集排列等优点,且电压控制范围较宽,能够实现高对比度的显示效果。

液晶显示器由玻璃基板、液晶材料、导电膜和驱动电路等组成。

LCD1602液晶显示模块由两个玻璃基板组成,中间夹着液晶材料。

内置了驱动芯片HD44780,是一种标准的液晶显示器驱动芯片。

导电膜被涂在基板的特定位置上,构成各种字符或图形。

驱动电路将字符或图形的显示信息转换为特定电压信号,驱动导电膜,使显示信息正常显示。

液晶显示器的显示原理是利用不同介电常数的液晶材料分子与外加电场的相互作用,通过改变液晶分子的定位使光线产生相位差,产生的相位差呈现出不同的色彩,从而完成图像的显示。

液晶材料对电压的敏感度很高,在较小的电场作用下可以获得明显的光学改变。

对于LCD1602液晶显示模块,通过控制某些导电膜的电压,使得液晶分子的定向改变,从而改变光的透射,从而实现字符或图形的显示。

LCD1602液晶显示模块的驱动芯片HD44780,内置了字符发生器ROM和VRAM。

当要显示一个字符或图形时,先在VRAM中写入该字符或图形的码位,然后给控制指令写入相应的地址指令和数据指令。

驱动芯片将读入的数据码位解读为具体的显示内容,并驱动导电膜,控制液晶分子的定向,使光线透过液晶分子后呈现出相应的字符或图形。

lcd1602按键显示程序

lcd1602按键显示程序

#include<reg52.h>#include<intrins.h> //包含_nop_()函数定义的头文件typedef unsigned int uint ;typedef unsigned char uchar ;sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚uchar keyscan();void delay1ms();void delay(unsigned char n);unsigned char BusyTest(void);void WriteInstruction (unsigned char dictate);void WriteAddress(unsigned char x);void WriteData(unsigned char y);void LcdInitiate(void);void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}void delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}unsigned char BusyTest(void){bit result;RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1; //E=1,才允许读写_nop_(); //空操作_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间result=BF; //将忙碌标志电平赋给resultE=0;return result;}void WriteInstruction (unsigned char dictate){while(BusyTest()==1); //如果忙就等待RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"_nop_();_nop_(); //空操作两个机器周期,给硬件反应时间P0=dictate; //将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteAddress(unsigned char x){WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"}void WriteData(unsigned char y){while(BusyTest()==1);RS=1; //RS为高电平,RW为低电平时,可以写入数据RW=0;E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"P0=y; //将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}void LcdInitiate(void){delay(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口delay(5); //延时5msWriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x0f); //显示模式设置:显示开,有光标,光标闪烁delay(5);WriteInstruction(0x06); //显示模式设置:光标右移,字符不移delay(5);WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除delay(5);}uchar keyscan(void){uchar Key1,Key2,tt; uint temp;P1=0x0f;if((P1&0x0f)==0x0f){return 0xff;}delay(10);if((P1&0x0f)==0x0f)return 0xff; // jiancha2=0;Key1=P1&0x0f;P1=0xf0;if((P1&0xf0)==0xf0)return 0xff;delay(10);if((P1&0xf0)==0xf0)return 0xff;Key2=P1&0xf0;while((P1&0xf0)!=0xf0);tt=Key1|Key2;switch(tt){case 0xe7:temp='1';break;case 0xd7:temp='2';break;case 0xb7:temp='3';break;case 0x77:temp='a';break;case 0xeb:temp='4';break;case 0xdb:temp='5';break;case 0xbb:temp='6';break;case 0x7b:temp='b';break;case 0xed:temp='7';break;case 0xdd:temp='8';break;case 0xbd:temp='9';break;case 0x7d:temp='c';break;case 0xee:temp='*';break;case 0xde:temp='0';break;case 0xbe:temp='#';break;case 0x7e:temp='d';break;}return(temp);}void main(){uchar b,i,j;LcdInitiate(); //调用LCD初始化函数i=0;while(1){b=keyscan();if(b!=0xff){WriteData(b);i++;b=0xff;} //字符的字形点阵读出和显示由液晶模块自动完成if(b=='*'){j=i;}if(b=='#'){j++}if(j==i) Break;}}。

LCD1602原理与显示程序

LCD1602原理与显示程序

LCD1602原理与显示程序LCD1602的原理是基于液晶显示技术。

液晶是一种特殊的物质,具有双折射性质,即能将入射的光线分成两束,通过改变液晶分子的排列方式,可以改变其双折射的性质,从而使得光线透过液晶时会发生偏转。

LCD1602利用这一原理,在液晶显示面板上设置了16列和2行的像素点阵,通过控制每个像素点的液晶分子的排列方式,来实现字符的显示。

初始化是指在使用LCD1602之前,需要对其进行一系列的初始化操作,以确保其正常工作。

具体的初始化步骤如下:1.设置通信协议:LCD1602可以通过并行接口和串行接口进行通信,根据具体的接口方式,选择相应的通信协议。

2.设置工作模式:LCD1602有两种工作模式,分别是4位模式和8位模式。

选择适合的工作模式,并设置相应的控制寄存器。

3.设置显示模式:LCD1602可以显示不同的字符集,如英文字符、数字、特殊符号等。

选择合适的字符集,并设置显示模式。

4.清除显示:设置清除显示寄存器,将显示区域清空。

5.光标设置:设置光标位置和显示方式,如光标是否闪烁、光标位置等。

完成初始化后,就可以将要显示的数据写入LCD1602数据写入是指将要显示的字符或数字写入到LCD1602的显示区域。

具体的数据写入步骤如下:1.设置光标位置:根据需要显示的字符位置,设置光标的位置。

2.数据写入:通过通信接口,将要显示的数据写入到LCD1602的数据寄存器。

3.延时:由于LCD1602的刷新速度较慢,需要等待一定的时间,使得数据能够稳定显示在液晶屏上。

4.更新光标位置:根据数据的长度和显示方式,更新光标的位置。

通过以上的步骤,就可以实现LCD1602的显示功能。

总结起来,LCD1602的原理是基于液晶显示技术,通过控制液晶分子排列方式来实现字符的显示。

其显示程序包括初始化和数据写入两个方面的内容,通过设置通信协议、工作模式、显示模式等参数,并将要显示的数据写入到LCD1602的显示区域,来实现字符的显示。

1 LCD1602显示总结

1 LCD1602显示总结

1 LCD1602显示总结使用LCD 1602显示内容时首先要初始化LCD1602的显示模式,然后实现对LCD 1602稳定读/写的函数,包括读状态和写内容,对LCD 1602写内容又包括写指令和写数据。

1.1 LCD1602的初始化可编写专门的初始化函数来实现,函数内容可包含如下:(1)程序运行时,等待约15ms的时间让LCD VDD电压达4.5V。

(2)用编写的LCD写指令函数设置LCD的显示模式,如设置LCD1602用16 x 2显示、5x7点库、使用8位数据端口。

对应送往LCD 1602 8个端口的数据为0x38。

(3)设置LCD开显示模式,是否显示光标,光标是否闪烁。

都设置时8个数据端口的数据为0x0f。

(4)设置LCD读写字符后地址指针、光标位置是否往后增1,屏幕移动与否。

地址指针、光标在读写字符后增1,屏幕不移动时8个端口的数据为0x06。

(5)清屏。

清屏指令为0x01.可在LCD写指令模式设置下写入清屏指令。

清屏指令主要是为了下一次的显示不受上一次显示的干扰。

1.2 LCD1602写指令/数据可专门编写函数来实现。

函数内容可包含如下:(1)检测LCD忙信号:LCD的D7位是否为1,如果此位为1则表示LCD处于忙碌状态,需要等到D7状态位为0时方可进入写指令操作。

(2)设置LCD的RS端口为0来表示对LCD进行指令操作,RW端口为0表示往LCD内写东西。

二者构成往LCD内写指令。

延时等待(时间不长,需参考手册中的时间)保证RS,RW 两端口彻底的到达低电平。

(3)将指令置于LCD的D0-D7位,延时等待保证D0-D7电平得到彻底变化。

(4)将LCD的EN使能位置为1,延时等待其位彻底变高后将EN置为1,使得EN端口得到一个负脉冲。

(5)EN端负脉冲产生LCD就开始将D0-D7上面的指令往LCD里面写入,此时延时等待一段时间(如5ms,合适的时间可以不断的调试得来)当要对LCD写数据时,步骤跟写指令时一样,只是需要在以上步骤中将RS设置为高电平,表示对LCD进行数据操作。

LCD1602及其控制器的基本显示方法

LCD1602及其控制器的基本显示方法

LCD显示及键盘用法LCD1602及其控制器的基本显示方法向LCD输入的数据为ASCII码,需要通过数码扫描依次送到LCD显示,下面介绍LCD 控制器IP核LCD16X2A及其相关程序。

逻辑符号如下图:U_lcd_ctrl模块即为该控制器核在AltiumDesinger原理图中的符号表示。

其作用是接受前面用户自己的逻辑单元送来的ASCII码数据和控制信号,然后与外部的LCD显示器通讯,显示相应字符。

数据总线使用输入输出分离模式,IP核后面需要增加双向BUF控制单元(U8)。

L CD控制器端口说明如下:用户控制逻辑接口:CLK:控制器工作时钟,上升沿有效RST:复位信号,高电平有效DATA[7..0]:ASCII码数据总线ADDR[3..0]:字符在LCD屏幕上的地址(共两行,每行16个字符)ADDR=“0000”~“1111”对应每行的第0~15个字符LINE:LCD1602屏幕上的行选择信号,LINE=0时数据在第一行显示,LINE=1时数据在第二行显示BUSY:控制器忙信号,数据未显示稳定时BUSY=1;反之为0STROBE:数据输入有效使能,高电平有效LCD显示器接口:LCD_E:LCD显示器使能LCD_RW:LCD读写方向控制LCD_RS:LCD命令,数据选择LCD_DATA_TRI:LCD数据高阻态控制LCD_DATAO:LCD数据输出总线LCD_DATAI:LCD数据输入总线控制器工作原理如下:A控制器复位当RST信号有效时(高电平),控制器进入LCD复位与初始化操作,此时,BUSY信号持续高电平,表示控制器忙,LCD不能进行用户请求的操作。

RST信号由高变低后的大约80us之后,LCD控制器初始化完成,可以响应用户的操作请求,此时,BUSY信号变低。

LCD处于显示模式。

B字符显示上电后的LCD必须初始化一次,之后LCD控制器停留于“WAIT FOR DATA”状态。

在用户向LCD控制器申请字符显示操作时,ADDR、DATA、LINE信号必须保持稳定,同时使用STROBE信号触发显示操作。

完整word版4X4键盘输入。LCD1602输出

完整word版4X4键盘输入。LCD1602输出

物理与电信工程学院专业课程设计报告2学期 2018 ~ 2019 学年第lcd16024*4矩形键盘输入,显示业:专班级:学号:姓名:指导教师姓名:日年月1课程设计报告【课题名称】4*4矩形键盘输入,lcd1602显示【摘要】键盘输入与液晶显示系统是单片机应用中最常见的一种形式,几乎涉及到人们日常生产和生活中的各个方面。

键盘是用于实现单片机应用系统中的数据和命令的输入,液晶显示器LCD能使人直观的获得需要了解的信息。

实现人机的交流互动。

本次课程设计作为实践教学的一个重要环节,以4*4矩阵键盘按键输入数据,以1602液晶显示。

并使用Proteus软件对所设计的电路进行仿真,仿真结果是在1602液晶上显示所按下的键值。

因此,对液晶显示与键盘系统的研究与应用是很有必要的,对于我们今后的学习有着很强的推动作用。

【关键词】Proteus仿真,AT89C51,lcd1602,4*4矩阵键盘一、引言AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

[1][2]AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

lcd1602:16字×2行的字符型液晶显示器显示模块可以与8位或4位微处理器直接接口,其内置式字符发生器ROM可提供160种符合工业标准的字符,包括全部英文大小写字母,阿拉伯数字,以及32个特殊字符或符号,其内置的RAM可以根据用户需要,由用户自行设计字符或符号,其指令系统为用户提供了方便的操作指令,点阵字符型液晶显示模块采用了+5V单电源供电,功耗低。

LCD1602电话拨号按键系统实验论文

LCD1602电话拨号按键系统实验论文

LCD1602电话拨号按键系统实验论文一、设计目的本方案设计LCD1602显示电话拨号按键显示的实验,使用基于AT89C51单片机,在lcd1602上显示按键的数字,最多依次显示11位数据,按下数据蜂鸣器会发出声音。

二、摘要:通过lcd1602显示电话按键显示的数字,按下键盘,蜂鸣器会发出声音进行提示,本次lcd1602最多显示11位数据。

程序设计使用模块化设计关键词:单片机,键盘,蜂鸣器,lcd1602系统硬件电路设计1、单片机模块设计本次设计采用的是单片机AT89C51。

芯片共有40个引脚,引脚的排列顺序为从靠芯片的缺口,如图3.1所示。

左边那列逆时针数起,依次为1,2,3.....40,其中芯片的1脚顶上有一个凹点。

在单片机的40个引脚中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O引脚32根。

图AT89C51管脚图AT89C51单片机共有4组8位可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位,共32根。

每一根引脚都可以编程,比如用来控制电机、交通灯等,开发产品时就是利用这些可编程引脚来实现我们想要的功能。

P0口:8位双向I/O口线,名称为P0.0-P0.7;P1口:8位准双向I/O口线,名称为P1.0-P1.7;P2口:8位准双向I/O口线,名称为P2.0-P2.7;P3口:8位准双向I/O口线,名称为P3.0-P3.7。

本文单片机模块如图所示,主要是由单片机芯片与晶振和复位电路组成的。

是由单片机来控制整个系统,让我们的系统可以正常的运行。

2、显示模块LM016L液晶模块采用HD44780控制器,HD44780具有功能较强而又简单的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用4位或8位并行传输两种方式,HD44780控制器是由2个8 bit的寄存器、显示数据存储(DDRAM)、指令寄存器(IR)、RAM(DR)、地址计数器RAM(AC)、忙标志(BF)、字符发生器ROMA (CGOROM)以及字符发生器RAM(CGRAM)组成。

LCD1602-显示程序使用说明

LCD1602-显示程序使用说明

LM016l 与LCD1602原理是一样的,只不过PROTEUS中016没显示调亮度的那两个端口,但并不影响。

在日常生活中,我们对液晶显示器并不陌生。

液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。

在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED 数码管、液晶显示器。

发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。

在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器〔CRT〕那样需要不断刷新新亮点。

因此,液晶显示器画质高且不会闪烁。

数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来到达显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。

液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。

除了黑白显示外,液晶显示器还有多灰度有彩色显示等。

如果根据驱动方式来分,可以分为静态驱动〔Static〕、单纯矩阵驱动〔Simple Matrix〕和主动矩阵驱动〔Active Matrix〕三种。

③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。

单片机驱动LCD1602显示字符串程序

单片机驱动LCD1602显示字符串程序

;声 明: ; ; ;
版权所有,嵌入式应用软件园。 此文件只限购买者个人使用,请勿在互联网中传播,如有侵权,将追究相应责任。 如需单片机代码/技术支持,请访问:嵌入式应用软件园
如需源代码/此代码技术支持,请访问: 嵌入式应用软件园。
8
;****************************************************************************** ;函数名:DISP ;输 入:无 ;输 出:无 ;调 用:WRITE_DATA ;描 述:显示字符串到 LCM ;****************************************************************************** ;*******子程序******** DISP:
MOV A,#00000001B
7
嵌入式应用软件园,版权所有,请勿转载/销售。
LCALL WRITE_COM RET
;****************************************************************************** ;函数名:DEL ;输 入:无 ;输 出:无 ;调 用:无 ;描 述:延时 ;****************************************************************************件园,版权所有,请勿转载/销售。
第 1 章 程序功能
程序中包含 LCM 用到的所有函数:初始化、写指令、写数据、判忙碌、清屏 幕。
单片机(51/STC)P1.1,P1.2,P1.3,P1.4 外接按键,按下不同的按键,LCM 上会显 示不同的字符串,用于报警。

1602键盘显示

1602键盘显示

摘要在日常生活中,我们经常要通过按键来实现对电子装置的控制,小到手表手机,中到电视电脑,大到各种复杂仪器,都需要通过按键来实现各种操作。

本次课程设计作为实践教学的一个重要环节,将以按键控制显示为主题,以1602液晶、MM74C922解码芯片、AT89C52单片机及其接口芯片为核心构造一个键盘控制显示系统,并使用Proteus软件对所设计的电路进行仿真,仿真结果是在1602液晶上显示所按下的键值。

关键词:Proteus仿真AT89C52 1602液晶MM74C922解码芯片第一章总体设计1.1电路结构分析本次设计的目标为单片机控制的键盘识别显示系统,主要采用AT89C52单片机作为核心,由矩阵键盘电路、译码芯片、液晶显示等模块构成,分别对按键信息和显示电路以及软、硬件各个部分进行控制;本设计采用C言编程来实现对单片机的控制。

实际运作时,单片机会将检测到的按键信号转换成数字,显示于1602液晶上。

系统主要结构可以拆分如下:①矩阵键盘:按键传送输入信息;此键盘采用的是4X4矩阵键盘,能输入0~9,+,—,=,空格,返回,清零。

②键盘识别:矩阵键盘连接的是MM74C922解码芯片,通过解码芯片来识别输入的按键位置。

③AT89C52:采用软件编程来实现按键信息的提取和转换;④1602液晶:用于显示最终被单片机转换过的按键信息。

由以上构思可以设计此按键显示电路。

1.2总体方案设计总体电路原理框图:如图 1.2所示图1.2总体电路原理方框图本次设计分两步来完成,第一步,解码芯片调试系统,将解码芯片接口连接到矩阵键盘作为AT89C52单片机的输入装置,然后以P2口作为输出端并连接一个数码管观察输出结果。

第二步,1602的液晶调试系统,此过程就是将数码管换成1602液晶在进行结果显示。

1.3蜂鸣器模块设计蜂鸣器模块设计如图 1.3所示图 1.3 蜂鸣器模块电路图蜂鸣器的驱动电流比较大一般要500MA~1000MA,所以不能直接接在AT82C52单片机的接口上,需要加一个三极管来进行驱动。

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

名称:LCD1602论坛:编写:shifang日期:2009.5修改:无内容:通过矩阵键盘输入,依次显示0-F16中字符引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<intrins.h>sbit RS = P2^4; //定义端口sbit RW = P2^5;sbit EN = P2^6;#define RS_CLR RS=0#define RS_SET RS=1#define RW_CLR RW=0#define RW_SET RW=1#define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0#define KeyPort P1unsigned char code dofly_code[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//转换成液晶显示的字符/*------------------------------------------------uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------判忙函数------------------------------------------------*/ bit LCD_Check_Busy(void){DataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);}/*------------------------------------------------写入命令函数------------------------------------------------*/ void LCD_Write_Com(unsigned char com) {while(LCD_Check_Busy()); //忙则等待RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;}/*------------------------------------------------写入数据函数------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) {while(LCD_Check_Busy()); //忙则等待RS_SET;EN_SET;DataPort= Data;_nop_();EN_CLR;}/*------------------------------------------------清屏函数------------------------------------------------*/void LCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*------------------------------------------------写入字符串函数------------------------------------------------*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}while (*s){LCD_Write_Data( *s);s ++;}}/*------------------------------------------------写入字符函数------------------------------------------------*/void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {if (y == 0){LCD_Write_Com(0x80 + x);}elseLCD_Write_Com(0xC0 + x);}LCD_Write_Data( Data);}/*------------------------------------------------初始化函数------------------------------------------------*/void LCD_Init(void){LCD_Write_Com(0x38); /*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08); /*显示关闭*/LCD_Write_Com(0x01); /*显示清屏*/LCD_Write_Com(0x06); /*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C); /*显示开及光标设置*/}/*------------------------------------------------按键扫描函数,返回扫描键值------------------------------------------------*/unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法{unsigned char cord_h,cord_l;//行列值中间变量KeyPort=0x0f; //行线输出全为0cord_h=KeyPort&0x0f; //读入列线值if(cord_h!=0x0f) //先检测有无按键按下{DelayMs(10); //去抖if((KeyPort&0x0f)!=0x0f){cord_h=KeyPort&0x0f; //读入列线值KeyPort=cord_h|0xf0; //输出当前列线值cord_l=KeyPort&0xf0; //读入行线值while((KeyPort&0xf0)!=0xf0);//等待松开并输出return(cord_h+cord_l);//键盘最后组合码值}}return(0xff); //返回该值}/*------------------------------------------------按键值处理函数,返回扫键值------------------------------------------------*/unsigned char KeyPro(void){switch(KeyScan()){case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值case 0x7d:return 1;break;//1case 0x7b:return 2;break;//2case 0x77:return 3;break;//3case 0xbe:return 4;break;//4case 0xbd:return 5;break;//5case 0xbb:return 6;break;//6case 0xb7:return 7;break;//7case 0xde:return 8;break;//8case 0xdd:return 9;break;//9case 0xdb:return 10;break;//acase 0xd7:return 11;break;//bcase 0xee:return 12;break;//ccase 0xed:return 13;break;//dcase 0xeb:return 14;break;//ecase 0xe7:return 15;break;//fdefault:return 0xff;break;}}/*------------------------------------------------主函数------------------------------------------------*/void main(void){unsigned char i,j,num;LCD_Init();LCD_Write_Com(0x0F);//光标开,光标闪烁开LCD_Write_String(0,0,"Press the key !");while (1){num=KeyPro();if(num!=0xff){if((i==0)&&(j==0))//回到第一个字符时清屏LCD_Clear();//清屏LCD_Write_Char(0+i,0+j,dofly_code[num]);//依次显示输入字符i++;if(i==16)//如果第一行显示满,转到第二行{i=0;j++;if(j==2)//如果2行都显示满,清屏后重新从第一行显示{j=0;}}}}}。

相关文档
最新文档