找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助大佬!我的LCD1602显示屏一直没有显示!

  [复制链接]
跳转到指定楼层
楼主
我也不知道是哪的问题!求各位大佬帮我找找问题!!!


这是我接电源和地的地方!


显示屏一直就这样!

我显示屏上的vo没接,do到d7依次接的P20--P27!


这是我写的单片机代码!
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit E=P0^5;                //1602使能引脚
sbit RW=P0^6;                //1602读写引脚        
sbit RS=P0^7;                //1602数据/命令选择引脚

void delay()   //延时1ms
{
uint i,j;
   i=2;
   j=239;
   do
    {
          while(--j);
        }while(--i);
}

void writecmd(uchar cmd)  
{
E=0;      
RS=0;
RW=0;
P2=cmd;   
E=1;  
delay();
E=0;
delay();
}
void writedata(uchar dat)
{  
  E=0;     
  RS=1;
  RW=0;
  P2=dat;
  E=1;  
  delay();
  E=0;
  delay();
}
void init(void)              
{  
delay();
writecmd(0x38);
delay();
writecmd(0x38);
writecmd(0x08);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
}
void main ()
{
init();
writecmd(0x82);
writedata(0x41);
}                        


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

使用道具 举报

沙发
ID:97554 发表于 2020-11-23 09:17 | 只看该作者
V0找个200欧电阻接地
回复

使用道具 举报

板凳
ID:97554 发表于 2020-11-23 09:18 | 只看该作者
或者按照电路原理图给的,接一可调电阻,调节直至显示清晰
回复

使用道具 举报

地板
ID:315554 发表于 2020-11-23 10:25 | 只看该作者
我是V0和Vss之间搭一个5.1K电阻,
回复

使用道具 举报

5#
ID:847479 发表于 2020-11-23 17:52 | 只看该作者
杨雪飞 发表于 2020-11-23 09:18
或者按照电路原理图给的,接一可调电阻,调节直至显示清晰

这是5k的
C:\Users\lenovo\Desktop
这是1K的!
还是没有显示!!!
回复

使用道具 举报

6#
ID:847479 发表于 2020-11-23 17:55 | 只看该作者
杨雪飞 发表于 2020-11-23 09:18
或者按照电路原理图给的,接一可调电阻,调节直至显示清晰

还是没有显示呢!
回复

使用道具 举报

7#
ID:213173 发表于 2020-11-23 21:03 | 只看该作者
本帖最后由 wulin 于 2020-11-24 05:56 编辑

硬件:P0.5~P0.7要加10K上拉电阻!
软件:
void delay()                //1ms@12.000MHz
{
        unsigned char i, j;//数据类型不同延时相差很大!!!
        i = 2;
        j = 239;
        do
        {
                while (--j);
        } while (--i);
}

void main()
{
        init();
        writecmd(0x82);
        writedata(0x41);
        while(1);//此句不可以少!!!
}
回复

使用道具 举报

8#
ID:840362 发表于 2020-11-23 21:28 | 只看该作者
看一下电路接对了吗
回复

使用道具 举报

9#
ID:846569 发表于 2020-11-23 21:44 | 只看该作者
这是我的代码:你更改 LCD_Data和三个LCD的脚就可以直接用了

用法是在main()里面先初始化LCD_Init();再直接调用LcdShowStr(4,0);屏幕上显示的是LED_NUM[3]里的三个数据
附上原理图

#define LCD_Data P0

sbit LCD_E=P2^7;
sbit LCD_RW=P2^5;
sbit LCD_RS=P2^6;

unsigned char LED_NUM[3];

void LCD_ReadStatus(void)
{

3.png (63.13 KB, 下载次数: 38)

3.png

评分

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

查看全部评分

回复

使用道具 举报

10#
ID:847479 发表于 2020-11-24 11:19 | 只看该作者
wulin 发表于 2020-11-23 21:03
硬件:P0.5~P0.7要加10K上拉电阻!
软件:
void delay()                //1ms@12.000MHz

我没有接那个10k电阻,但是其他的我改了一下,显示出来了!感谢大佬!谢谢!
回复

使用道具 举报

11#
ID:847479 发表于 2020-11-24 11:20 | 只看该作者
感谢大家!谢谢各位大佬!问题解决了!
回复

使用道具 举报

12#
ID:845694 发表于 2020-11-24 14:34 来自手机 | 只看该作者
HSY666NB 发表于 2020-11-23 21:44
这是我的代码:你更改 LCD_Data和三个LCD的脚就可以直接用了

用法是在main()里面先初始化LCD_Init();再 ...

3脚接个2K电阻
回复

使用道具 举报

13#
ID:848390 发表于 2020-11-24 14:49 来自手机 | 只看该作者
检查v0口是否接了电阻,如果接了,看接的电阻是否合适
回复

使用道具 举报

14#
ID:924233 发表于 2021-7-6 09:45 | 只看该作者
怎么能够显示出来的,能不能教一下
回复

使用道具 举报

15#
ID:161164 发表于 2021-7-6 11:02 | 只看该作者
kriswang 发表于 2021-7-6 09:45
怎么能够显示出来的,能不能教一下

如7楼所说的,delay里的数据类型不能改
先看楼主的代码


  1. void delay()   //延时1ms
  2. {
  3. unit i,j;
  4.    i=2;
  5.    j=239;
  6.    do
  7.     {
  8.           while(--j);
  9.         }while(--i);
  10. }
复制代码

看看代码是在干什么
j = 239 -> while(--j)
先把j减一,再看看是否不等于零(不等于零为真,等于零为假)
当减了239下,while(--j)会跳出进入do...while(--i)
i会被减一再进入while(--j)
重点来了,此是j已经是0,再减就会变回65535 (uint = unsigned int 范围是0~65535)
所以楼主的delay会轮回239 + 65536= 65775 次
如改为七楼的unsigned char(0~255)的delay则会轮回239 + 256 = 495 次
是楼主的132分之一
12T 8051在12Mhz 的运行速度大概是 2us一行
七楼的delay约等于1ms
而楼主的delay就要132ms
对于1602来说太久了

回复

使用道具 举报

16#
ID:955021 发表于 2021-7-21 17:45 | 只看该作者
查看一下是不是接线出现了错误
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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