用8255A扩展AT89S52IO口驱动12864液晶屏时,LCD没有显示。8255A的PA口做8位数据口,PC0~PC5做为LCD的控制端口,在PROTUES中模拟式时发现PC口输出即LCD控制端口有反应,PA口全是低电平,毫无反应。8255A的A0,A1,CS分别接74LS373的O0,O1,O3,PA,PB,PC,CON口地址分别为0x0000,0x0001,0x0002,0x0003.经测试,在没有用8255A时,用P0口做数据口,P2口做控制口,LCD显示正常;用8255A扩展8位数码管,PA接段控,PC接位控,也能正常运行。LCD驱动没有问题,现在很怀疑是不是程序中对PA口的操作出了问题,又检查不出来,郁闷好几天了。所以发到这里,请大家帮忙看看,先谢谢了
程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define PA XBYTE[0X0000]//PA口地址
#define PB XBYTE[0X0001]//PB口地址
#define PC XBYTE[0X0002]//PC口地址
#define CON XBYTE[0X0003]//控制口地址
/************************************************************
PC^0-lcdrs;PC^1-lcdrw;PC^2-lcden;PC^3-cs1;PC^4-cs2;PC^5-rstb;
在LCD上显示1 2 3
*************************************************************/
uchar code table[]={"1 2 3"};
void delay(uchar z)//延时程序
{
uchar x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
void write_com(uchar com)//LCD写命令子程序
{ CON=0x07;//cs1=1
CON=0x09;//cs2=1
CON=0x00;//置零lcdrs PC.0=lcdrs
CON=0X02;//置零lcdrw PC.1=lcdrw
PA=com;
CON=0x05;//置位lcden PC.2=lcden
delay(5);
CON=0X04;//置零lcden
}
void write_date(uchar date)//LCD写数据子程序
{
CON=0x07;//cs1=1
CON=0x09;//cs2=1
CON=0x01;//置位lcdrs PC.0=lcdrs
CON=0x02;;//置零lcdrw PC.1=lcdrw
PA=date;
delay(5);
CON=0x05;//置位lcden PC.2=lcden
delay(5);
CON=0x04;//置零lcden
}
void lcdinit()//液晶初始化程序
{
CON=0x0b;//片选置1
CON=0x04;//置零lcden
write_com(0x30);
write_com(0x0c);
write_com(0x01);
write_com(0x06);
}
void main()
{
uchar i;
CON=0x80;//8255工作方式控制字,PA,PC口输出,工作方式0
lcdinit();
while(1)
{ write_com(0x90);//从液晶第一行开始
for(i=0;i
需求补充: 最后几行程序写不上去啊,就是显示字符的语句