首页 » 技术SOS » 嵌入式系统 » MCU和嵌入式微处理器 » AT89S52连接8255A 驱动12864液晶屏的显示程序问题

AT89S52连接8255A 驱动12864液晶屏的显示程序问题

菜鸟
2009-08-29 11:20:54
用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
问题补充: 最后几行程序漏掉了
for(i=0;i
关键词: AT89S52, 8255A