实验八1602液晶
- 格式:doc
- 大小:65.50 KB
- 文档页数:5
实验九 LCM1602液晶显示实验一、实验目的1.掌握keil C51软件与protues软件联合仿真调试的方法;2.掌握LCM1602液晶模块显示西文的原理及使用方法;3.掌握用8位数据模式驱动LCM1602液晶的C语言编程方法;二、实验内容1.用protues设计一LCM1602液晶显示接口电路。
要求利用P0接LCM1602液晶的数据端,P2.0~P2.2做LCM1602液晶的控制信号输入端。
P3.0~P3.4口扩展4个功能键K1~K4,电路如下2.编写程序,实现字符的静态和动态显示,字符为第一行“姓名全拼”第二行“专业全拼+学号”。
液晶的初始化,字符显示程序可参考官网的程序文件。
3.编写程序,利用功能键实现字符的纵向滚动和横向滚动等效果显示,主程序静态显示“My Informatiom”,显示字符如下:1.姓名全拼2.专业全拼+学号3.MCS-51 EXP84.LCD DISPLAY ”三.实验步骤1.用Protues设计1602液晶显示接口电路;2.在Keil51中编写液晶显示控制程序,编译通过后,与Protues联合调试;3.按功能键,观察字符及效果是否正确显示;四.实验电路2五.实验程序1静态#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="1.wanglin"; uchar code table1[]="2.tongxin 517"; sbit lcden=P2^2;sbit lcdrs=P2^0;uchar num;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;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) { lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){ lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+0x1);}void main(){ init();while(1){write_com(0x80);for(num=0;num<10;num++){write_data(table[num]);delay(300);}write_com(2);write_com(0x80+0x40);for(num=0;num<13;num++){write_data(table1[num]);delay(300);}}}1动态#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="1.wanglin"; uchar code table1[]="2.tongxin 517"; sbit lcden=P2^2;sbit lcdrs=P2^0;uchar num;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;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){ lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){ lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+0x1);}void main(){ init();while(1){write_com(0x80);for(num=0;num<10;num++){write_data(table[num]);delay(300);}write_com(2);write_com(0x80+0x40);for(num=0;num<13;num++){write_data(table1[num]);delay(300);}write_com(1);}}2#include<reg51.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.wanglin";uchar code tab2[]="2.tongxin 517"; uchar code tab3[]="3.MCS-51 EXP8"; uchar code tab4[]="4.LCD DISPLAY";void LCD_check_busy() {while(1){lcden=0;lcdrs=0;lcdrw=1;P0=0xff;lcden=1;if(busy==0) break;}lcden=0;}void delay(uint x){while(x--);}void delay_ms(uint 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;P0=dat;delay(5); lcdrw=0;lcden=1;lcden=0;}void lcd_init(){lcden=0;write_com(0x38);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);}}void 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;}}六、实验总结1. 1602动态显示的原理即先写入要显示的字符,然后写入滚动的命令,从而实现不同的动态效果。
1602详细资料和实例1602字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的。
而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。
在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。
所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602液晶的正面(绿色背光,黑色字体)1602液晶背面(绿色背光,黑色字体)另一种1602液晶模块,显示屏是蓝色背光白色字体字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码(指A的字模代码,0x20~0x7F为标准的ASCII码,通过这个代码,在CGROM中查找到相应的字符显示)就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:DDRAM地址与显示位置的对应关系。
(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。
这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。
1602液晶课程设计一、教学目标本课程旨在让学生了解和掌握1602液晶的基本原理、操作方法和应用技巧。
通过本课程的学习,学生应能理解1602液晶的结构和功能,熟练使用1602液晶进行显示操作,并能够运用1602液晶解决实际问题。
•掌握1602液晶的基本原理和结构。
•了解1602液晶的显示原理和操作方法。
•掌握1602液晶在实际应用中的基本技巧。
•能够正确连接1602液晶显示屏和控制器。
•能够使用1602液晶进行基本的数据显示和操作。
•能够设计和实现使用1602液晶的简单应用系统。
情感态度价值观目标:•培养学生的实验操作能力和问题解决能力。
•培养学生的创新意识和实践能力。
•培养学生的团队合作意识和交流沟通能力。
二、教学内容本课程的教学内容主要包括1602液晶的基本原理、操作方法和应用实例。
具体的教学大纲如下:1.1602液晶的基本原理:介绍1602液晶的结构和功能,解释1602液晶的工作原理。
2.1602液晶的操作方法:讲解1602液晶的显示原理和操作方法,包括字符显示、数据传输等。
3.1602液晶的应用实例:介绍1602液晶在实际应用中的基本技巧,如显示数字、字符串、图像等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式。
具体方法如下:1.讲授法:通过讲解1602液晶的基本原理和操作方法,使学生掌握相关知识。
2.实验法:通过实际操作1602液晶显示屏,让学生亲手实践,加深对液晶显示原理的理解。
3.案例分析法:通过分析实际应用实例,使学生了解1602液晶在实际中的应用和价值。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用合适的教材,为学生提供系统的学习材料。
2.实验设备:准备1602液晶显示屏和控制器,供学生进行实验操作。
3.多媒体资料:提供相关的视频、图片等多媒体资料,帮助学生更直观地理解1602液晶的原理和操作。
1602液晶课程设计一、课程目标知识目标:1. 学生能理解液晶的基本概念,掌握1602液晶模块的工作原理和接口技术。
2. 学生能够运用所学知识,分析1602液晶模块的电路连接,并进行正确的操作。
3. 学生能够了解液晶显示技术在生活中的应用,认识到科技与生活的紧密联系。
技能目标:1. 学生能够独立完成1602液晶模块的连接与编程,实现基本的信息显示。
2. 学生通过实践操作,提高动手能力,培养解决实际问题的能力。
3. 学生能够运用1602液晶模块进行简单的项目设计,提高创新意识和团队合作能力。
情感态度价值观目标:1. 学生对液晶显示技术产生兴趣,培养探究精神和科学态度。
2. 学生在学习和实践中,认识到团队合作的重要性,树立合作共赢的观念。
3. 学生通过了解液晶显示技术的应用,激发对电子科技的热情,提高社会责任感和使命感。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握液晶显示技术的基础上,提高实践操作能力和创新意识,培养科学精神与团队协作能力,使学生在学习过程中充分体会到科技的魅力,激发学习兴趣。
通过课程学习,将目标分解为具体的学习成果,便于后续的教学设计和评估。
二、教学内容1. 液晶基本概念:液晶的特性、分类及工作原理。
2. 1602液晶模块:模块结构、引脚功能、操作指令。
3. 电路连接与编程:1602液晶模块与微控制器的连接方法,编程实现信息显示。
4. 实践操作:学生分组进行1602液晶模块的连接、编程和调试。
5. 项目设计:运用1602液晶模块设计简单的应用项目,如温度显示、时间显示等。
教学大纲安排:第一课时:液晶基本概念,介绍液晶的特性、分类及工作原理。
第二课时:1602液晶模块,详细讲解模块结构、引脚功能、操作指令。
第三课时:电路连接与编程,分析1602液晶模块与微控制器的连接方法,编写程序实现信息显示。
第四课时:实践操作,学生分组进行1602液晶模块的连接、编程和调试。
第五课时:项目设计,学生团队合作,运用1602液晶模块设计并实现简单应用项目。
实验八 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液晶显示模块。
实验报告实验名称: [1602液晶显示]姓名: []学号: [2]指导教师: [解]实验时间: [2014年4月1日]信息与通信工程学院1602液晶实验1实验要求任务1:使液晶显示姓名、学号。
任务2: 实现在LCD1602液晶屏第一行左侧第一位的位置循环显示0~9,并且可以用一个拨码开关BM8实现显示的复位功能。
2实验原理2.1 TLC5620基本原理1>.液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA 移动通信工具等众多领域。
②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由 M×N 个显示单元组成,假设 LCD 显示屏有 64 行,每行有128列,每 8 列对应 1 字节的 8 位,即每行由 16 字节,共 16×8=128 个点组成,屏上 64×16 个显示单元与显示 RAM 区 1024 字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由 RAM 区的 000H——00FH 的 16字节的内容决定,当(000H)=FFH 时,则屏幕的左上角显示一条短亮线,长度为 8 个点;当(3FFH)=FFH 时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H 时,则在屏幕的顶部显示一条由 8 段亮线和 8 条暗线组成的虚线。
#include<reg52.h>//#include <I2C.H>#include <intrins.h>#define CHECK_BUSY#define PCF8591 0x90 //PCF8591 地址#define uchar unsigned char#define uint unsigned int#define NOP() _nop_() /* 定义空指令*/#define _Nop() _nop_() /*定义空指令*/#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// 此表为LED 的字模// 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20)unsigned char code Disp_Tab[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x 8c,0xc1, 0xff, 0xf7 };unsigned char TABLEW[8] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char AD_CHANNEL;unsigned char LedOut[8];unsigned int D[32];//这三个引脚参考资料sbit E=P2^7; //1602使能引脚sbit RW=P2^6; //1602读写引脚sbit RS=P2^5; //1602数据/命令选择引脚sbit SDA=P3^6; //I2C 数据sbit SCL=P3^7; //I2C 时钟bit ack; /*应答标志位*/sbit KEY1 = P3^2;sbit KEY2 = P3^3;sbit KEY3 = P3^4;sbit KEY4 = P3^5;/********************************************************************* 名称: delay()* 功能: 延时,延时时间大概为5US。
电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:单片机原理与接口技术实验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、在上一题的基础上,增加两个外部中断,实现不同内容的显示。
1602液晶资料编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(1602液晶资料)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为1602液晶资料的全部内容。
1602字符液晶简介工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)注:为了表示的方便,后文皆以1表示高电平,0表示低电平。
管脚功能引脚说明1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:引脚符号功能说明注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0。
busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求.字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A"的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A"。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如’A’。
以下是1602的16进制ASCII码表:(图片打开是大图)读的时候,先读上面那列,再读左边那行,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
显示地址1602通过D0~D7的8位数据端传输数据和指令.显示模式设置: (初始化)0011 1000 [0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:(初始化)0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),N=0(读或写一个字符后地址指针减1 &光标减1),S=1 且 N=1 (当写一个字符后,整屏显示左移)s=0 当写一个字符后,整屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0—27H,40—67H)其他设置:01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
实验八LCM1602液晶显示实验姓名:专业:通信工程学号:2011412422 成绩:一、实验目的1.掌握KeilC51 软件与Protues软件联合仿真调试方法;2.掌握LCM1602液晶模块显示西文读原理及使用方法;3.掌握用8位数据模式驱动LCM1602液晶的C语言编程方法;4.掌握LCM1602液晶模块显示数字的C语言编程方法。
二、实验内容1.用Proteus设计一LCM1602液晶显示接口电路。
要求利用P0口接LCM1602液晶的数据端,P2.0~P2.2做LCM1602液晶的控制信号输入端。
P3.0~P3.3口扩展4个功能键K1~K4。
2.编写程序,实现字符的静态和动态显示。
字符第一行为“1.姓名全拼”,第二行为“专业全拼+学号”。
液晶的初始化、字符显示程序可参考网上的程序文件。
3.编写程序,利用功能键实现字符的纵向滚动和横向滚动等效果显示。
主程序动态显示“My information!”,滚动效果显示四行字符:1:姓名全拼 2.专业全拼+学号 3.MCS-51 EXP8 4.LCD三、实验仪器与设备1.微机一台2.keil c51 集成开发环境3.proteus 仿真软件五、实验程序一、静态显示#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="Dai Haiyang";uchar code table1[]="tongxin2011412422";sbit lcden=P2^2;sbit lcdrw=P2^1;sbit lcdrs=P2^0;uchar num;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; P0=com; delay(5);lcden=1; delay(5); lcden=0; }void write_data(uchar date){ lcdrs=1; P0=date; delay(5);lcden=1;delay(5); lcden=0; }void init(){ lcden=0; lcdrw=0;write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80+0x1); }void main(){ init(); delay(100);while(1){ for(num=0;table[num]!='\0';num++){ write_data(table[num]);delay(200); }write_com(2);write_com(0x80+0x40);for(num=0;table1[num]!='\0';num++){ write_data(table1[num]);delay(200);}while(1);}}二、动态显示#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" Dai Haiyang ";uchar code table1[]="tongxin2011412422";sbit lcden=P2^2;sbit lcdrw=P2^1;sbit lcdrs=P2^0;uchar num;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; P0=com; delay(5);lcden=1; delay(5); lcden=0; }void write_data(uchar date){ lcdrs=1; P0=date; delay(5);lcden=1; delay(5); lcden=0; }void init(){ lcden=0; lcdrw=0;write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80+0x1); }void main(){ init(); delay(100);while(1){ for(num=0;table[num]!='\0';num++){ write_data(table[num]); delay(200);}write_com(2); write_com(0x80+0x40);for(num=0;table1[num]!='\0';num++){ write_data(table1[num]); delay(200); }write_com(1);}}三、滚动显示#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table0[]="My information!";uchar code table1[]="1.daihaiyang2.tongxin2011412422"; uchar code table2[]="3.MCS-51 4.LCD DISPLAY "; sbit lcden=P2^2;sbit lcdrw=P2^1;sbit lcdrs=P2^0;sbit k3=P3^2;uchar num,flag=0;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; P0=com; delay(5);lcden=1; delay(5); lcden=0; }void write_data(uchar date){ lcdrs=1; P0=date; delay(5);lcden=1; delay(5); lcden=0; }void init(){ lcden=0; lcdrw=0;write_com(0x38);write_com(0x0c); write_com(0x06);write_com(0x01); write_com(0x80+0x1); }void main(){ init();TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1; ET0=1; TR0=1;EX0=1;EX1=1;while(1){ write_com(0x80);for(num=0;num<16;num++){ write_com(0x80+0x16+num);write_data(table0[num]); }write_com(0x1c); }}void time0() interrupt 1{ P3=0xff;if(P3!=0xff){delay(20);if(P3!=0xff&&flag==1){ flag=0;switch(P3){ case 0xfd: { write_com(1);write_com(0x80);for(num=0;table1[num]!='\0';num++){ write_data(table1[num]);}write_com(0x80+0x40);for(num=0;table1[num]!='\0';num++){ write_data(table2[num])}for(num=0;num<40;num++){ write_com(0x1c);} } delay(200); break ; } }} else flag=1; }void INT_0() interrupt 0 { EX0=0; delay(10); if(k3)while(k3);else EX0=1; }void INT_1() interrupt 2{ write_com(1); write_com(0x80); for(num=0;table0[num]!='\0';num++) { write_data(table0[num]); } write_com(0x18); delay(100); }XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC11nFC21nFC3220uR1300234567891RP1RESPACK-8D 714D 613D 512D 411D 310D 29D 18D 07E 6R W 5R S 4V S S1V D D 2V E E3LCD1LM016LRV1100。