标题: 液晶显示错误,请大神帮忙解析,感激 [打印本页]
作者: bai850107 时间: 2017-10-10 11:03
标题: 液晶显示错误,请大神帮忙解析,感激
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
uchar code table[]="I LOVE MCU!";
uchar code table1[]="WWW.XTLCU.COM";
sbit lcde=P2^7;
sbit lcdrs=P2^6;
sbit lcdwr=P2^5;
//sbit LSA=P2^2;
//sbit LSB=P2^3;
//sbit LSC=P2^4;
void delay(uint z);
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcdwr=0;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcdwr=1;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void init()
{
//LSA=0;
//LSB=0;
//LSC=0;
//P0=0x00;
lcde=0;
write_com(0x38);//设置16x2显示,5x7点阵,8位数据接口
write_com(0X0C);//开显示,显示光标,光标闪烁
write_com(0X06);//写一个字符后地址针加一,光标加一
write_com(0X01);//数据指针清零,所有显示清零
}
void main()
{
init();
write_com(0x80);//设置数据地址指针 液晶显示RAM 有 80个字节 00H~27H 40H~67H,第一行第一个字处
for(num=0;num<11;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);//第二行第一个字处
for(num=0;num<13;num++)
{
write_data(table1[num]);
delay(5);
}
while(1);
}
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
-
-
HC6800-ES V2.0 新版.pdf
759.71 KB, 下载次数: 4
开发板原理图
-
-
SMC1602A.PDF
255.88 KB, 下载次数: 4
液晶1602
作者: zl2168 时间: 2017-10-11 08:52
本帖最后由 zl2168 于 2017-10-11 09:03 编辑
实例67 LCD1602显示屏显示
若需改变1602显示内容,只须将需显示的内容用ASCII码写入显示数组,即可。
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: angmall 时间: 2017-10-11 11:44
这个肯定要看你用的LCD的数据手册了,不同的LCD采用的通信方式不同,但数据手册里肯定写得很明白。看嵌入式,单片机代码绝对不能像软件程序员那样,你到深入了解硬件结构。
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar num;
- uchar code table[]="I LOVE MCU!";
- uchar code table1[]="WWW.XTLCU.COM";
- sbit lcde=P2^7;
- sbit lcdrs=P2^6;
- sbit lcdwr=P2^5;
- //sbit LSA=P2^2;
- //sbit LSB=P2^3;
- //sbit LSC=P2^4;
- void delay(uint z);
- void write_com(uchar com)
- {
- lcdrs=0; //选择发送命令
- lcde=0; //使能
- lcdwr=0; //选择写入
- P0=com; //放入命令
- delay(5);
- //lcdwr=0;
- delay(5);
- lcde=1; //写入时序
- delay(5); //保持时间
- lcde=0;
- }
- void write_data(uchar date)
- {
- lcdrs=1; //选择输入数据
- lcde=0; //使能清零
- lcdwr=0; //选择写入
- P0=date; //写入数据
- delay(5);
- // lcdwr=1;
- delay(5);
- lcde=1; //写入时序
- delay(5); //保持时间
- lcde=0;
- }
- void init()
- {
- //LSA=0;
- //LSB=0;
- //LSC=0;
- //P0=0x00;
- lcde=0;
- write_com(0x38);//设置16x2显示,5x7点阵,8位数据接口
- write_com(0X0C);//开显示,显示光标,光标闪烁
- write_com(0X06);//写一个字符后地址针加一,光标加一
- write_com(0X01);//数据指针清零,所有显示清零
- }
- void main()
- {
- init();
- write_com(0x80);//设置数据地址指针 液晶显示RAM 有 80个字节 00H~27H 40H~67H,第一行第一个字处
- for(num=0;num<11;num++)
- {
- write_data(table[num]);
- delay(5);
- }
- write_com(0x80+0x40);//第二行第一个字处
- for(num=0;num<13;num++)
- {
- write_data(table1[num]);
- delay(5);
- }
- while(1);
- }
- void delay(uint z)
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
复制代码
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |