找回密码
 立即注册

QQ登录

只需一步,快速开始

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

lcd单片机驱动lcd1602写数据0x41,显示乱码,仿真正常。可能什么问题?

  [复制链接]
跳转到指定楼层
楼主

lcd1602写数据0x41,显示乱码,仿真正常。可能什么问题?
/***********1602液晶静态显示**************/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

uchar j;
uchar k;
sbit LCD_EN=P2^5;
sbit LCD_RS=P2^3;
sbit LCD_RW=P2^4;

void delay_10us(uchar i)
{
    unsigned char a;
        for(j=i;j>0;j--)
        {
    for(a=3;a>0;a--);
        }
}

void write_command(uchar com)
{
   LCD_RS=0;
   LCD_RW=0;
   P0=com;
   delay_10us(100);
   LCD_EN=1;
   delay_10us(100);
   LCD_EN=0;
}

void write_data(uchar dat)
{
   LCD_RS=1;
   LCD_RW=0;
   P0=dat;
   delay_10us(100);
   LCD_EN=1;
   delay_10us(100);
   LCD_EN=0;
}

void LCD_init()
{
  LCD_EN=0;
  write_command(0x3c);          //设置显示模式
  write_command(0x0f);          //设置开/关及光标设置
  write_command(0x06);          //光标左右移动
  write_command(0x01);          //清屏,及数据指针清零
  write_command(0x80);          //数据指针地址
}


void main(void)
{
   LCD_init();
   write_data(0x41);
   while(1);
}

评分

参与人数 1黑币 +5 收起 理由
onerepulic + 5

查看全部评分

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

使用道具 举报

沙发
ID:185407 发表于 2017-4-4 19:25 | 只看该作者

回帖奖励 +5

你设置端口号是根据什么设置的。就这么点程序吗???

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:186098 发表于 2017-4-4 19:35 | 只看该作者
如果仿真没问题的话,那可能是因为电路弄错了,你是用的pcb板还是自己焊的

评分

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

查看全部评分

回复

使用道具 举报

地板
ID:151348 发表于 2017-4-4 21:27 | 只看该作者
这就有点像“理论与实际的差距”,我之前也有遇到类似的情况,仿真时用写好的LCD驱动程序显示正常,下载到自制的板子上就完全不显示,我觉得可参考以下两点修改意见
1、检查接线,清理干净板子
2、调程序,特别是延时长短

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:139175 发表于 2017-4-5 10:54 | 只看该作者
我喜欢卖萌 发表于 2017-4-4 19:35
如果仿真没问题的话,那可能是因为电路弄错了,你是用的pcb板还是自己焊的

用的开发板
回复

使用道具 举报

6#
ID:139175 发表于 2017-4-5 11:04 | 只看该作者
liuyier1989 发表于 2017-4-4 19:25
你设置端口号是根据什么设置的。就这么点程序吗???

端口号是isp自动扫描的。根据郭天祥教程来写的,就这么多啊。实在搞不懂了
回复

使用道具 举报

7#
ID:148552 发表于 2017-4-5 16:20 | 只看该作者
可以提供下这个函数吗
LCD_init();
回复

使用道具 举报

8#
ID:148552 发表于 2017-4-5 16:22 | 只看该作者
刚说错了,你这个有可能是数据口没有初始化,
回复

使用道具 举报

9#
ID:148552 发表于 2017-4-5 16:24 | 只看该作者
写数据和命令之前要判断显示屏是否繁忙

void busy()
{
uchar busy;
P0=0xff;//复位系统总线,非常重要
RS=0;
RW=1;
do
{
E=1;
busy=P0;
E=0;
}
while(busy&0x80);
E=0;
}
回复

使用道具 举报

10#
ID:139175 发表于 2017-4-6 15:43 | 只看该作者
你像风儿来了 发表于 2017-4-5 16:22
刚说错了,你这个有可能是数据口没有初始化,

数据口没初始化?能具体说明下吗?
回复

使用道具 举报

11#
ID:139175 发表于 2017-4-6 15:44 | 只看该作者
你像风儿来了 发表于 2017-4-5 16:24
写数据和命令之前要判断显示屏是否繁忙

void busy()

好的,谢谢啦,我再去试试
回复

使用道具 举报

12#
ID:244633 发表于 2017-10-31 17:25 | 只看该作者
您好,想请问下您,这个乱码的问题解决了么
回复

使用道具 举报

13#
ID:244649 发表于 2017-10-31 18:14 | 只看该作者
程序我看了,没问题,既然仿真也没有问题的话,那就是你硬件的问题了
回复

使用道具 举报

14#
ID:472242 发表于 2019-2-5 22:33 | 只看该作者
void main(void)
{
   LCD_init();
   write_data(0x41);  //这里是有问题的,你要0x41放到哪个位置都没设好,不出问题才是问题
   while(1);
}

评分

参与人数 3黑币 +62 收起 理由
站着说话不腰疼 + 12
刀刀见红 + 35
#include51.h + 15

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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