找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1913|回复: 2
打印 上一主题 下一主题
收起左侧

液晶显示错误,请大神帮忙解析,感激

[复制链接]
跳转到指定楼层
楼主
#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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:111634 发表于 2017-10-11 08:52 | 只看该作者
本帖最后由 zl2168 于 2017-10-11 09:03 编辑

实例67  LCD1602显示屏显示
若需改变1602显示内容,只须将需显示的内容用ASCII码写入显示数组,即可。
Proteus仿真一下,确认有效。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 4)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

板凳
ID:155507 发表于 2017-10-11 11:44 | 只看该作者
这个肯定要看你用的LCD的数据手册了,不同的LCD采用的通信方式不同,但数据手册里肯定写得很明白。看嵌入式,单片机代码绝对不能像软件程序员那样,你到深入了解硬件结构。


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar num;

  5. uchar code table[]="I LOVE MCU!";
  6. uchar code table1[]="WWW.XTLCU.COM";

  7. sbit lcde=P2^7;
  8. sbit lcdrs=P2^6;
  9. sbit lcdwr=P2^5;

  10. //sbit LSA=P2^2;
  11. //sbit LSB=P2^3;
  12. //sbit LSC=P2^4;

  13. void delay(uint z);

  14. void write_com(uchar com)
  15. {
  16.         lcdrs=0;    //选择发送命令
  17.         lcde=0;     //使能
  18.         lcdwr=0;          //选择写入
  19.         P0=com;    //放入命令
  20.         delay(5);
  21.         //lcdwr=0;
  22.         delay(5);
  23.         lcde=1;      //写入时序
  24.         delay(5);   //保持时间
  25.         lcde=0;

  26. }

  27. void write_data(uchar date)
  28. {
  29.         lcdrs=1;        //选择输入数据
  30.         lcde=0;         //使能清零
  31.         lcdwr=0;        //选择写入
  32.         P0=date;  //写入数据
  33.         delay(5);
  34. //        lcdwr=1;
  35.         delay(5);
  36.         lcde=1;   //写入时序
  37.         delay(5); //保持时间
  38.         lcde=0;

  39. }

  40. void init()
  41. {
  42.         //LSA=0;
  43.         //LSB=0;
  44.         //LSC=0;
  45.         //P0=0x00;
  46.         lcde=0;

  47.         write_com(0x38);//设置16x2显示,5x7点阵,8位数据接口
  48.         write_com(0X0C);//开显示,显示光标,光标闪烁
  49.         write_com(0X06);//写一个字符后地址针加一,光标加一
  50.         write_com(0X01);//数据指针清零,所有显示清零

  51. }

  52. void main()
  53. {
  54.         init();
  55.         write_com(0x80);//设置数据地址指针 液晶显示RAM 有 80个字节 00H~27H 40H~67H,第一行第一个字处
  56.         for(num=0;num<11;num++)
  57.         {
  58.                 write_data(table[num]);
  59.                 delay(5);
  60.         }
  61.         write_com(0x80+0x40);//第二行第一个字处
  62.         for(num=0;num<13;num++)
  63.         {
  64.                 write_data(table1[num]);
  65.                 delay(5);
  66.         }
  67.         while(1);

  68. }

  69. void delay(uint z)
  70. {
  71.         uint i,j;
  72.         for(i=z;i>0;i--)
  73.         for(j=110;j>0;j--);

  74. }
复制代码

评分

参与人数 1黑币 +10 收起 理由
bai850107 + 10 看懂了,非常感谢

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表