实验八 LCM1602液晶显示实验

合集下载

1602液晶显示的实验例子

1602液晶显示的实验例子
X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[ListLength]>0x20) //若到达字串尾则退出
{
if (X <= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
void LCMInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; //算出指令码
WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
WriteDataLCM(DData);
void Delay5Ms(void);
void Delay400Ms(void);
unsigned char code cdle_net[] = {""};
unsigned char code email[] = {"pnzwzw@"};
void main(void)
LCM_E = 0; //延时
LCM_E = 1;

LCD1602液晶显示实验报告

LCD1602液晶显示实验报告

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所示。

实验1:1602LCD显示

实验1:1602LCD显示

实验1 1602型LCD显示一、实验目的:1. 了解Altera DE2-70多媒体开发板与PC(个人电脑)的正确连接;2. 掌握PC上安装的硬件设计环境Quartus II和应用程序设计环境Nios II;3. 初步了解IP核(硬件)模块的配置方法;4. 了解与此工程有关的顶层文件(.v);5. 掌握Nios II IDE的“hello world”软件工程模板;二、实验步骤:(一)初建工程:在PC上新建一个名为”demo_lcd”的工程鼠标左键双击桌面上的“Quartus II”快捷方式图标,耐心等待片刻,即可启动“Quartus II”设计页面,如图1-1所示。

图1-1在“Quartus II”设计页面内,鼠标左键单击“File -> New Project Wizard”。

弹出“New Project Wizard :introduction”。

如图1-2所示。

初次实验可以仔细阅读此页面内容,然后鼠标左键单击“next”按钮跳过此页,进入“New Project Wizard: Directory, Name, Top -level entity” 页面,如图1-3所示。

“the working directory for this project”(工程的工作目录)可以任意填写,例如:“E:/demo/demo_LCDdisplay”。

“工程的工作目录”如前“E:/demo/demo_LCDdisplay”,表示将会在E 盘上产生一个文件夹“demo”,在“demo”文件夹里产生另一个文件夹”demo_LCDdisplay”(工程文件夹,保存工程文件),此实验后续步骤中产生的各种文件会自动保存到路径“E:/demo/demo_LCDdisplay”下。

图1-2图1-3“the name of this project”(工程名字)填写为”demo_lcd”。

这里需要注意:由于“SOPC Builer”工具不能识别空格、中划线等符号,故实验所有步骤中如果需要命名,命名中不允许有空格、中划线出现,但“SOPC Builer”工具能识别下划线。

LCD1602液晶显示实验报告

LCD1602液晶显示实验报告

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控制液晶显示屏。

这对我们的电子制作和嵌入式系统开发有重要意义。

功能完整的1602LCD时钟实验

功能完整的1602LCD时钟实验

功能完整的1602LCD时钟实验摘要本设计基于单⽚机技术原理,以单⽚机芯⽚STC89C52作为核⼼控制器,通过硬件电路的制作以及软件程序的编制,设计制作出⼀个多功能数字时钟系统。

单⽚机扩展的LCD显⽰器⽤来显⽰年、⽉、⽇、时、分、秒计数单元中的值。

整个设计包括两⼤部分: 硬件部分和软件部分,以单⽚机为核⼼, 配以⼀定的外围电路和软件。

硬件是整个系统的基础, 软件部分则要合理、充分地⽀持和使⽤系统的硬件, 从⽽完成系统所要完成的任务。

本设计采⽤LCD液晶显⽰,电路简单使⽤⼴泛。

该时钟系统主要由时钟模块、闹钟模块、液晶显⽰模块、键盘控制模块以及信号提⽰模块组成。

能够准确显⽰时间(显⽰格式为年:⽉:⽇:时时:分分:秒秒,24⼩时制),可随时进⾏时间调整,具有闹钟时间设置、闹钟开/关、⽌闹功能。

设计以硬件软件化为指导思想,充分发挥单⽚机功能,⼤部分功能通过软件编程来实现,电路简单明了,系统稳定性⾼。

单⽚机在这种情况下诞⽣了基于单⽚机电⼦时钟。

关键词:单⽚机 LCD1602 数字钟This design based on the single chip microcomputer principle, taking single-chip chip STC89C52 as core controller, through the hardware circuit and software production procedure formulation, designed and produced a multi-function digital clock system. SCM extended LCD display used to display date and time, minutes and seconds counting unit of values. The whole design includes two parts, hardware and software of, based on singlechip, match with certain peripheral circuit and software. Hardware is based in the whole system, the software part then be reasonable and fully support and use the system hardware, thus completing system to complete the task. This design USES the LCD, simple circuit is widely used. This clock system mainly by the clock module, alarm module, LCD module, keyboard control module and signal hint module. To accurately display the time (display format for years: month: day: always: component: seconds seconds, 24-hour system), available for time to adjust, with alarm time setting, alarm clock on/off, stop joking function. Design with hardware and software into guiding ideology, give full play to the SCM functions, most functions through software programming realize, circuit straightforward, stability of the system is high. SCM in this case was born based on single-chip electronic clock. Keywords: SCM LCD1602 digital clock前⾔数字钟是采⽤数字电路实现对时,分,秒数字显⽰的计时装置,⼴泛⽤于个⼈家庭,车站, 码头办公室等公共场所,成为⼈们⽇常⽣活中不可少的必需品,由于数字集成电路的发展和⽯英晶体振荡器的⼴泛应⽤,使得数字钟的精度,远远超过⽼式钟表, 钟表的数字化给⼈们⽣产⽣活带来了极⼤的⽅便,⽽且⼤⼤地扩展了钟表原先的报时功能。

实验八 LCM1602液晶显示实验

实验八 LCM1602液晶显示实验

void LCD_check_busy(void)
{
while(1)
{
lcden=0;
lcdrs=0;
lcdrw=1;
P0=0xff;
lcden=1;
if(busy==0) break;
}
lcden=0;
}
delay(int x)
{
while(x--);
}
delay_ms(int x)
{
int a,b;
uchar num,i;
uchar code tab[]="My information!";
uchar code tab1[]="1.yixifeng";
uchar
code
tab2[]="2.dianzi2010412337";
uchar code tab3[]="3.MCS-51 EXP8";
uchar code tab4[]="4.LCD DISPLAY";
write_com(0x06);
}
void write_str(uchar *str)
{
while(*str!='\0')
{
while(flag3);
if(flag4){ write_com(0x01);
break; }
write_dat(*str) ;
str++;
delay_ms(50);
}
}
void write_com(uchar com) {
第六脚:E 端为使能端,E 端由高电平跳变为低电平时,液晶模块执行命令。 第 7~14 脚:D0~D7 为 8 位双向数据线。 第 15 脚:背光源正极。 第 16 脚:背光源负极。 2、芯片时序表:

8-实验八 LCM1602液晶显示实验

8-实验八 LCM1602液晶显示实验

实验八 LCM1602液晶显示实验一、实验目的1.学习单片机C语言和汇编语言的编程方法。

2.了解LCM1602液晶显示模块的功能和使用方法。

3.掌握LCM1602液晶显示程序的编写方法。

二、实验原理1.LCM1602液晶显示模块:LCD(Liquid Crystal Display)是液晶屏,LCM(Liquid Crystal Module)则是液晶模块,它包括有LCD液晶屏、PCB线路板、驱动电路和背光灯等。

LCM1602的主要特性有:1)5V电源供电,低功耗、长寿命、高可靠性;2)内置192种字符;3)具有64个字节的自定义字符RAM;4)背光方式:底部LED。

5)可以显示2行,每行16个英文字符。

LCM1602实物图如右图所示,其采用标准的16脚接口。

第1脚:VSS为电源地,接GND;第2脚:VDD接5V正电源;第3脚:VL为液晶显示器对比度调整端,接10K电位器;第4脚:RS为寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器;第5脚:RW为读写信号线引脚,高电平时进行读操作,低电平时进行写操作;第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;第7~14脚:D0~D7为8位双向数据线;第15脚:BLA背光电源正极(+5V)输入引脚;第16脚:BLK背光电源负极,接GND。

2.硬件模块连线:LCM1602的使能引脚E、读写信号线引脚RW和寄存器选择引脚RS分别通过跳帽开关与单片机P1口低3位(P1.2~P1.0)连接。

单片机P0口8位(P0.7~P0.0)分别与LCM1602 的8个数据输入输出引脚相连,用于传输显示数据。

三、实验内容1.使用LCM1602芯片手册,学习并理解LCM1602液晶显示模块的原理、功能以及使用方法。

2.用C语言或汇编语言编写LCM1602液晶显示程序。

3.调节电位器,观察液晶显示的对比度。

四、实验步骤1.连接本实验用到的硬件模块:单片机系统模块、LCM1602液晶显示模块。

LCD1602液晶显示实验实验报告及程序

LCD1602液晶显示实验实验报告及程序

LCD1602液晶显示实验实验报告及程序一、实验目的本次实验的主要目的是熟悉并掌握 LCD1602 液晶显示屏的工作原理和编程方法,能够成功实现字符在液晶屏幕上的显示和控制。

二、实验原理LCD1602 是一种工业字符型液晶,能够显示 16x2 个字符,即每行16 个字符,共 2 行。

它的工作原理是通过控制液晶分子的偏转来实现字符的显示。

LCD1602 有 16 个引脚,主要引脚功能如下:1、 VSS:接地。

2、 VDD:接电源(通常为+5V)。

3、 V0:对比度调整引脚,通过外接电位器来调节屏幕显示的对比度。

4、 RS:寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器。

5、 RW:读写选择引脚,高电平时进行读操作,低电平时进行写操作。

6、 E:使能引脚,下降沿触发。

7、 D0 D7:数据引脚,用于传输数据和指令。

LCD1602 的指令集包括清屏、归位、输入方式设置、显示开关控制、光标或显示移位、功能设置、CGRAM 和 DDRAM 地址设置以及读忙标志和地址等。

三、实验设备与材料1、单片机开发板2、 LCD1602 液晶显示屏3、杜邦线若干4、电脑四、实验步骤1、硬件连接将 LCD1602 的 VSS 引脚接地。

将 VDD 引脚接+5V 电源。

将 V0 引脚通过一个 10K 的电位器接地,用于调节对比度。

将 RS、RW、E 引脚分别连接到单片机的三个 I/O 口。

将 D0 D7 引脚连接到单片机的 8 个 I/O 口。

2、软件编程包含必要的头文件。

定义与 LCD1602 连接的 I/O 口。

编写初始化函数,包括设置显示模式、清屏、输入方式等。

编写写指令函数和写数据函数,用于向LCD1602 发送指令和数据。

编写显示字符串函数,实现字符在屏幕上的显示。

3、编译下载程序使用编译软件对编写的程序进行编译,生成可执行文件。

将可执行文件下载到单片机开发板中。

4、观察实验结果给开发板上电,观察 LCD1602 液晶显示屏上是否正确显示预设的字符。

