找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2082|回复: 6
收起左侧

单片机+LCD12864屏为何无显示?附程序

[复制链接]
ID:825883 发表于 2021-6-16 08:40 | 显示全部楼层 |阅读模式
各位老师好,下面程序编译通过,应在12864(带字库)屏幕闪显示“空不异色”4个汉字,现在不显示,什么原因???
#include<reg52.h>
#include<intrins.h>


sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
#define uchar unsigned char
#define uint unsigned int

void delay(uchar i)//*************************延时1ms函数
{
uchar n,i1,j1;
for(n=0;n<=i;n++){
        _nop_();
        i1 = 2;
        j1= 199;
        do
        {
                while (--j1);
        } while (--i1);}
}


void read_busy()//****************************判断忙函数
{
RS=0;
RW=1;
EN=1;
        delay(10);
while(P0&0X80);
EN=0;
}


void write_LCD_command(uchar value)//**********************写指令函数
{
read_busy();
RS=0;//1êy¾Y¼Ä′æÆ÷£¬2Ö¸áî¼Ä′æÆ÷
RW=0;
EN=1;
P0=value;
EN=0;
}


void write_LCD_byte(uchar value)//************写数据函数
{
read_busy();
RS=1;
RW=0;
EN=1;
P0=value;
EN=0;
}


void write_LCD_data(uchar *s)//***************连续写数据函数
{
   while(*s>0)  //
         {     
      write_LCD_byte(*s);//
      s++;      //
    }
}


void initi_LCD()//*******************************LCD12864初始化函数
{
delay(10);
write_LCD_command(0x30);
delay(1);
write_LCD_command(0x0C);
delay(1);
write_LCD_command(0x0C);//
delay(1);
write_LCD_command(0x01);//
delay(1);
write_LCD_command(0x06);
delay(10);
}
void main()//********************************************************主函数
{
initi_LCD();
write_LCD_command(0x01);
write_LCD_command(0X90);
        
write_LCD_data("空不异色");
        delay(1000);
while(1);


}

回复

使用道具 举报

ID:844772 发表于 2021-6-16 09:23 | 显示全部楼层
没看到具体情况,我觉得啊,检测busy你留了太长延时,4个_nop_()就够了,但发命令和数据,EN前要加延时,你一个没有加。

评分

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

查看全部评分

回复

使用道具 举报

ID:825883 发表于 2021-6-16 20:13 | 显示全部楼层
glinfei 发表于 2021-6-16 09:23
没看到具体情况,我觉得啊,检测busy你留了太长延时,4个_nop_()就够了,但发命令和数据,EN前要加延时, ...

谢谢解答,我已经改了,还是不显示。
回复

使用道具 举报

ID:825883 发表于 2021-6-16 20:35 | 显示全部楼层
问题找到了,判断忙函数前忘了加上:
P0=0X00;
可是我又看了原来1602屏的判断忙函数,为何第一句是P0=0xff呢?
12864判断忙函数第一句还不能写成P0=0xff。
为什么??

回复

使用道具 举报

ID:96682 发表于 2021-6-16 23:33 来自手机 | 显示全部楼层
33943417 发表于 2021-6-16 20:35
问题找到了,判断忙函数前忘了加上:
P0=0X00;
可是我又看了原来1602屏的判断忙函数,为何第一句是P0=0xf ...

这个和屏幕所使用的硬件有关
回复

使用道具 举报

ID:844772 发表于 2021-6-17 08:37 | 显示全部楼层
33943417 发表于 2021-6-16 20:35
问题找到了,判断忙函数前忘了加上:
P0=0X00;
可是我又看了原来1602屏的判断忙函数,为何第一句是P0=0xf ...

学到了,这玩意的硬件在这还有差异,以前不加也能用啊,升级这个功能干啥呢?
回复

使用道具 举报

ID:390416 发表于 2021-6-19 08:46 | 显示全部楼层
LCD12864中文资料包 容易看明白 http://www.51hei.com/bbs/dpj-200462-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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