LCD1602电话拨号按键系统实验论文_第1页
LCD1602电话拨号按键系统实验论文_第2页
LCD1602电话拨号按键系统实验论文_第3页
LCD1602电话拨号按键系统实验论文_第4页
LCD1602电话拨号按键系统实验论文_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安徽财经大学专业综合课程实验及设计设计题目:1602LCD显示电话拨号键盘按键实验单位(二级学院): 管理科学及工程学院 学 生 姓 名: 袁 也 专 业: 电子信息工程 班 级: 081信工 (2) 学 号: 200883014 目 录目 录2一、设计目的3二摘要:3关键词:3三实验步骤及过程3实验原理图部分31单片机最小系统32输入按键系统431602LCD显示系统54数字代码6实验原理图如下7模拟仿真部分7程序设计部分81程序总流程图82LCD显示程序流程图9注意事项10附录:10一、设计目的本方案设计一个电话拨号键盘系统;1. 要求以51单片机作为微控制器;2. 通过1602LCD显示屏显示拨号屏幕;3. LED显示屏轮流显示数字;4. 数字显示为逐个显示方式,最多保留10位。二摘要:介绍了基于单片机的LED1602显示屏的设计过程。给出了其硬件原理图和系统仿真图。做到了按要求实现规定的功能。关键词:单片机; LED1602显示屏;键盘系统三实验步骤及过程实验原理图部分1单片机最小系统单片机最小系统主要由电源、复位、震荡电路以及扩展部分等部分组成。图1 单片机最小系统2输入按键系统独立的键盘与单片机相连时,每个按键都需要单片机的一个I/O口,若按键较多时,占用的I/O口资源就会过多,为此就引入了矩阵键盘。本次设计共有09、#、*共12个按键,因此引入3*4的矩阵键盘,共需要7个I/O口,7条线分别与单片机P3口相连。图2 按键键盘31602LCD显示系统下图为LCD1602元件引脚图以及对应的引脚功能:图3 LCD1602元件图图4 引脚功能列表图4引脚说明:第1脚:VSS为地电源;第2脚:VDD接+5V电源;第3脚:VL为液晶显示器对比度调度端,接正电源时对比度最弱,接地时对比度最高,对比度过高会产生“鬼影”,必要时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W同为低电平时可以写入指令或者显示地址,当RS低电平R/W为高电平时可以读忙信号,当RS为高电平R/W低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602液晶模块内部的控制器共有11条指令,如下图所示图5 1602液晶模块内部控制其指令指令说明:指令1:清显示,指令码01H,光标复位到地址00H位置;指令2:光标复位,光标返回到地址00H;指令3:光标和显示位置设置I/D,光标移动方向,高电平向右移,低电平向左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效;指令4: 显示开关控制。D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标。B:控制光标是否闪烁,高电平闪烁,低电平不闪烁;指令5:光标或显示移位S/C,高电平时显示移动的文字,低电平时显示移动的光标;指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线。N:低电平时为单位行显示,高电平时为双行显示。F:低电平时显示5*7的点阵字符,高电平时显示5*10的显示字符。指令7:字符发生器RAM地址设置;指令8:DDRAM地址设置;指令9:读忙信号和光标地址。BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。4数字代码:1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,其中阿拉伯数字的代码为:代码 数字00110000 000110001 100110010 200110011 300110100 400110101 500110110 600110111 700111000 800111001 9实验原理图如下图6 实验原理图模拟仿真部分仿真图根据实验原理图的元器件,在Proteus软件中绘制出,检查无误后导入运行程序,并观对结果进行分析,观察仿真结果是否真确的达到的实验所预期的效果,如果没有达到,则分析原因,找出错误,直至达到预期效果;如果达到预期效果,则描述实验结果。实验仿真图如下图:图7 实验仿真图程序设计部分1程序总流程图图8为系统总流程图。首先系统进入初始化,系统开始运行,当检测键盘没有按下时,则返回继续检测直至有键盘按下;当扫描到键盘按下时,读取按键值,并检测是否超过10位,若没有超过则送入液晶显示;若超过10位则系统重新初始化。图8 系统总流程图2LCD显示程序流程图显示程序流程图如图9。流程图分析:首先对1602显示屏进行初始化,然后检查忙信号,若BF=0,则获得显示RAM的地址,写入相应的数据显示;若BF=1,则代表模块正在进行内部操作,不接受人和外部指令和数据,知道BF=0为止。图9 LCD显示程序流程图注意事项:AT89C51单片机,P0口输出时,必须使用上拉电阻,提高电压,否则无法得到输出结果。附录:下面为系统运行程序:#include#include#define uchar unsigned char#define uint unsigned int#define DelayNOP() _nop_();_nop_();_nop_();_nop_(); sbit BEEP=P10;sbit LCD_RS=P20;sbit LCD_RW=P21;sbit LCD_EN=P22;void DelayMS(uint ms);bit LCD_Busy_Check();void LCD_Set_Position(uchar Position);void Write_LCD_command(uchar cmd);void Write_LCD_data(uchar dat);/-标题字符串char code Title_Text=- phone Code -;/-键盘拔号与键盘符号映射表uchar code key_Table=1,2,3,4,5,6,7,8,9,*,0,#;/-键盘拔号数字缓冲uchar Dial_Code_Str= ; /此处空格太少,会在屏幕上显示一个字符出来uchar keyNo=0xff;int tCount=0;/-/延时/-void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+); /-/在LCD指定的行上显示字符串/-void Display_String(uchar *str,uchar LineNo)uchar k; LCD_Set_Position(LineNo);for(k=0;k16;k+)Write_LCD_data(strk);/-/忙检查/-bit LCD_Busy_Check()bit LCD_Status;LCD_RS=0;/寄存器选择LCD_RW=1;/读状态寄存器LCD_EN=1;/开始读DelayMS(1);LCD_Status=(bit)(P0&0x80) ;LCD_EN=0;return LCD_Status;/-/写LCD命令/-void Write_LCD_Command(uchar cmd)while(LCD_Busy_Check()&0x80)=0x80);/忙等待LCD_RS=0;/选取择命令寄存器LCD_RW=0;/写LCD_EN=0;_nop_();_nop_();P0=cmd;DelayNOP();LCD_EN=1;DelayNOP();LCD_EN=0;/-/发送数据/-void Write_LCD_Data(uchar Str)while(LCD_Busy_Check()&0x80)=0x80);/忙等待LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=Str;DelayNOP();LCD_EN=1;DelayMS(1);LCD_EN=0;/-/LCD初始化/-void Initialize_LCD()Write_LCD_Command(0x38);DelayMS(5);Write_LCD_Command(0x0C);/清屏DelayMS(5);Write_LCD_Command(0x06);/字符进入模式,屏幕不动,字符后移。DelayMS(5);Write_LCD_Command(0x01);/显示开,关光标。DelayMS(5);/-/设置显示位置/-void LCD_Set_Position(uchar Position)Write_LCD_Command(Position | 0x80);/-/t0控制按键声音/-void T0_INT() interrupt 1TH0=-600/256;TL0=-600%256;BEEP=BEEP;if(+tCount=200)tCount=0;TR0=0; /-/键盘扫描/-/=uchar Getkey()uchar i,j,k=0;uchar keyScanCode=0xef,0xdf,0xbf,0x7f;/键盘扫描码uchar keyCodeTable=0xee,0xed,0xeb,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,0x7d,0x7b;P3=0x0f;/扫描键盘获取按键序号if(P3!=0X0F)for(i=0;i4;i+)P3=keyScanCodei;for(j=0;j3;j+)k=i*3+j;if(P3=keyCodeTablek)return k;else return 0xff; /-/main/-void main()uchar i=0,j;P0=P2=P1=0XFF;IE=0X82;TMOD=0X01;Initialize_LCD(); /LCD初始化Display_String(Title_Text,0x00);/在第一行显示标题while(1)keyNo=Getkey();/获取按键值if(keyNo=0xff)continue;/无按键时继续扫描if(+i=12)/超过11位时清空for(j=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论