实验八 LCD1602液晶显示实验

实验八 LCD1602液晶显示实验

电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:单片机原理与接口技术实验3、芯片时序表:4、LCD数据存储器地址LCD内置了DDRAM,用来寄存待显示的字符代码。

其地址与屏幕的对应关系如下:也就意味着想要在LCD1602的第一行第一列显示一个“A”字符,就要向DDRAM的00H地址写入“A”,但是在实际写入时,还必须将00H加上80H,即0X80+0X00。

以此类推,如果想要在LCD1602的第二行的第二列显示字符内容,则实际写入地址应该为0X80+0X41。

5、1602LCD的一般初始化(复位)过程(1) 延时15ms。

(2) 写指令38H(不检测忙信号)。

(3) 延时5ms。

(4) 写指令38H(不检测忙信号)。

(5) 延时5ms。

(6) 写指令38H(不检测忙信号)。

(7) 以后每次写指令、读/写数据操作均需要检测忙信号。

(8) 写指令38H:显示模式设置。

(9) 写指令08H:显示关闭。

(10) 写指令01H:显示清屏。

(11) 写指令06H:显示光标移动设置。

(12) 写指令0CH:显示开及光标设置。

6、LCD1602与单片机直接连接典型示意图如图8.1所示。

图8.1 LCD1602液晶显示。

三、实验内容和步骤1、用Proteus设计一LCD1602液晶显示接口电路。

参考实验指导书上的参考程序,编写程序,实现字符的静态显示。

显示字符为:第一行:“姓名全拼(居中)”,第二行:“专业全拼+学号(后3位)”。

将LCD显示截图以及相应的程序保存在下方。

#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" xuzhulin ";uchar code table1[]="zidonghua 031";sbit lcden=P2^7;sbit lcdrw=P2^6;sbit lcdrs=P2^5;uchar num;for(num=0;num<12;num++){write_data(table[num]); //写数据,LCD的第一行显示delay(200);}write_com(0x02); //光标返回write_com(0x80+0x40); //设置数据地址指针,LCD第二行显示for(num=0;num<16;num++){write_data(table1[num]);delay(200);}while(1);}}2、在上一题的基础上,增加两个外部中断,实现不同内容的显示。

LCD1602液晶显示实验要点

LCD1602液晶显示实验要点

LCD1602液晶显示实验要点一、液晶显示原理液晶显示屏是一种电场调制显示器件,通过激励电场使液晶分子的排列状态发生变化,从而控制光的透过程度,实现图像显示。

液晶显示器的基本结构是两块平行的玻璃基板夹层液晶,上面由导电涂层构成的液晶单元。

在液晶单元上方有一块透明电极玻璃,根据控制信号排列液晶分子,形成图像。

二、LCD1602液晶显示屏三、实验器材1. Arduino开发板2.LCD1602液晶显示屏3.面包板4.杜邦线等四、实验步骤1. 接线:将LCD1602液晶显示屏与Arduino开发板通过杜邦线连接。

将VCC接到5V电源、GND接到地、SCL接到A5口、SDA接到A4口。

2. 编写程序:打开Arduino开发环境,编写程序代码,实现液晶显示功能。

3. 初始化:使用LiquidCrystal库,编写代码进行液晶显示屏的初始化设置。

