这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 8255A,51 有关使用8255A与51单片机接口的液晶显示程序问题

共3条 1/1 1 跳转至

8255A,51 有关使用8255A与51单片机接口的液晶显示程序问题

院士
2006-09-17 18:14:16     打赏
8255A,51 有关使用8255A与51单片机接口的液晶显示程序问题



关键词: 8255A     有关     使用     单片机     接口     液晶显示         

院士
2006-12-22 22:43:00     打赏
2楼
问    我用8255A51单片机接口,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的初始化命令

菜鸟
2011-01-15 14:51:40     打赏
3楼
没有看到你的附件呀

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]