手机拨号矩阵键盘控制lcd1602
- 格式:docx
- 大小:50.77 KB
- 文档页数:4
lcd1602 显示原理,LCD1602 液晶显示器的分类有哪
些?
LCD1602 是一种工业字符型液晶,能够同时显示16x02 即32 个字符。
LCD1602 液晶显示原理LCD1602 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
1602 液晶也叫1602 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7 或者5X11 等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD 是指显示的内容为16X2,即可以显示两行,每行16 个字符液晶模块(显示字符和数字)。
市面上字符液晶大多数是基于
HD44780 液晶芯片的,控制原理是完全相同的,因此基于HD44780 写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
LCD1602及其控制器的基本显⽰⽅法LCD显⽰及键盘⽤法LCD1602及其控制器的基本显⽰⽅法向LCD输⼊的数据为ASCII码,需要通过数码扫描依次送到LCD显⽰,下⾯介绍LCD 控制器IP核LCD16X2A及其相关程序。
逻辑符号如下图:U_lcd_ctrl模块即为该控制器核在AltiumDesinger原理图中的符号表⽰。
其作⽤是接受前⾯⽤户⾃⼰的逻辑单元送来的ASCII码数据和控制信号,然后与外部的LCD显⽰器通讯,显⽰相应字符。
数据总线使⽤输⼊输出分离模式,IP核后⾯需要增加双向BUF控制单元(U8)。
L CD控制器端⼝说明如下:⽤户控制逻辑接⼝:CLK:控制器⼯作时钟,上升沿有效RST:复位信号,⾼电平有效DA TA[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_DA TA_TRI:LCD数据⾼阻态控制LCD_DA TAO:LCD数据输出总线LCD_DA TAI:LCD数据输⼊总线控制器⼯作原理如下:A 控制器复位当RST信号有效时(⾼电平),控制器进⼊LCD复位与初始化操作,此时,BUSY信号持续⾼电平,表⽰控制器忙,LCD不能进⾏⽤户请求的操作。
RST信号由⾼变低后的⼤约80us之后,LCD控制器初始化完成,可以响应⽤户的操作请求,此时,BUSY信号变低。
LCD处于显⽰模式。
B 字符显⽰上电后的LCD必须初始化⼀次,之后LCD控制器停留于“WAIT FOR DA TA”状态。
图1再来一张它的背面的,如图2所示:图2图3图4二.基本操作LCD1602的基本操作分为四种:1. 读状态:输入RS=0,RW=1,E=高脉冲。
输出:D0—D7为状态字。
2. 读数据:输入RS=1,RW=1,E=高脉冲。
输出:D0—D7为数据。
3. 写命令:输入RS=0,RW=0,E=高脉冲。
输出:无。
4. 写数据:输入RS=1,RW=0,E=高脉冲。
输出:无。
读操作时序图(如图5):图5写操作时序图(如图6):图6时序时间参数(如图7):图7三.DDRAM、CGROM和CGRAMDDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下(如图8):图8DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。
同样LCD1602共有80个字节的显存,即DDRAM。
但LCD 1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不能显示出来。
这样,我们在程序中可以利用下面的“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。
前面说了,为了在液晶屏幕上显示字符,就把字符代码送入DDRAM。
例如,如果想在屏幕左上角显示字符‘A’,那么就把字符‘A’的字符代码41H写入DDRAM的00H地址处即可。
至于怎么写入,后面会有说明。
那么为什么把字符代码写入DDRAM,就可以在相应位置显示这个代码的字符呢?我们知道,LCD1602是一种字符点阵显示器,为了显示一种字符的字形,必须要有这个字符的字模数据,什么叫字符的字模数据,看看下面的这个图就明白了(如图9)。
图9上图的左边就是字符‘A’的字模数据,右边就是将左边数据用“○”代表0,用“■”代表1。
从而显示出‘A’这个字形。
名称: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;}}}}}。
单片机课程设计--1602LCD显示电话拨号键盘按键琼州学院电子信息工程学院课程设计报告课程名称: 单片机课程设计设计题目:1602LCD显示电话拨号键盘按键专业: 通信工程班级: 2010级1班学生姓名: ***学号:起止日期: 2013年4月,2013年6月指导教师:指导教师评语: 最终成绩: 指导教师签名: 年月日成项目权重成绩绩1、设计过程中的学习态度 0.2 评2、课程设计的质量及答辩 0.5 定 3、设计报告书规范程度 0.34、总成绩目录1.设计目的 ..................................................... 2 2.设计要求 ..................................................... 2 3.设计方案 .. (2)3.1单片机最小系统 (2)3.2输入按键系统 (3)3.3 1602LCD显示系统 (3)3.4设计原理图 ............................................... 64.分析与编程 (7)4.1系统流程图 (7)4.2 LCD显示程序流程图 (7)4.3 设计程序 ................................................ 85.仿真 ........................................................ 146.在实现过程中遇到的问题及排除措施 ............................ 157.设计心得体会 ................................................ 16 参考文献 (16)1602LCD显示电话拨号键盘按键摘要:本设计以89C51单片机为核心,设计1602LCD显示电话拨号键盘按键,对按键输入系统,LCD1602的引脚功能、控制命令、读写时序进行了分析。
1602LCD仿手机键盘单片机课程设计介绍本文档旨在介绍一个关于1602LCD仿手机键盘的单片机课程设计。
在这个课程设计中,我们将学习如何使用单片机与1602LCD显示屏以及按键进行交互,实现一个仿手机键盘的简单应用。
这有助于初学者掌握单片机和LCD屏幕的基本使用方法,并加强他们的编程能力。
设计目标本课程设计的主要目标是实现以下功能:1.在1602LCD屏幕上显示一个简单的用户界面,包括一个仿手机键盘和一个文本框2.用户可以使用仿手机键盘输入文本,并在文本框中显示输入的内容3.实现基本的字符串操作函数,如删除字符、清空文本等4.通过按下对应按钮实现不同的功能,如发送短信、拨打电话等系统组成该系统主要由以下组件构成:1.单片机:我们将使用一块适配单片机,例如Arduino或者树莓派,作为主控制器来控制整个系统。
2.1602LCD屏幕:它是用于显示用户界面和输入文本的显示设备。
3.按键:我们需要一组按键来模拟手机键盘的输入。
4.连接线:这些连接线将用于将单片机、LCD屏幕和按键连接在一起。
硬件搭建1.首先,将单片机与1602LCD屏幕连接。
根据所使用的单片机型号,查找LCD屏幕的引脚定义,并将其连接到正确的单片机引脚上。
2.接下来,将按键连接到单片机的输入引脚上。
你可以自定义按键的布局,最基本的要求是包含数字、字母和功能键。
软件设计1.首先,我们需要使用相应的开发环境(如Arduino IDE)编写程序代码。
2.在程序中,我们需要定义LCD屏幕的引脚,并初始化它。
然后,我们可以使用LCD库函数来控制显示内容,如在屏幕上显示文本、清空屏幕等。
3.接下来,我们需要定义按键的引脚,并初始化它们。
我们可以编写函数来监测按键的输入状态,并根据按下的按键执行相应的操作。
4.我们还需要编写字符串操作函数,如删除字符、清空文本等。
这些函数能够处理用户输入的文本并显示在LCD屏幕上。
5.最后,我们需要编写主循环函数,以便不断检测按键输入和更新LCD屏幕内容。
指导教师评定成绩:审定成绩:重庆邮电大学自动化学院综合设计报告设计题目:1602LCD显示电话拨号键盘按键实验单位(二级学院):自动化学院学生姓名:范世明专业:自动化班级:0810702学号:07200208指导教师:蔡军设计时间:2010 年10 月重庆邮电大学自动化学院制目录目录 (2)一、设计目的 (3)二.摘要: (3)关键词: (3)三.实验步骤及过程 (3)实验原理图部分 (3)1.单片机最小系统 (3)2.输入按键系统 (4)3.1602LCD显示系统 (5)4.数字代码 (6)实验原理图如下 (7)模拟仿真部分 (7)程序设计部分 (8)1.程序总流程图 (8)2.LCD显示程序流程图 (9)注意事项 (10)附录: (10)一、设计目的本方案设计一个电话拨号键盘系统;1.要求以51单片机作为微控制器;2.通过1602LCD显示屏显示拨号屏幕;3.LED显示屏轮流显示数字;4.数字显示为逐个显示方式,最多保留10位。
二.摘要:介绍了基于单片机的LED1602显示屏的设计过程。
给出了其硬件原理图和系统仿真图。
做到了按要求实现规定的功能。
关键词:单片机; LED1602显示屏;键盘系统三.实验步骤及过程实验原理图部分1.单片机最小系统单片机最小系统主要由电源、复位、震荡电路以及扩展部分等部分组成。
图1 单片机最小系统2.输入按键系统独立的键盘与单片机相连时,每个按键都需要单片机的一个I/O口,若按键较多时,占用的I/O口资源就会过多,为此就引入了矩阵键盘。
本次设计共有0~9、#、*共12个按键,因此引入3*4的矩阵键盘,共需要7个I/O口,7条线分别与单片机P3口相连。
图2 按键键盘3.1602LCD显示系统下图为LCD1602元件引脚图以及对应的引脚功能:图3 LCD1602元件图图4 引脚功能列表图4引脚说明:第1脚:VSS为地电源;第2脚:VDD接+5V电源;第3脚:VL为液晶显示器对比度调度端,接正电源时对比度最弱,接地时对比度最高,对比度过高会产生“鬼影”,必要时可以通过一个10K的电位器调整对比度。
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;}}} ;}。
---------毕业论文(设计)题目__单片机课程设计________指导教师________ _________院系___ __________专业__ __________班级________ _________姓名______________________学号____ ___________2015年 9月 1 日至2015年 12月 7日(共12周)精品文档目录1.设计预达目标 (1)2.设计方案 (1)2.1单片机最小系统 (1)2.2输入按键系统 (2)2.3 1602LCD显示系统 (3)2.4设计原理图 (6)3. 分析与编程 (7)3.1系统流程图 (7)3.2 LCD显示程序流程图 (7)3.3 设计程序 (8)4.仿真 (15)5.在实现过程中遇到的问题及排除措施 (16)6.设计心得体会 (16)7.参考文献 (16)1602LCD显示电话拨号键盘按键摘要:介绍了基于单片机LCD1602显示屏的设计过程。
给出了其硬件原理图和系统仿真图。
关键词:单片机 1602LCD显示屏键盘系统一、设计预达目标要求以51单片机作为微控制器,通过1602LCD显示屏显示拨号键盘,键值包括数字0-9及“*”“#”等12个按键,数字显示为逐个显示方式。
二.设计方案首先构建单片机最小系统、键盘输入系统及1602LCD显示系统。
通过单片机扫描键值,将其结果输入到1602LCD显示屏上。
(一)单片机最小系统单片机最小系统主要由电源、复位、震荡电路以及扩展部分等部分组成。
1图2.1单片机最小系统(二)输入按键系统独立的键盘与单片机相连时,每个按键都需要单片机的一个I/O线,若按键较多时,占用的I/O口资源就会过多,为此就引入了矩阵键盘。
本次设计共有0~9、#、*共12个按键,因此引入3*4的矩阵键盘,共需要7个I/O口,7条线分别与单片机P3口相连。
{注:当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。
液晶LCD1602使用介绍液晶LCD1602简介LCD1602液晶也叫1602字符型液晶模块,LCD1602液晶是一种专门用来显示字母、数字、符号的点阵型液晶模块。
LCD1602液晶是由若干个5x7点阵字符位组成,每个点阵字符位都可以显示一个字符(包括字母、数字、符号),一共可以显示16x2个字符。
LCD1602液晶的每位之间都有一个点距的间隔,每行之间也都有间隔,起到字符间距和行间距的作用。
LCD1602液晶只能显示字符(包括字母、数字、符号),不能显示图片。
LCD1602液晶模块具有体积小,功耗低等优点。
在各种工业设备、家用电子产品、仪器仪表、嵌入式系统等场合都有非常广泛的应用。
液晶LCD1602技术参数液晶LCD1602管脚说明LCD1602液晶模块各管脚的功能介绍如下:1、LCD1602液晶的管脚1:VSS接5V电源负极,即GND。
2、LCD1602液晶的管脚2:VDD接5V电源正极。
3、LCD1602液晶的管脚3:VL为液晶的显示偏压信号,用于对液晶显示对比度调整,接电源正极时对比度最弱,接地时对比度最高。
对比度过高时会产生“鬼影”现象,导致液晶显示的字符不清晰。
我们可以通过使用一个10kΩ的电位器来调整对比度。
4、LCD1602液晶的管脚4:RS为液晶的寄存器选择脚,该管脚为高电平时选择数据寄存器,该管脚为低电平时选择指令寄存器。
5、LCD1602液晶的管脚5:R/W为读/写选择管脚,当该管脚为高电平时进行读操作,当该管脚为低电平时进行写操作。
a当RS和R/W管脚都为低电平时可以写入指令或显示地址。
b当RS管脚为低电平,R/W管脚为高电平时,可以读忙信号。
c当RS管脚为高电平,R/W管脚为低电平时,可以写入数据。
6、LCD1602液晶的管脚6:E管脚为使能端,当E管脚由高电平跳变为低电平时,液晶模块执行命令。
7、LCD1602液晶的管脚7~14:D0~D7为液晶8位双向数据线。
8、LCD1602液晶的管脚15:液晶模块背光源正极。
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)组成。
题目基于单片机的电话拨号系统的设计摘要随着人们生活水平的不断提高,电话在人们的日常生活中是比较常见的电子产品之一,它已进入我们的每一个家庭。
本文设计是基于单片机的电话拨号系统,硬件部分采用AT89C51单片机作为电话键盘拨号按键显示的核心部件,矩阵键盘作为输入电路模块,1602LCD作为显示电路模块。
系统可以实现所拨号码显示、退格、清屏等功能。
结果表明该设计具有电路简单、读取方便、显示直观、代码简洁、容易操作、低功耗和低成本等优点,可用于一般的生活和工作,也可通过改装,提高性能,增加功能,从而给人们的生活带来更多的方便。
关键词:单片机;键盘;1602LCDAbstractAs people living standard unceasing enhancement, the phone in People's Daily life is one of the more common electronic products, it has entered our every family. Design of this article is paper based on single chip microcomputer telephone dialing system,the hardware part adopts AT89C51single-chip microcomputer as input circuit, 1602 LCD display circuit. Can realize the dial number display backspace, screen clearing, and other functions.The results show that the design has simple circuit, convenient read, direct display, code is simple, easy to operate, low power consumption and low cost advantages, can be used for normal life and work, also can through modification, improve its performance, add features, so as to bring to people life more convenient.Keywords:microcontroller; keyboard ; 1602LCD目录摘要 (Ⅰ)Abstract (Ⅱ)1 绪论 (1)2 系统总体设计方案 (1)2.1 系统基本设计方案与论证 (2)2.1.1 控制部分的选择方案与论证 (2)2.1.2 输出显示电路模块的选择方案与论证 (2)2.1.3 键盘输入电路模块的选择方案与论证 (3)2.2 系统设计最终方案 (4)3 系统硬件设计 (5)3.1 主芯片模块 (5)3.1.1 主要特性 (6)3.1.2 管脚说明 (6)3.2 晶振和复位电路模块 (8)3.2.1 复位电路 (9)3.2.2 晶振电路 (9)3.3 显示电路模块 (9)3.3.1 1602LCD简介 (10)3.3.2 1602LCD的RAM地址映射及标准字库表 (13)3.3.3 1602LCD的一般初始化(复位)过程 (15)3.4输入电路模块 (15)3.4.1 矩阵键盘的按键识别方法 (15)3.4.2 矩阵键盘的基本结构 (16)3.5 系统硬件原理图 (17)4 系统软件设计 (19)4.1 软件设计整体思路 (19)4.2 主要功能模块设计 (21)4.2.1 键盘扫描模块设计 (21)4.2.2 LCD显示模块设计 (23)总结 (25)致谢 (28)参考文献 (29)附件1:源程序 (29)附件2:电话拨号系统电路原理图 (36)1 绪论随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。
项目: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液晶屏上。