LCD1602电话拨号按键系统实验论文
- 格式:doc
- 大小:423.50 KB
- 文档页数:15
实验三 LCD1602 液晶显示实验姓名专业学号成绩一、实验目的1.掌握 Keil C51 软件与 proteus 软件联合仿真调试的方法;2.掌握 LCD1602液晶模块显示西文的原理及使用方法;3.掌握用 8 位数据模式驱动 LCM1602液晶的 C 语言编程方法;4.掌握用 LCM1602液晶模块显示数字的 C 语言编程方法。
二、实验仪器与设备1.微机一台 C51 集成开发环境仿真软件三、实验内容1.用 Proteus 设计一 LCD1602液晶显示接口电路。
要求利用 P0口接 LCD1602液晶的数据端, ~做 LCD1602液晶的控制信号输入端。
~口扩展 3 个功能键 K1~K3。
参考电路见后面。
2.编写程序,实现字符的静态和动态显示。
显示字符为第一行:“ 1. 姓名全拼”,第二行:“ 2. 专业全拼 +学号”。
3.编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。
显示字符为:“1. 姓名全拼 2.专业全拼+学号EXP8DISPLAY ”主程序静态显示“ My information!”四、实验原理液晶显示的原理:采用的 LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。
当 LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
1.LCD1602采用标准的 14 引脚(无背光)或 16 引脚(带背光)接口,各引脚接口说明如表:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极2. 1602 液晶模块内部的控制器共有11 条控制指令,如表所示:3.芯片时序表:4. 1602LCD的一般初始化 ( 复位 ) 过程(1)延时 15ms。
LCD1602液晶显示实验报告一、实验目的(1)了解LCD1602的基本原理,掌握其基本的工作流程。
(2)学习用Verilog HDL语言编写LCD1602的控制指令程序,能够在液晶屏上显示出正确的符号。
(3)能够自行改写程序,并实现符号的动态显示。
二、实验设备与器件Quartus II 软件、EP2C8Q208C8实验箱三、实验方案设计1.实验可实现的功能可以实现在LCD1602液晶屏第一行左侧第一位的位置循环显示0~9,并且可以用一个拨码开关BM8实现显示的复位功能。
2.LCD1602基本知识LCD1602液晶能够同时显示16x02即32个字符,模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如“A”。
1602通过D0~D7的8位数据端传输数据和指令。
3.系统工作原理系统的状态转换流程图如图3.1.1所示。
通过状态流程图可以看到,LCD1602液晶屏的状态是不断更新的,依次完成液晶的初始化和0~9的动态显示过程,并且过程可由开关控制。
if (!rst_n)cnt <= 0;elsecnt <= cnt + 1'b1;wire lcd_clk = cnt[23]; // (2^23 / 50M)=0.168s always@(posedge lcd_clk)if(cnt1>=24'd2)beginreg lcd_clk1;lcd_clk1=1;cnt1=0;endelsebegincnt1=cnt1+1; //cnt1对lcd_clk二分频lcd_clk1=0;endalways@(posedge lcd_clk1)beginrow1_val<=8'h30;//设初值case(row1_val) //数字0~9循环显示8'h30: row1_val<=8'h31;8'h31: row1_val<=8'h32;8'h32: row1_val<=8'h33;8'h33: row1_val<=8'h34;8'h34: row1_val<=8'h35;8'h35: row1_val<=8'h36;8'h36: row1_val<=8'h37;8'h37: row1_val<=8'h38;8'h38: row1_val<=8'h39;8'h39: row1_val<=8'h30;default: row1_val<=8'h30;endcaseendparameter IDLE = 8'h00;parameter DISP_SET = 8'h01; // 显示模式设置parameter DISP_OFF = 8'h03; // 显示关闭parameter CLR_SCR = 8'h02; // 显示清屏parameter CURSOR_SET1 = 8'h06; // 显示光标移动设置parameter CURSOR_SET2 = 8'h07; // 显示开及光标设置parameter ROW1_ADDR = 8'h05; // 写第1行起始地址parameter ROW1_0 = 8'h04;reg [5:0] current_state, next_state; // 现态、次态always @ (posedge lcd_clk, negedge rst_n)if(!rst_n) current_state <= IDLE;else current_state <= next_state;//在时钟信号作用期间,次态重复的赋给现态alwaysbegincase(current_state)IDLE : next_state = DISP_SET;DISP_SET : next_state = DISP_OFF;DISP_OFF : next_state = CLR_SCR;CLR_SCR : next_state = CURSOR_SET1;CURSOR_SET1 : next_state = CURSOR_SET2;CURSOR_SET2 : next_state = ROW1_ADDR;ROW1_ADDR : next_state = ROW1_0;ROW1_0 : next_state = ROW1_ADDR;default : next_state = IDLE ;endcaseendalways @ (posedge lcd_clk, negedge rst_n)beginif(!rst_n)beginlcd_rs <= 0;lcd_data <= 8'hxx;endelsebegincase(next_state)IDLE : lcd_rs <= 0;DISP_SET : lcd_rs <= 0;DISP_OFF : lcd_rs <= 0;CLR_SCR : lcd_rs <= 0;CURSOR_SET1 : lcd_rs <= 0;CURSOR_SET2 : lcd_rs <= 0;ROW1_ADDR : lcd_rs <= 0;ROW1_0 : lcd_rs <= 1;endcasecase(next_state)IDLE : lcd_data <= 8'hxx;DISP_SET : lcd_data <= 8'h38;DISP_OFF : lcd_data <= 8'h08;CLR_SCR : lcd_data <= 8'h01;CURSOR_SET1 : lcd_data <= 8'h04;CURSOR_SET2 : lcd_data <= 8'h0C;ROW1_ADDR : lcd_data <= 8'h80;ROW1_0 : lcd_data <= row1_val[127:120];endcaseendendassign lcd_e = lcd_clk; // 数据在时钟高电平被锁存assign lcd_rw = 1'b0; // 只写endmodule5.下载电路及引脚分配设计设计中用实验箱自带的50MHz时钟信号作为输入端,用sel0、sel1、sel2三个使能端选通LCD1602液晶屏,EP2C8Q208C8就会工作在给液晶下命令的状态,使得点阵正常工作,如图3.5.1所示。
智能电话拨号器毕业论文摘要本设计所做的智能电话拨号器,主要是将我们平时打电话时遇到的比较头痛冗长的卡号和电话号码通过按一键就能全部拨出,不需要人脑的记忆。
拨号过程是先将号码(包括接入码,卡号,密码,也可加电话号码)通过双音频电话输入,再经过译码器MT8870将双音频信号转化为二进制数据,存储到数据存储器24C16当中。
当有按键按下时数据由编码器MT5089再转化为双音频信号,通过与电话并联的导线将信号发送到电话线路中,就实现了拨号的功能。
我在设计当中主要负责存储器24C16的读写。
选择24C16存储器主要是因为其体积小,引线少,与MSC—51单片机连接容易,数据掉电不丢失,数据保持期将近100年,读取和写入都比较方便。
此电话智能电话拨号器携带方便,体积小,操作简便,价格低廉,电话卡的拨打更加方便,可靠,快速。
关键词:拨号器发码电路存储电路单片机AbstractThis introduced design is to realize dialing out all tedious number ( including card number ;password and telephone number ) with one button , when we commonly use phone card, we need use brain to memorize . First ,we could use the double tone MulitiFrency signal phone input number , and the MT8870 could transform the double tone MulitiFrency signal into binary system code ,store data in 24C16. When someone press the button , MT5087 can transform the data into the double tone MulitiFrency signal, and send the signal into line. Then it realize the dialing.In this design , I am charge of the memory 24C16 read and write . store the data in the memory 24C16 ,because it is small in volume , a few of line , easy to connect MSC-51 microprocessor difficult to lose data when cut off electricity convenient to read and write .This telephone dialer is convenient to carry small in volume , simple to operate the price is cheep. It an make dialing more convenient ,faithful,faster.Key words: dialing device ; the circuit of sending out code ; the circuit of storing ; MSC目录摘要 (1)Abstract (2)第一章绪论 (5)第二章拨号器原理 (6)拨号器组成 (6)拨号器的工作原理 (7)第三章拨号器中存储器的应用 (8)3 . 1 存储器的选用 (8)24 系列串行EEPROM 的正确选用 (8)3 . 2 24c16 与单片机的硬件连接 (9)24c16 引脚及内部原理方框图 (9)24C16 总线特点 (11)24c16与89c2051的接口 (12)3 . 3 24c16与单片机的软件连接 (13)24c16 的控制字节 (13)24c16 的4 个典型写入操作时序 (13)24C16的写操作和读操作 (14)3 . 4 拨号器中存储器的软件设计 (16)第四章拨号器的硬件设计 (17)4 . 1 AT89C2051 单片机 (18)概述 (18)引脚功能说明 (19)89C2051的各端口连接 (20)4. 2 译码器MT5089芯片介绍 (21)芯片引脚介绍 (21)MT5089芯片的特点 (21)编码器MT8870芯片 (23)编码器MT8870芯片介绍 (23)编码器MT8870芯片的特点 (25)TOP851编程器简介 (25)第五章拨号器的整体设计 (27)拨号器的原理图设计 (27)拨号器的软件设计 (28)第六章实验 (35)实验所需器件 (33)基本实验 (33)数码管逐加程序 (33)存储器读取实验 (37)总结 (43)致谢 (44)参考文献: (45)附录:参考文献英文原文和中文翻译 (46)第一章绪论随着通信事业的不断发展,人们使用电话相互联系越来越普遍,但手机和固定电话话费昂贵,使人们对打电话望而却步。
项目: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液晶显示实验实验目的:1.了解LCD1602液晶显示的工作原理和基本结构;2.掌握LCD1602液晶显示的驱动控制方法;3.能够通过Arduino控制LCD1602液晶显示。
实验材料:1.Arduino UNO开发板2.LCD1602液晶显示屏3.面包板4.杜邦线实验步骤:1.将Arduino UNO开发板与面包板连接,确保连接正确并牢固;2.将LCD1602液晶显示屏与面包板连接,连接时应注意引脚的对应关系,确保连接正确;3.将杜邦线的一端连接到Arduino UNO开发板的数字引脚上,另一端连接到对应的液晶显示屏引脚上;4.编写Arduino代码,实现液晶显示屏的控制功能;5.将编写好的代码上传到Arduino UNO开发板上,运行程序,观察LCD1602液晶显示屏上的显示结果。
实验结果:通过实验,我们成功实现了对LCD1602液晶显示屏的控制。
在液晶显示屏上可以显示出我们想要的文字、数字或符号。
通过控制液晶显示屏的引脚电平,可以控制液晶显示出不同的字符。
实验总结:通过本次实验,我们了解了LCD1602液晶显示的工作原理和基本结构。
液晶显示屏通过控制引脚电平来控制液晶分子的排列,从而实现文字、数字或符号的显示。
我们还掌握了LCD1602液晶显示的驱动控制方法,通过编写Arduino代码,我们能够实现对液晶显示屏的控制。
在实验中,我们还学习到了Arduino的使用,它是一款开放源代码的电子原型平台,由硬件和软件组成。
通过编写Arduino代码,我们可以控制与Arduino连接的各种外设,包括LCD1602液晶显示屏。
通过本次实验,我们不仅加深了对LCD1602液晶显示的理解,还学会了使用Arduino控制液晶显示屏。
这对我们的电子制作和嵌入式系统开发有重要意义。
毕业设计(论文)题目基于单片机的电话拨号系统的设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
单片机课程设计--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的电位器调整对比度。
安徽财经大学专业综合课程实验及设计设计题目:1602LCD显示电话拨号键盘按键实验单位(二级学院):管理科学及工程学院学生姓名:袁也专业:电子信息工程班级:081信工(2)学号:200883014目录目录 (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的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W同为低电平时可以写入指令或者显示地址,当RS低电平R/W为高电平时可以读忙信号,当RS为高电平R/W低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为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 系统总流程图2.LCD显示程序流程图显示程序流程图如图9。
流程图分析:首先对1602显示屏进行初始化,然后检查忙信号,若BF=0,则获得显示RAM的地址,写入相应的数据显示;若BF=1,则代表模块正在进行内部操作,不接受人和外部指令和数据,知道BF=0为止。
图9 LCD显示程序流程图注意事项:AT89C51单片机,P0口输出时,必须使用上拉电阻,提高电压,否则无法得到输出结果。
附录:下面为系统运行程序:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}sbit BEEP=P1^0;sbit LCD_RS=P2^0;sbit LCD_RW=P2^1;sbit LCD_EN=P2^2;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;i<120;i++);}//--------------------------------//在LCD指定的行上显示字符串//--------------------------------void Display_String(uchar *str,uchar LineNo){uchar k;LCD_Set_Position(LineNo);for(k=0;k<16;k++)Write_LCD_data(str[k]);}//----------------------------------------------//忙检查//---------------------------------------------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 1{TH0=-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;i<4;i++){P3=keyScanCode[i];for(j=0;j<3;j++){k=i*3+j;if(P3==keyCodeTable[k])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;j<16;j++)Dial_Code_Str[j]=' ';i=0;}Dial_Code_Str[i]=key_Table[keyNo];//将待显示字符放入待显示的拔号串中Display_String(Dial_Code_Str,0x40);//在第二行显示号码TR0=1;//T0中断控制按键声音while(Getkey()!=0xff);//等待按键释放}}实验总结:经过本次实验,对单片机有了进一步的认识。