标题: 1602液晶显示 [打印本页]

作者: 少年偏爱Ta    时间: 2014-11-8 17:37
标题: 1602液晶显示
请问各位大神,为啥将这个程序导入单片机1602显示屏上不显示呢??
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LOVE MCU!";
uchar code table1[]="wo de ni!!!";
sbit RS = P2^4;   //定义端口
sbit RW = P2^5;
sbit EN = P2^6;
uchar num;
void delay(uint x) //延时1ms
  {
   uint i,j;
   for(i=x;i>=0;i--)
      for(j=100;j>=0;j--);
   }
void write_com(uchar com)//写入命令字操作
  {
    RS=0;
    RW=0;
    P0=com;
    delay(5);
    EN=1;
    delay(5);
    EN=0;
  }

void write_data(uchar date)//写入数据字操作
   {
    RS=1;
    RW=0;
    P0=date;
    delay(5);
    EN=1;
    delay(5);
    EN=0;
   }

void init()//1602显示屏初始化
{
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
  write_com(0x01);
}

void main()
{
init();
write_com(0x80);
for(num=0;num<11;num++)
   {
    write_data(table[num]);
    delay(10);
    }

write_com(0x80+0x40);
  for(num=0;num<11;num++)
    {  
      write_data(table1[num]);
      delay(10);
    }
   while(1);
}



作者: admin    时间: 2014-11-8 20:33
有可能是你的程序 不匹配你的电路
作者: wyy450y    时间: 2014-11-8 21:24
检查看看硬件电路连接正确了没有
作者: gaozhaohong    时间: 2014-11-9 15:39
我认为一、 程序缺少写"wo de ni!!!"的代码;二、for(i=x;i>=0;i--)for(j=100;j>=0;j--);这两句你可以改成for(i=x;i>0;i--)for(j=100;j>0;j--); 就完全可以显示了。




作者: 少年偏爱Ta    时间: 2014-11-9 18:08
第一个就是个数组定义,以查表的形式表现,还需要什么代码?
作者: 少年偏爱Ta    时间: 2014-11-9 18:08
gaozhaohong 发表于 2014-11-9 15:39
我认为一、 程序缺少写"wo de ni!!!"的代码;二、for(i=x;i>=0;i--)for(j=100;j>=0;j--);这两句你可以改成f ...

第一个就是个数组定义,以查表的形式表现,还需要什么代码?
作者: woaidpj    时间: 2014-11-9 21:52
延时函数这里错了for(j=100;j>=0;j--);............,这里改了后还不显示的话看看屏幕是不是一直是白板,是这样的话再看看是不是屏幕对比度没有调好。
作者: gaozhaohong    时间: 2014-11-12 21:38
楼主的程序是显示两行的字符串,可是代码却只有一行的。
作者: tpc    时间: 2014-11-15 13:50
有些液晶是4线的有些是8线的,首先看看你的是4线还是8线
作者: wind02072107    时间: 2015-1-25 22:12
延时函数存在问题,但我感觉LCD1602时序上也有点问题的,EN高脉冲为产生的,仅是上升沿啊,在给予指令或数据之前应该将EN=0吧
作者: Devil    时间: 2015-2-6 22:39
延时里不能是i>=0吧,=0在减的话直接跳过了,再一个检查下引脚是否正确,和液晶显示对比度的问题,调一调滑阻

作者: Mr_寒先生    时间: 2015-6-19 18:00
其实我也不太懂,所以希望和大家共同进步
作者: 张文Joe    时间: 2015-6-22 20:16
首先检查硬件接口对不对,如果没问题的话,再看软件的时序正不正常。
作者: gaozhaohong    时间: 2015-6-23 20:56
修改:for(i=x;i>=0;i--)
      for(j=100;j>=0;j--);
为:for(i=x;i>0;i--)
      for(j=100;j>0;j--);
OK!
作者: 月光1234    时间: 2015-6-24 21:47
看看端口对了吗
作者: 电子白菜    时间: 2015-6-25 11:05
一步一步调试
作者: gulang    时间: 2015-6-26 17:12
看看屏幕对比度                              
作者: zouli415    时间: 2015-6-26 17:29
请问下你的屏幕自带字库不
如果没有带字库那就显示不了
作者: 风缘    时间: 2015-6-26 21:46
如果程序没错,那你就检查检查你的电路是否连接好
作者: 1987584265    时间: 2015-6-29 13:33
应该没错 看看登陆问题
作者: mikeahu    时间: 2015-6-29 15:26
新手,想下载资料学习,可惜没黑B
作者: 爱就像宫保鸡丁    时间: 2015-7-11 14:05
电路和程序不匹配
作者: 可爱的梦扬    时间: 2015-7-11 17:12
附图

13.png (200.03 KB, 下载次数: 149)

13.png

作者: 可爱的梦扬    时间: 2015-7-11 17:13
可爱的梦扬 发表于 2015-7-11 17:12
附图

就是把“=“去掉

