共3条
1/1 1 跳转至页
8255A,51 有关使用8255A与51单片机接口的液晶显示程序问题
问
我用8255A和51单片机接口,LCD为128*64点阵,设置A口输出,作为LCD的数据口,设置B口输出,使用到PB0~PB5,这6根输出线作为LCD的控制信号线,PC口没用到(打算将来接行列式键盘滴),篇幅有限,所以只贴出了一个函数,具体程序我上传了附件了,我就是不确定我这样写代码对不对,因为到现在为止LCD显示一直不正常,以前没有用8255作接口,直接用单片机控制LCD显示的时候是正常的,所以我觉得应该是8255A的问题,8255的片选线接到了单片机的P2.6上,片内端口选择线A1、A0接到P2.1、P2.0上。搞了好几天了,LCD就是没反应,所以才来这里找大家给帮忙看看,谢谢!
程序段如下:
/*LCD128*64 程序
**功能:通过8255A构成单片机与LCD的接口电路,
**8255的PA口接到LCD的数据口,为双向数据口;PB0~PB5为控制LCD的6个引脚,为输出口;
**P2.6为8255的片选端,P2.0、P2.1为8255A的内部端口地址选择线。
LCD控制线及对应输出到55PB口的数据(PB8255=data_8255)
(1)数据指令选择线D/I:D/I=1,发送数据,data_8255 |=0x01;D/I=0,发送指令,data_8255 =data_8255 &0xfe;
(2)读写信号线RW:RW=1,data_8255 |=0x02; RW=0,data_8255 =data_8255 &0xfd;
(3)使能信号线:E=1,data_8255 |=0x04; E=0,data_8255 =data_8255 &0xfb;
(4)片选信号线CS1:CS1=1,data_8255 |=0x08; CS1=0,data_8255 =data_8255 &0xf7;
(5)片选信号线CS2:CS2=1,data_8255 |=0x10; CS2=0,data_8255 =data_8255 &0xef;
(6)复位信号线RST:RST=1, data_8255 |=0x20; RST=0, data_8255 =data_8255 &0xdf;
LCD各信号线与8255PB口的接口情况:
PB5 PB4 PB3 PB2 PB1 PB0
RST CS2 CS1 E RW D/I
*/
#include<reg52.h>
#include<intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*定义8255A片内各端口在系统中的地址*/
#define PA8255 XBYTE[0xBCFF] //8255 PA数据口地址
#define PB8255 XBYTE[0xBDFF] //8255 PB数据口地址
#define PC8255 XBYTE[0xBEFF] //8255 PC数据口地址
#define COM8255 XBYTE[0xBFFF] //8255命令口口地址
uchar data_8255;
/*向液晶模块发送命令*/
void LCD_C(uchar ldata)
{
uchar data i;
data_8255 =data_8255 &0xfe; //D/I = 0;
data_8255 =data_8255 &0xfd; //RW = 0;
data_8255 =data_8255 &0xfb; //E = 0;
PB8255 = data_8255;
PA8255 = ldata;
_nop_();
data_8255 |=0x04; //E = 1;
PB8255 = data_8255;
_nop_(); _nop_();
data_8255 =data_8255 &0xfe; //D/I = 0;
data_8255 =data_8255 &0xfb; //E = 0;
data_8255 |=0x02; //RW = 1;
PB8255 = data_8255;
for ( i = 0; i < 10 ;i++) ;
}
答 1: 个人见解1 确定LCD是完好的;检查液晶的偏置电压是否在标准的推荐值上
2 液晶的复位电路是否正常,软件初始化液晶的过程和参数是否正确,是否存在LCD未初始化好,而初始化程序已执行完的情况。
3 确定8255配置是否正常,使用逻辑分析仪或示波器测量PA,PB口波形
4 操作时间上是否满足液晶操作要求
5 使用LCD提供的参考程序测试
答 2: 今天将昨晚没能上传的程序贴上来,感谢zgl7903的回答 非常感谢zgl7903的回答,首先,LCD是完好的,原来已经使用过它提供的参考程序测试过了,LCD的复位是用软件来实现的(在复位引脚处先输入低电平,后输入高电平),软件初始化液晶的过程和参数应该是正确的,因为这都是参考原来的测试程序的,只是我不知道zgl7903您为什么要“确定8255配置是否正常,使用逻辑分析仪或示波器测量PA,PB口波形”?这个程序的运行结果就是LCD屏上一闪一闪的,郁闷ing。。。。。
另外我把源程序贴上来。详见附件。 答 3: 个人见解闪是很正常的,因为在while循环中在不断的刷新,试试下面的方法
bit need_refresh=1;
while(1)
{
if(need_refresh)
{
//刷新LCD
need_refresh=0;
}
} 答 4: dd看一下是不是蓝模式如是是否先点亮背光源 答 5: 达我怎么没看见8255的初始化命令
程序段如下:
/*LCD128*64 程序
**功能:通过8255A构成单片机与LCD的接口电路,
**8255的PA口接到LCD的数据口,为双向数据口;PB0~PB5为控制LCD的6个引脚,为输出口;
**P2.6为8255的片选端,P2.0、P2.1为8255A的内部端口地址选择线。
LCD控制线及对应输出到55PB口的数据(PB8255=data_8255)
(1)数据指令选择线D/I:D/I=1,发送数据,data_8255 |=0x01;D/I=0,发送指令,data_8255 =data_8255 &0xfe;
(2)读写信号线RW:RW=1,data_8255 |=0x02; RW=0,data_8255 =data_8255 &0xfd;
(3)使能信号线:E=1,data_8255 |=0x04; E=0,data_8255 =data_8255 &0xfb;
(4)片选信号线CS1:CS1=1,data_8255 |=0x08; CS1=0,data_8255 =data_8255 &0xf7;
(5)片选信号线CS2:CS2=1,data_8255 |=0x10; CS2=0,data_8255 =data_8255 &0xef;
(6)复位信号线RST:RST=1, data_8255 |=0x20; RST=0, data_8255 =data_8255 &0xdf;
LCD各信号线与8255PB口的接口情况:
PB5 PB4 PB3 PB2 PB1 PB0
RST CS2 CS1 E RW D/I
*/
#include<reg52.h>
#include<intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*定义8255A片内各端口在系统中的地址*/
#define PA8255 XBYTE[0xBCFF] //8255 PA数据口地址
#define PB8255 XBYTE[0xBDFF] //8255 PB数据口地址
#define PC8255 XBYTE[0xBEFF] //8255 PC数据口地址
#define COM8255 XBYTE[0xBFFF] //8255命令口口地址
uchar data_8255;
/*向液晶模块发送命令*/
void LCD_C(uchar ldata)
{
uchar data i;
data_8255 =data_8255 &0xfe; //D/I = 0;
data_8255 =data_8255 &0xfd; //RW = 0;
data_8255 =data_8255 &0xfb; //E = 0;
PB8255 = data_8255;
PA8255 = ldata;
_nop_();
data_8255 |=0x04; //E = 1;
PB8255 = data_8255;
_nop_(); _nop_();
data_8255 =data_8255 &0xfe; //D/I = 0;
data_8255 =data_8255 &0xfb; //E = 0;
data_8255 |=0x02; //RW = 1;
PB8255 = data_8255;
for ( i = 0; i < 10 ;i++) ;
}
答 1: 个人见解1 确定LCD是完好的;检查液晶的偏置电压是否在标准的推荐值上
2 液晶的复位电路是否正常,软件初始化液晶的过程和参数是否正确,是否存在LCD未初始化好,而初始化程序已执行完的情况。
3 确定8255配置是否正常,使用逻辑分析仪或示波器测量PA,PB口波形
4 操作时间上是否满足液晶操作要求
5 使用LCD提供的参考程序测试
答 2: 今天将昨晚没能上传的程序贴上来,感谢zgl7903的回答 非常感谢zgl7903的回答,首先,LCD是完好的,原来已经使用过它提供的参考程序测试过了,LCD的复位是用软件来实现的(在复位引脚处先输入低电平,后输入高电平),软件初始化液晶的过程和参数应该是正确的,因为这都是参考原来的测试程序的,只是我不知道zgl7903您为什么要“确定8255配置是否正常,使用逻辑分析仪或示波器测量PA,PB口波形”?这个程序的运行结果就是LCD屏上一闪一闪的,郁闷ing。。。。。
另外我把源程序贴上来。详见附件。 答 3: 个人见解闪是很正常的,因为在while循环中在不断的刷新,试试下面的方法
bit need_refresh=1;
while(1)
{
if(need_refresh)
{
//刷新LCD
need_refresh=0;
}
} 答 4: dd看一下是不是蓝模式如是是否先点亮背光源 答 5: 达我怎么没看见8255的初始化命令
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |