找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10805|回复: 55
收起左侧

1602液晶显示

  [复制链接]
ID:65547 发表于 2014-11-8 17:37 | 显示全部楼层 |阅读模式
请问各位大神,为啥将这个程序导入单片机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);
}


回复

使用道具 举报

ID:1 发表于 2014-11-8 20:33 | 显示全部楼层
有可能是你的程序 不匹配你的电路
回复

使用道具 举报

ID:68253 发表于 2014-11-8 21:24 | 显示全部楼层
检查看看硬件电路连接正确了没有
回复

使用道具 举报

ID:61876 发表于 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--); 就完全可以显示了。



评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:65547 发表于 2014-11-9 18:08 | 显示全部楼层
第一个就是个数组定义,以查表的形式表现,还需要什么代码?
回复

使用道具 举报

ID:65547 发表于 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 ...

第一个就是个数组定义,以查表的形式表现,还需要什么代码?
回复

使用道具 举报

ID:66137 发表于 2014-11-9 21:52 | 显示全部楼层
延时函数这里错了for(j=100;j>=0;j--);............,这里改了后还不显示的话看看屏幕是不是一直是白板,是这样的话再看看是不是屏幕对比度没有调好。
回复

使用道具 举报

ID:61876 发表于 2014-11-12 21:38 | 显示全部楼层
楼主的程序是显示两行的字符串,可是代码却只有一行的。

评分

参与人数 1黑币 +7 收起 理由
aabbcc + 7

查看全部评分

回复

使用道具 举报

ID:68846 发表于 2014-11-15 13:50 | 显示全部楼层
有些液晶是4线的有些是8线的,首先看看你的是4线还是8线
回复

使用道具 举报

ID:72751 发表于 2015-1-25 22:12 | 显示全部楼层
延时函数存在问题,但我感觉LCD1602时序上也有点问题的,EN高脉冲为产生的,仅是上升沿啊,在给予指令或数据之前应该将EN=0吧

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:73362 发表于 2015-2-6 22:39 | 显示全部楼层
延时里不能是i>=0吧,=0在减的话直接跳过了,再一个检查下引脚是否正确,和液晶显示对比度的问题,调一调滑阻

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83454 发表于 2015-6-19 18:00 | 显示全部楼层
其实我也不太懂,所以希望和大家共同进步

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:60805 发表于 2015-6-22 20:16 | 显示全部楼层
首先检查硬件接口对不对,如果没问题的话,再看软件的时序正不正常。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:61876 发表于 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!

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:80186 发表于 2015-6-24 21:47 | 显示全部楼层
看看端口对了吗

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83877 发表于 2015-6-25 11:05 | 显示全部楼层
一步一步调试

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:83999 发表于 2015-6-26 17:12 | 显示全部楼层
看看屏幕对比度                              

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:68804 发表于 2015-6-26 17:29 | 显示全部楼层
请问下你的屏幕自带字库不
如果没有带字库那就显示不了

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:69706 发表于 2015-6-26 21:46 | 显示全部楼层
如果程序没错,那你就检查检查你的电路是否连接好

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:84235 发表于 2015-6-29 13:33 | 显示全部楼层
应该没错 看看登陆问题

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:84250 发表于 2015-6-29 15:26 | 显示全部楼层
新手,想下载资料学习,可惜没黑B

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:85338 发表于 2015-7-11 14:05 | 显示全部楼层
电路和程序不匹配

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:85124 发表于 2015-7-11 17:12 | 显示全部楼层
附图

13.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:85124 发表于 2015-7-11 17:13 | 显示全部楼层

就是把“=“去掉

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:85424 发表于 2015-7-12 00:56 | 显示全部楼层
感觉应该是电路图的问题,因为我自己做的时候,程序是对的,就是仿真的时候,LCD亮了,但是不显示字符,后来换了连线方法,就可以了

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:85547 发表于 2015-7-13 17:49 | 显示全部楼层
你的电路连线估计和郭天祥的不一样,要重新定义端口

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:111582 发表于 2016-3-31 14:31 | 显示全部楼层
正在研究1602
回复

使用道具 举报

ID:111726 发表于 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); }
回复

使用道具 举报

ID:111726 发表于 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);字符串的显示函数按照从头至尾显示,就可以不用因为字符的数量而担心字符显示不全的问题
回复

使用道具 举报

ID:111877 发表于 2016-4-2 08:55 | 显示全部楼层
有可能是你的程序 不匹配你的电路
回复

使用道具 举报

ID:84495 发表于 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);
    }
}
}

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

使用道具 举报

ID:79544 发表于 2016-4-2 20:06 | 显示全部楼层
程序没问题,假如是1T单片机就把延时加长点,12T的程序没问题,查看你的硬件电路,单片机IO口和程序的匹配
回复

使用道具 举报

ID:112045 发表于 2016-4-3 13:59 | 显示全部楼层
网上下载例程对比一下
回复

使用道具 举报

ID:112070 发表于 2016-4-3 17:45 | 显示全部楼层
初始化时,write_com(0x38);这条再多些几次,因为有的液晶显示是4线或者8线
回复

使用道具 举报

ID:153199 发表于 2017-1-1 13:17 | 显示全部楼层
结合电路分析程序
回复

使用道具 举报

ID:195690 发表于 2017-5-2 20:44 | 显示全部楼层
少年偏爱Ta 发表于 2014-11-9 18:08
第一个就是个数组定义,以查表的形式表现,还需要什么代码?

程序是没什么问题,可以把硬件电路放上来看看哪里有问题,应该是硬件引脚接的有问题
回复

使用道具 举报

ID:195690 发表于 2017-5-2 20:45 | 显示全部楼层
程序代码买有问题,应该是硬件的引脚接的有问题,检查一下引脚的接线
回复

使用道具 举报

ID:195129 发表于 2017-5-2 20:57 | 显示全部楼层
单片机引脚和你定义的是否一致
回复

使用道具 举报

ID:195773 发表于 2017-5-2 21:13 | 显示全部楼层
程序和电路不搭配
回复

使用道具 举报

ID:137822 发表于 2017-5-3 13:42 | 显示全部楼层
在初始化子函数里加条EN=0看下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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