作者: weiliang    时间: 2015-7-12 00:56
感觉应该是电路图的问题,因为我自己做的时候,程序是对的,就是仿真的时候,LCD亮了,但是不显示字符,后来换了连线方法,就可以了
作者: zhanghanli007    时间: 2015-7-13 17:49
你的电路连线估计和郭天祥的不一样,要重新定义端口
作者: lp51hei    时间: 2016-3-31 14:31
正在研究1602
作者: yaozhuanju    时间: 2016-4-1 11:43
#include<reg52.h>  #define uchar unsigned char #define uint unsigned int  uchar code table[]="I LOVE MCU!"; uchar code table1[]="wo de ni!!!";  sbit RS = P2^4;   //定义端口  sbit RW = P2^5; sbit EN = P2^6;  void delay1ms(unsigned int ms)//延时1ms {         unsigned int i,j;         for(i=0;i<ms;i++)         for(j=0;j<100;j++); }  void wr_com(unsigned char com)//写指令// {          delay1ms(1);         RS=0;         RW=0;         EN=0;         P0=com;         delay1ms(1);         EN=1;         delay1ms(1);         EN=0; }  void wr_dat(unsigned char dat)//写数据// {          delay1ms(1);;         RS=1;         RW=0;         EN=0;         P0=dat;         delay1ms(1);         EN=1;         delay1ms(1);         EN=0; }  void lcd_init()//初始化设置// {                                 wr_com(0x38);delay1ms(5);         wr_com(0x38);delay1ms(5);         wr_com(0x08);delay1ms(5);         wr_com(0x01);delay1ms(5);         wr_com(0x06);delay1ms(5);         wr_com(0x0c);delay1ms(5); }   void display(unsigned char *p)//显示字符串// {         while(*p!='\0')         {                 wr_dat(*p);                 p++;                 delay1ms(5);         } }  void main() {          lcd_init();         wr_com(0x80);         display(table);         wr_com(0x80+0x40);         display(table1); }
作者: yaozhuanju    时间: 2016-4-1 11:49
yaozhuanju 发表于 2016-4-1 11:43
#include  #define uchar unsigned char #define uint unsigned int  uchar code table[]="I LOVE MCU!"; u ...

显示两行字符串,在初始化时写入两次write_com(0x38);字符串的显示函数按照从头至尾显示,就可以不用因为字符的数量而担心字符显示不全的问题

作者: yunlongzhichu    时间: 2016-4-2 08:55
有可能是你的程序 不匹配你的电路
作者: absflash    时间: 2016-4-2 10:42
本帖最后由 absflash 于 2016-4-2 10:45 编辑

void init() (void)
{
   LCD_Write_Com(0x38);    /*显示模式设置*/
   DelayMs(5);
   LCD_Write_Com(0x38);
   DelayMs(5);
   LCD_Write_Com(0x38);
   DelayMs(5);
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*显示关闭*/
   LCD_Write_Com(0x01);    /*显示清屏*/
   LCD_Write_Com(0x06);    /*显示光标移动设置*/
   DelayMs(5);
   LCD_Write_Com(0x0C);    /*显示开及光标设置*/
   }
   
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main(void)
{
init();
while (1)
{
write_com(0x80);
for(num=0;num<11;num++)
   {
    write_data(table[num]);
    delay(10);
    }

write_com(0x80+0x40);
  for(num=0;num<11;num++)
    {  
      write_data(table1[num]);
      delay(10);
    }
}
}

先改成这个试试,最好加上清屏那个函数哦 ,慢慢调,就快成功了

作者: 腾飞的龙    时间: 2016-4-2 20:06
程序没问题,假如是1T单片机就把延时加长点,12T的程序没问题,查看你的硬件电路,单片机IO口和程序的匹配
作者: 18883865341    时间: 2016-4-3 13:59
网上下载例程对比一下
作者: 萧萧夜下剑    时间: 2016-4-3 17:45
初始化时,write_com(0x38);这条再多些几次,因为有的液晶显示是4线或者8线
作者: liuzhaoxin1020    时间: 2017-1-1 13:17
结合电路分析程序
作者: 学习电子知识    时间: 2017-5-2 20:44
少年偏爱Ta 发表于 2014-11-9 18:08
第一个就是个数组定义,以查表的形式表现,还需要什么代码?

程序是没什么问题,可以把硬件电路放上来看看哪里有问题,应该是硬件引脚接的有问题
作者: 学习电子知识    时间: 2017-5-2 20:45
程序代码买有问题,应该是硬件的引脚接的有问题,检查一下引脚的接线
作者: liyue123liye    时间: 2017-5-2 20:57
单片机引脚和你定义的是否一致
作者: dwjxy    时间: 2017-5-2 21:13
程序和电路不搭配
作者: 51zgz    时间: 2017-5-3 13:42
在初始化子函数里加条EN=0看下
作者: 斗鱼666    时间: 2017-5-3 14:13
好像是不匹配
作者: tylerzfp    时间: 2017-5-3 15:00
其实我也不太懂,所以希望和大家共同进步
作者: tylerzfp    时间: 2017-5-3 15:01
其实我也不太懂,所以希望和大家共同进步,不能伸手要
作者: gusuo    时间: 2017-5-3 15:08
学习了
作者: gusuo    时间: 2017-5-3 15:08
我也不会,怎么办啊
作者: rellik    时间: 2017-5-3 15:24
不错,非常好,但是看不懂
作者: a计划    时间: 2017-5-3 15:40
看看端口连接对不
作者: a计划    时间: 2017-5-3 15:50
端口对不
作者: zxcvvbnh    时间: 2017-5-3 16:44
检查是否与硬件匹配
作者: 123459876    时间: 2017-5-4 12:55
注意硬件和程序IO口对应起来
作者: 18741270696    时间: 2017-5-4 17:41
看看你的RS RW EN 的定义端口错没错,你的程序在我这边是好用的
作者: 凯旋小飞    时间: 2017-5-26 10:19
你的端口定义错了吧,再看看三个端口
作者: ffdd    时间: 2017-12-2 14:33
焊接几个led灯,然后廷时几秒看一下不就知道了
作者: 梦想天空    时间: 2017-12-3 19:27
在AD口加个可调电阻




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1