找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2370|回复: 1
收起左侧

程序仿真正确,放到12864液晶显示器无显示,且12864液晶显示器全亮,代码如下:

[复制链接]
ID:396423 发表于 2018-9-27 10:36 | 显示全部楼层 |阅读模式
#include<reg51.h>
#include<intrins.h>
//定义控制信号端口
sbit RS=P0^7;
sbit RW=P0^6;
sbit E=P0^5;
//声明调用函数
void lcd_w_cmd(unsigned char com);                //写命令字函数
void lcd_w_dat(unsigned char dat);                //写数据函数
unsigned char lcd_r_start();                        //读状态函数
void lcd_init();                                                //LCD初始化函数
void delay100us(unsigned char t);                //可控延时函数
void delay5us(unsigned char n);                        //软件实现延时函数,n*5个机器周期
void main()                                                                //主函数
{
        unsigned char Disp[]="He Zhe";                //定义字符数组Disp
        unsigned char i;
        P2=0xff;                                                        //送全1到P1口
        lcd_init();                                                        //初始化LCD
        delay100us(255);                                       
        lcd_w_cmd(0xc2);                                        //定位光标设置显示位置
        delay100us(255);
        for(i=0;i<6;i++)                                        //显示字符串
        {
                lcd_w_dat(Disp[i]);
                delay100us(200);
        }
        while(1);                                                        //显示完成
}
void delay100us(unsigned char t)
{
        unsigned char j,i;
        for(i=0;i<t;i++)
                for(j=0;j<10;j++);
}
void delay5us(unsigned char n)
{
        do
        {
                _nop_();
                _nop_();
                _nop_();
                n--;
        }
        while(n);
}
void lcd_init()
{
        lcd_w_cmd(0x3c);                                        //设置工作方式
        lcd_w_cmd(0x0e);                                        //设置光标
        lcd_w_cmd(0x01);                                        //清屏
        lcd_w_cmd(0x06);                                        //设置输入方式
        lcd_w_cmd(0x80);                                        //设置初始显示位置
}
unsigned char lcd_r_start()
{
        unsigned char s;
        RW=1;                                                                //RW=1,RS=0,读LCD状态
        delay5us(1);
        RS=0;
        delay5us(1);
        E=1;                                                                //E端时序
        delay5us(1);
        s=P2;                                                                //从LCD的数据口读状态
        delay5us(1);
        E=0;
        delay5us(1);
        RW=0;
        delay5us(1);
        return(s);                                                        //返回读取的LCD状态字
}
void lcd_w_cmd(unsigned char com)
{
        unsigned char i;
        do
        {                                                                        //查LCD忙操作
                i=lcd_r_start();                                //调用读状态字函数
                i=i&0x80;                                                //与操作屏蔽掉低7位
                delay100us(2);
        }
        while(i!=0);                                                //LCD忙,继续查询,否则退出循环
        RW=1;
        delay5us(1);
        RS=0;                                                                //RW=1,RS=0,写入LCD命令字
        delay5us(1);
        E=1;                                                                //E端时序
        delay5us(1);
        P2=com;                                                                //将com中的命令字写入LCD数据口
        delay5us(1);
        E=0;
        delay5us(1);
        RW=1;
        delay100us(255);
}
void lcd_w_dat(unsigned char dat)
{
        unsigned char i;
        do
        {                                                                        //查忙操作
                i=lcd_r_start();                                //调用读状态字函数
                i=i&0x80;                                                //与操作屏蔽掉低7位
                delay100us(2);
        }
        while(i!=0);                                                //LCD忙,继续查询,否则退出循环
        RW=0;
        delay5us(1);
        RS=1;                                                                //RW=1,RS=0,写入LCD命令字
        delay5us(1);
        E=1;                                                                //E端时序
        delay5us(1);
        P2=dat;                                                                //将dat中的显示数据写入LCD数据口
        delay5us(1);
        E=0;
        delay5us(1);
        RW=1;
        delay100us(255);
}


QX-mini51.pdf

154.08 KB, 下载次数: 8

回复

使用道具 举报

ID:537018 发表于 2019-5-23 16:20 | 显示全部楼层
1、没有信号输入
2、信号输入成功,但解码过程出现问题
3、解码成功,液晶驱动不正常

有背光不显示内容:基本可以排除电源和背光源问题。问题出在信号输入,解码,液晶驱动部分。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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