4. 显示字符:通过调用lcd.print(函数,将指定字符显示在液晶屏上。

5. 光标控制:调用lcd.setCursor(函数,设置光标所在位置。

6. 清屏:调用lcd.clear(函数,清除液晶屏上的字符。

7. 控制显示:通过调用lcd.noDisplay(和lcd.Display(函数,控制液晶屏的显示和关闭。

8. 自定义字符:通过调用lcd.createChar(函数,创建自定义字符并显示在液晶屏上。

五、实验注意事项1.液晶显示屏的类型应与编程语言库文件匹配。

2.接线时要确保正确连接,以免损坏LCD1602显示屏。

3.初始化液晶显示屏时,要设置液晶屏的列数和行数。

4.控制液晶显示屏时,要注意操作指令的执行顺序,以免出现误操作。

六、实验结果展示通过编写相应的程序,可以实现在液晶显示屏上显示指定字符、自定义字符,以及控制光标的移动和屏幕的清除等功能。

实验成功时,可以在液晶显示屏上看到所期望的字符和效果。

七、实验应用液晶显示屏广泛应用于各种电子设备和仪器仪表,如电子体温计、电子秤、数码相册、电视机等。

实验10 LCM1602显示实验

实验10  LCM1602显示实验
3/5
博采众长,海纳百川!
大唐移动授权培训中心
_nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } /********************************************************** 函数功能:设定显示位置子程序 ***********************************************************/ void lcd_pos(unsigned char pos) { lcd_wcmd(pos | 0x80); } /********************************************************** 函数功能:写入显示数据到LCD子程序 ***********************************************************/ void lcd_wdat(unsigned char dat) { while(lcd_bz()); //判断LCD是否忙碌 rs = 1; rw = 0; ep = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } /************************************************************ 函数功能:LCD初始化子程序 *************************************************************/ void lcd_init() { lcd_wcmd(0x38); //显示模式设置 delay(1);

实验八 单片机液晶显示实验

实验八 单片机液晶显示实验

实验八单片机液晶显示实验一、实验目的1、了解液晶显示屏的控制原理及方法。

2、了解点阵汉字的显示原理。

二、实验说明1、利用实验上的液晶显示屏电路,编写程序控制显示,输出汉字。

2、本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。

图形液晶显示模块有两种连接方式。

一种为直接访问方式,一种为间接控制方式。

本实验仪采用直接控制方式。

三、实验仪器计算机伟福实验箱(lab2000P )四、实验内容1、利用实验上的液晶显示屏电路,编写程序控制显示,输出汉字。

2、本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。

图形液晶显示模块有两种连接方式。

一种为直接访问方式,一种为间接控制方式。

本实验仪采用直接控制方式。

3、直接控制方式就是将液晶显示模块的接口作为存储器或I/O设备直接挂在计算机总线上。

计算机通过地址译码控制E1和E2的选通;读/写操作信号R/W由地址线A1控制;命令/数据寄存器选择信号AO由地址线A0控制。

实际电路如上图所示。

地址映射如下(地址中的X由LCD CS决定,可参见地址译码部分说明)五、思考题1、显示自己的班级和姓名;2、可以动态显示,上下或者左右移动;六、源程序修改原理及其仿真结果CWADD1 EQU 08000H ;写指令代码地址(E1)DWADD1 EQU 08001H ;写显示数据地址(E1)CRADD1 EQU 08002H ;读状态字地址(E1)DRADD1 EQU 08003H ;读显示数据地址(E1)CWADD2 EQU 08004H ;写指令代码地址(E2)DWADD2 EQU 08005H ;写显示数进地址(E2)CRADD2 EQU 08006H ;读状态字地址(E2)DRADD2 EQU 08007H ;读显示数据地址(E2)PD1 EQU 3DH ;122/2 分成左右两半屏122x32 COLUMN EQU 30HPAGE_ EQU 31H ;页地址寄存器D1,DO:页地址CODE_ EQU 32H ;字符代码寄存器COUNT EQU 33H ;计数器DIR equ 34hdtp1 equ 35hdtp2 equ 36hdtp3 equ 37hCTEMP EQU 38HCOM EQU 20H ;指令寄存器DAT EQU 21H ;数据寄存器ORG 0jmp mainmov dptr, #0f002hmov a,#56hmovx @dptr,amov a,#0movx a,@dptrJMP MAIN;---------------------------------------; 初始化程序INIT: MOV COM, #0E2H ;复位LCALL PROLCALL PR3MOV COM, #0A4H ;关闭休闭状态LCALL PROLCALL PR3MOV COM, #0A9H ;设置1/32占空比LCALL PROLCALL PR3MOV COM, #0A0H ;正向排序设置LCALL PROLCALL PR3MOV COM, #0C0H ;设置显示起始行为第一行LCALL PROLCALL PR3MOV COM, #0AFH ;开显示设置LCALL PROLCALL PR3RET;------------------------------------------------; 清屏CLEAR: MOV R4,#00H ;页面地址暂存器设置CLEAR1: MOV A,R4 ;取页地址值ORL A,#0B8H ;"或"页面地址设置代码MOV COM,A ;页面地址设置LCALL PROLCALL PR3MOV COM,#00H ;列地址设置为"0"LCALL PROLCALL PR3MOV R3,#50H ;一页清80个字节CLEAR2: MOV DAT,#00H ;显示数据为"0"LCALL PR1LCALL PR4DJNZ R3,CLEAR2 ;页内字节清零循环INC R4 ;页地址暂存器加一CJNE R4,#04H,CLEAR1 ;RAM区清零循环RET;-----------------------------------;1.写指令代码子程序(E1)PRO: PUSH DPLPUSH DPHMOV DPTR,#CRADD1 ;设置读状态字地址PR01: MOVX A,@DPTR ;读状态字JB ACC.7,PR01 ;判"忙"标志为句"0",否再读MOV DPTR,#CWADD1 ;设置写指令代码地址MOV A,COM ;取指令代码MOVX @DPTR,A ;写指令代码POP DPHPOP DPLRET;------------------------------------;2.写显示数据子程序(E1)PR1: PUSH DPLPUSH DPHMOV DPTR,#CRADD1 ;设置读状态字地址PR11: MOVX A,@DPTR ;读状态宇JB ACC.7,PR11 ;判"忙"标志为"0",否再读MOV DPTR,#DWADD1 ;设置写显示数据地址MOV A,DAT ;取数据MOVX @DPTR,A ;写数据POP DPHPOP DPLRET;-------------------------------------;3.读显示数据子程序(E1)PR2: PUSH DPLPUSH DPHMOV DPTR,#CRADD1 ;设置读状态字地址PR21: MOVX A,@DPTR ;读状态字JB ACC.7,PR21 ;判"忙"标志为"0"否,否再读MOV DPTR,#DRADD1 ;设置读显示数据地址MOVX A,@DPTR ;读数据MOV DAT,A ;存数据POP DPHPOP DPLRET;-------------------------------------;4.写指令代码子程序(E2)PR3: PUSH DPLPUSH DPHMOV DPTR,#CRADD2 ;设置读状态字地址PR31: MOVX A,@DPTR ;读状态字JB ACC.7,PR31 ;判"忙"陈志为"0"否,否再读MOV DPTR,#CWADD2 ;设置写指令代码地址MOV A,COM ;取指令代码MOVX @DPTR,A ;写指令代码POP DPHPOP DPLRET;-------------------------------------; 5.写显示数据子程序(E2)PR4: PUSH DPLPUSH DPHMOV DPTR,#CRADD2 ;设置读状态字地址PR41: MOVX A,@DPTR ;读状态字JB ACC.7,PR41 ;判"忙"标志为"0"否,否再读MOV DPTR, #DWADD2 ;设置写显示数据地址MOV A,DAT ;取数据MOVX @DPTR,A ;写数据POP DPHPOP DPLRET;---------------------------------------; 6.读显示数据子程序(E2)PR5: PUSH DPLPUSH DPHMOV DPTR,#CRADD2 ;设置读状态字地址PR51: MOVX A,@DPTR ;读状态字JB ACC.7,PR51 ;判"忙"标志为"0",否再读MOV DPTR,#DRADD2 ;设置写显示数据地址MOVX A,@DPTR ;读数据MOV DAT,A ;存数据POP DPHPOP DPLRET; 中文显示子程序CCW_PR: MOV DPTR,#CCTAB ;确定字符字模块首地址MOV A,CODE_ ;取代码MOV B,#20H ;字模块宽度为32个字节MUL AB ;代码×32ADD A,DPL ;字符字模块首地址MOV DPL,A ;字模库首地址+代码×32MOV A,BADDC A,DPHMOV DPH,APUSH COLUMN ;列地址入栈PUSH COLUMN ;列地址入栈MOV CODE_,#00H ;代码寄存器借用为间址寄存器CCW_1: MOV COUNT,#10H ;计数器设置为16MOV A,PAGE_ ;读页地址寄存器ANL A,#03H ;取页地址有效值ORL A,#0B8H ;"或"页地址设置代码MOV COM,A ;设置页地址LCALL PRoLCALL PR3POP COLUMN ;取列地址值MOV A,COLUMN ;读列地址寄存器CLR CSUBB A,#PD1 ;列地址-模块参数JC CCW_2 ;<0为左半屏显示区域(E1)MOV COLUMN,A ;≥0为右半屏显示区域(E2)MOV A,PAGE_SETB ACC.3 ;设置区域标志位。

第四讲: LCD(1602)介绍使用与实验

第四讲: LCD(1602)介绍使用与实验

第四讲 LCD(1602)介绍、使用与实验郧阳师专电工电子实验教学中心艾庆生我们接下来的课程实验里,基本都采用自己设计的单片机最小系统板(母版),通过搭接不同的模块,实现和满足我们的实验要求。

(故要求同学们最好每个人都自己焊接一块该母版)一、LED数码管的优缺点(与LCD液晶比较)二、LCD 1602显示器资料1602是液晶里较简单的一种,它只能显示固定的2行字符(每行16个字符)。

不能任意显示点阵图形。

1. 外形尺寸和形状如下图2. 主要技术参数3.16根引脚说明1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

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

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

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

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

第15脚:背光源正极第16脚:背光源负极4.1602的字符发生存储器(CGROM)1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”5.1602的11条控制指令它的读写操作、屏幕和光标的操作都是通过指令编程来实现的(说明:1为高电平、0为低电平)。

1602显示实验报告

1602显示实验报告

一、1602显示二、实验项目:1602显示三、实验地点:四、五、实验时间:2014年7月9日~2014年7月23日六、实验要求:1、在单片机最小系统中加入LCD1602显示屏。

2、能进行数字和字符的显示3、扩展功能一:将实验四中的“单片机时钟”改为1602显示。

4、用Protel99SE绘制实验原理图并完成实验报告。

七、实验具体内容:1、在单片机最小系统中加入LCD1602显示屏。

(1)实验电路图:(2)实验原理:1602显示屏采用标准的16引脚(有背光),其各个引脚接线及作用说明如下:(3)实验中遇到的问题:在电路接线工作完成以后,上电实验时LCD只有背光,无任何显示。

问题原因分析:在接线过程中,我最为关注的是RS、R/W、E三个端口的接线,忽视了D0~D7的接线顺序,从而使D7~D0的方向接反。

因此1602内部的11条指令码都会对应不上,例如清屏指令是0x01,而我则需要写成0x20。

所以按照正常程序指令,在初始化之后,屏幕会一直没有显示。

(4)实验小结:在完成电路图之后觉得本次的接线相对来说比较简单。

心想只要接好RS、R/W、E正负极不反接,就没什么问题。

结果却出乎我的意料,看是简单的D0~D7八个端口的顺序同样起着关键的作用。

因自己的忽视,使我在完成接线之后长时间找不到问题原因之所在。

这次的接线也很好的提醒了我,看似简单的工作,可千万不敢再掉意轻心。

2、能进行数字和字符的显示并将实验四中的“单片机时钟”改为1602显示。

(1) 实验原理:LCD6102的显示方式是先从DDRAM写入要显示地址,在往DDRAM写入要显示的字符码。

控制其操作的有11条LCD1602的内部指令,具体如下:指令1:清显示;指令2:光标复位,光标复位到地址00H;指令3:光标和显示模式设置;I/D:光标移动方向,高电平左移,低电平右移S:屏幕上所有文字是否左移或者右移(高电平有效,低电平无效)指令4:显示开关控制;D:控制整体显示开关,高电平表示开,低电平表示关C:控制光标的开关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标显示移位;S/C:高电平时移动显示文字,低电平时移动显示光标指令6:功能设置命令;DL:高电平时为四位总线,低电平时为八位总线N:低电平时为单行显示,高电平时为双行显示F:低电平时为5x7点阵字符,高电平时为5x10点阵字符指令7:字符发生器存储器地址:指令8:DDRAM地址设置指令9:读忙信号和光标地址BF为忙标志高电平表示忙,此时模块不能接收命令或者数据,低电平表示不忙指令10:写数据指令11:读数据时序控制:读状态:输入RS=0 R/W=1 E=1 输出:D0~D7=状态字写指令:输入RS=0 R/W=1 D0~D7=指令码E=高脉冲输出:无读数据:输入RS=1 R/W=1 E=1 输出:D0~D7=数据写数据:输入RS=1 R/W=0 D0~D7=数据E=高脉冲输出:无(2)程序流程图如下所示:(3)实验中遇到的问题按下4#键时钟显示减1,当显示为00后,继续减1,会出现ASCLL在0之后的码。

LCD1602液晶显示

LCD1602液晶显示

实验十一、LCD1602液晶显示一、实验目的1、熟悉Protuse仿真软件的使用;2、熟悉利用Keil软件编译程序的过程;3、了解LCD1602液晶显示器的工作原理及学会翻阅芯片的数据手册;4、掌握LCD1602液晶显示器的驱动流程和编程方法。

二、实验内容LCD1602液晶显示器的驱动流程:1、写操作(写指令(RS=0)和写数据(RS=1))1.1、写指令函数write_cmd(u8 cmd)1.2、写数据函数write_data(u8 dat)2、初始化液晶2.1、归位write_cmd(0x02);2.2、设置输入方式write_cmd(0x06);2.3、控制显示开关write_cmd(0x0c);2.4、功能设置write_cmd(0x38);2.5、清屏write_cmd(0x01);3、写显示的数据3.1、选择显示的行write_cmd(0x80);3.2、写显示的数据write_data(‘I’);Protuse 仿真环境的搭建:1、在Pick Devices中查找所需要的器件AT89C51、LM061L、RESPACK-8;同时搭建晶振电路和复位电路。

2、将其按照(图11.1)进行相连;3、将生成的.hex文件导入AT89C51芯片中进行仿真实验。

三、实验过程Keil软件程序:#include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned char u8; //对数据类型进行声明定义typedef unsigned int u16;#define DATA P0sbit rs = P2^1; //寄存器选择变量sbit rw = P1^5; //读写操作选择变量sbit en = P1^6; //工作使能变量void delay(u16 num) //延时函数{u16 x,y;for (x=num; x>0; x--)for(y=110; y>0; y--);}void write_cmd (u8 cmd) //写指令函数{rs = 0; //指令寄存器rw = 0; //写操作DATA = cmd;delay(5);en = 1;delay(5);en = 0;}void write_data (u8 dat) //写数据函数{rs = 1; //数据寄存器rw = 0; //写数据DATA = dat;delay(5);en = 1;delay(5);en = 0;}void lcd_init (void) //液晶初始化函数{write_cmd(0x02); //归位write_cmd(0x06); //输入方式,AC自动加1,画面不动write_cmd(0x0c); //显示开关开,光标开,闪烁关write_cmd(0x38); //功能设置,8位数据接口,两行显示,5*7点阵字符write_cmd(0x01); //清屏}int main (void){ u8 *string="I Love You";u8 n=0;u8 dp=0xc0; //第二行初位信息rw = 0;rs = 0;en = 0;lcd_init();write_cmd(0x80); //第一行初位信息write_data('I');write_data(' ');write_data('L');write_data('O');write_data('V');write_data('E');write_data(' ');write_data('D');write_data('P');write_data('J');write_cmd(dp); //第二行while(*string!='\0'){ write_cmd(dp);dp++;write_data(*string);string++;n++;}while(1);}Protuse 仿真:图11.1 LCD液晶显示实验四、实验现象在AT89C51芯片中下载程序后LCD液晶显示屏上显示”I lOVE DPJ”和”I Love You”两行字符。

1602液晶显示

1602液晶显示

第十三小组第二阶段总结报告1602液晶显示实现功能:日期、时间、闹钟、温度显示。

小组成员:吴兴魁刘蕾菱朱登攀2011年8月3日星期三第十三小组第二阶段总结报告小组成员:吴兴魁、刘蕾菱、朱登攀1602液晶显示电路实验报告一、实验目的:1、初步掌握51单片机的原理及应用。

2、学习基于单片机的C语言编程基本方法。

3、学会1602液晶的基本使用方法。

二、实验要求:实现1602液晶显示。

三、实验内容:基本部分:熟悉1602液晶显示器的工作原理,掌握其使用方法。

会显示简单的字符,以及字符的动画显示。

液晶每个小模块的字符显示。

掌握单片机的应用方法,提高编程能力。

发挥部分:1、了解DS1302时钟芯片的工作原理,与1602相结合,实现计时显示效果。

2、了解DS18B20温度传感器工作原理,与1602相结合,实现测温显示效果。

3、了解蜂鸣器的工作原理,实现时钟的定时功能。

整体实现1602的万年历的显示,要求有年、月、日时、分、秒、以及温度显示和时钟定时功能。

四、实验原理:此系统是基于STC89C52单片机设计的,包含液晶显示模块,DS1302实时时钟模块,DS18B20温度采集模块,时钟定时报警模块。

STC89C52作为控制核心,具有功耗低,功能强等特点,电压可选5V 电源供电。

显示模块采用1602液晶动态显示,相对数码管而言经济实用,占用空间小,对于显示数字、字母最为合适,而且与单片机连线简单,占用IO口相对较少。

实时时钟芯片DS1302提供RTC/日历、定时闹钟等功能。

温度检测模块采用数字式温度传感器DS18B20,该芯片具有精度高,测量范围广等优点,易与单片机连接,模块电路组成简单。

系统组成框图实验原理图各部分原理图及简介单片机部分:上面的大模块为单片机主芯片,其中40号管脚接VCC,20号管脚接GND。

在图片中没有显示出来!中间的两个模块都是直接与单片机相连接的,第一个为单片机的复位电路,第二个为单片机的晶振提供电路。

实验八 LCD1602液晶显示实验

实验八 LCD1602液晶显示实验

实验报告八实验名称:LCD1602液晶显示实验实验目的:1了解LCD显示的基本原理2了解LCD的接口与控制方法3掌握LCD显示图形的方法4掌握LCD显示字符的方法实验原理:1、LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。

因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。

,2、由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。

驱动模块具有八位数据总线,外加一些电源接口和控制信号。

而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。

由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。

硬件原理图:1602液晶显示模块可以和单片机AT89C51直接接口,电路如图下图所示:PROTEUS中仿真观察结果.图一程序如下所示:RS EQU p2.6RW EQU p2.5E EQU p2.7ORG 0000HMOV SP , #70HMOV p0, #01HCALL ENABLEMOV p0, #38HCALL ENABLEMOV p0, #0FHCALL ENABLEMOV p0, #06HCALL ENABLEMOV p0, #80HCALL ENABLEMOV DPTR, #TABLE1CALL WRITE1MOV p0, #0C0HCALL ENABLEMOV DPTR, #TABLE2CALL WRITE1MOV p0, #0C2HCALL ENABLEJMP $ENABLE: CLR RSCLR RWCLR ECALL DELAYSETB ERETWRITE1: MOV R1, #00HA1: MOV A, R1MOVC A, @A+DPTRCALL WRITE2INC R1CJNE A, #00H, A1RETWRITE2: MOV p0 , ASETB RSCLR RWCLR ECALL DELAYSETB ERETDELAY: MOV R4, #05D1: MOV R5, #0FFHDJNZ R5, $DJNZ R4, D1RETTABLE1: DB" XIA MEN GUANJIE ",00HTABLE2: DB"XIAN SHI QI TECHNOLOGY ",00H END程序流程图如下所示:实验现象:从左往右逐字显示,闪动两次,清屏,再从右往左显示,闪动两次,清屏,安周期性重复上述现象!。

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

实验九 LCM1602液晶显示实验一、实验目的1.掌握keil C51软件与protues软件联合仿真调试的方法;2.掌握LCM1602液晶模块显示西文的原理及使用方法;3.掌握用8位数据模式驱动LCM1602液晶的C语言编程方法;二、实验仪器与设备1、微机一台 2 keilC51集成开发环境 3 Protues仿真软件三、实验内容1.用protues设计一LCM1602液晶显示接口电路。

要求利用P0接LCM1602液晶的数据端,P2.0~P2.2做LCM1602液晶的控制信号输入端。

P3.0~P3.4口扩展4个功能键K1~K4,电路如下2.编写程序,实现字符的静态和动态显示,字符为第一行“姓名全拼”第二行“专业全拼+学号”。

液晶的初始化,字符显示程序可参考官网的程序文件。

3.编写程序,利用功能键实现字符的纵向滚动和横向滚动等效果显示,显示字符如下:1.姓名全拼2.专业全拼+学号3.MCS-51 EXP84.LCD DISPLAY 主程序静态显示“My Informatiom”5.实验源程序见附录。

6.实验电路图:四、实验说明液晶显示的原理:采用的LCDxianshiping都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背景层,背景层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元产生扭曲,从而经穿过其中的光线进行有规则的折射,然后经过第二层过滤在屏幕生显示出来。

1、LCM1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接第二脚:VDD接5V正电源。

第三脚:VL为液晶显示器对比度调整端,接正电源时的对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第四脚:RS为寄存器选择高电平时选择数据寄存器,低电平时选择指令寄存器。

第五脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以读写入数据。

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

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

第15脚:背光源正极。

第16脚:背光源负极。

2、1602液晶模块内部的控制器共有11条控制指令,如下页表:(1)延时15ms (2)写指令38H(不检测忙信号)(3)延时5ms (4)写指令38H(不检测忙信号)(5)延时5ms (6)写指令38H(不检测忙信号)以后每次写指令读/写数据操作均需要检测忙信号(7)写指令38H:显示模式设备(8)写指令08H:显示关闭(9)写指令01H:显示清屏(10)写指令06H:显示光标移动设置(11)写指令0CH:显示开关及移动光标设置五、实验步骤1.用protues设计1602液晶显示接口电路;2.在KeilC51中编写液晶显示控制程序;编译通过后,与protues联合调试;3.按动功能键,观察字符及效果是否正确显示。

六、实验总结1. 1602动态显示的原理即先写入要显示的字符,然后写入滚动的命令,从而实现不同的动态效果。

2. 实现垂直滚动显示时可以分批次先写入第1、2行,再写入2、3行,第3、4行,第4、1行,从而实现垂直滚动现实的效果。

也可以设置一个二维数组,用一个for()循环控制显示的字符实现垂直滚动显示。

3.对于实验中用到的四个按键前两个接P3.0和P3.1端口,如果按顺序检测按键是否按下,因为液晶显示也会占用一定的时间可能会导致按键漏检,解决此问题可用定时器定时检测的方式,但要注意防止一次按键重复检测的情况,可设置一个标志位,反映按键是否被检测完,等一侧按键完成后在接受下一次按键触发。

4.本次程序中用到较多的标志位,对于标志位的命名要明显易懂,避免混淆。

程序1 #include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P2^2; /*使能控制*/sbit lcdrs=P2^0; /*命令数据输入*/ sbit lcdrw=P2^1; /*命令数据输入*/ sbit busy=P0^7;sbit K1=P3^0;sbit K2=P3^1;bit flag1,flag2,flag3,flag4;uchar num,i;uchar code tab[]="My information!"; uchar code tab1[]="1.yixifeng";uchar code tab2[]="2.dianzi2010412337";uchar code tab3[]="3.MCS-51 EXP8"; uchar code tab4[]="4.LCD DISPLAY"; void LCD_check_busy(void){while(1){lcden=0;lcdrs=0;lcdrw=1;P0=0xff;lcden=1;if(busy==0) break;}lcden=0;}delay(int x){while(x--);}delay_ms(int x){int a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}void write_com(uchar com){ LCD_check_busy();lcdrs=0;lcden=0;lcdrw=0;P0=com;lcden=1;lcden=0;}void write_dat(uchar dat){LCD_check_busy();lcdrs=1; /*rs=1时写数据*/P0=dat;delay(10);lcdrw=0;lcden=1;lcden=0;}void lcd_init() /*初始化函数*/ {lcden=0; /*开启LCD显示*/write_com(0x38); delay(10);write_com(0x0f);write_com(0x06);}void write_str(uchar *str){while(*str!='\0'){while(flag3);if(flag4){ write_com(0x01);break; }write_dat(*str) ;str++;delay_ms(50);}}main(){uchar *ptr=tab;uchar*p=tab1,*q=tab2,*m=tab3,*n=tab4; TMOD=0x00;TH0=(65536-20000)/256;TL0=(65536-20000)%256;TR0=1; ET0=1; EX0=1;EX1=1; IT0=IT1=1; EA=1;PX1=1;lcd_init();while(1){write_com(01);write_com(0x80+0x00);for(i=0;i<15;i++){if(flag1|flag2) break;write_dat(tab[i]);delay_ms(100);}while(flag1==1){write_com(0x01);write_com(0x80+0x00);write_str(p);if(flag4){ flag4=0; break;}write_com(0xc0+0x00);write_str(q);if(flag4){ flag4=0; break;}delay_ms(800);write_com(0x01);write_com(0x80+0x00);write_str(q);if(flag4){ flag4=0; break;}write_com(0xc0+0x00);write_str(m);if(flag4){ flag4=0; break;}delay_ms(800);write_com(0x01);write_com(0x80+0x00);write_str(m);if(flag4) {flag4=0; break;}write_com(0xc0+0x00);write_str(n);if(flag4){ flag4=0; break;}delay_ms(800);write_com(0x01);write_com(0x80+0x00);write_str(n);if(flag4){ flag4=0; break;}write_com(0xc0+0x00);write_str(p);if(flag4){ flag4=0; break;}delay_ms(800);}while(flag2==1){write_com(0x01);write_com(0x80+0x00);write_str(p);if(flag4){ flag4=0; break;}write_com(0x80+0x15);write_str(q);if(flag4){ flag4=0; break;}write_com(0xc0+0x00);write_str(m);if(flag4){ flag4=0; break;}write_com(0xc0+0x15);write_str(n);if(flag4){ flag4=0; break;}while(flag2==1){write_com(0x1c);delay_ms(300);while(flag3);}}}}void key12() interrupt 1{TH0=(65536-20000)/256;TL0=(65536-20000)%256;if(K1==0)delay_ms(5);if(K1==0&&flag2==0){TR0=0;flag1=1;}if(K2==0)delay_ms(5);if(K2==0&&flag1==0){TR0=0;flag2=1;}}void key3() interrupt 0{EX1=0; delay_ms(5); EX1=1;if(flag1|flag2==1)flag3=~flag3;}void key4() interrupt 2{EX1=0; delay_ms(5); EX1=1;flag4=1;if(flag1==1|flag2==1){flag1=flag2=flag3=0;TR0=1;}}程序2#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" Yi Xifeng ";uchar code table1[]="dianzi 2010412337";sbit lcden=P2^2;sbit lcdrs=P2^0;sbit lcdrw=P2^1;uchar num; bit flag;void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }void write_com(uchar com){ lcdrs=0;//写命令lcdrw=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){ lcdrs=1;//写数据lcdrw=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){ lcden=0;write_com(0x38);//初始化write_com(0x0e);//光标打开write_com(0x07);write_com(0x01);write_com(0x80+0x1);}void main(){ init();while(1){for(num=0;num<17;num++){write_com(0x80+0x12+num);write_data(table[num]);write_com(0x80+0x52+num);write_data(table1[num]);delay(300);}write_com(1);}}程序3#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" Yi Xifeng "; uchar code table1[]="dianzi 2010412337";sbit lcden=P2^2;sbit lcdrs=P2^0; sbit lcdrw=P2^1; uchar num;bit flag;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;//写命令lcdrw=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){lcdrs=1;//写数据lcdrw=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){lcden=0;write_com(0x38);//初始化write_com(0x0e);//光标打开write_com(0x06);write_com(0x01);write_com(0x80+0x1);}void main(){init();EA=1;EX0=1;EX1=1;while(1){for(num=0;num<14;num++){write_data(table[num]);delay(100);}write_com(0x80+0x40);for(num=0;num<18;num++){write_data(table1[num]);delay(100);}while(flag){write_com(0x1c);delay(50);}write_com(1);}}void int1() interrupt 2{EX1=0;delay(5);EX1=1;flag=~flag;}。

相关文档
最新文档