单片机中12864液晶和数码管显示有冲突(C程序),用的不同的IO口,是什么情况呀?

12864液晶用的是串行口,下面是部分程序,另一个定时器用来控制数码管的倒计时
#define AddWr 0x90
#define AddRd 0x91
sbit Sda=P3^6;
sbit Scl=P3^7;
sbit cs=P2^4;
sbit sid=P2^5;
sbit sclk=P2^6;
sbit PSB=P2^7;
unsigned char code DAT[]={ "工作模式: 烘烤"};
unsigned char code DAT0[]={ "平均功率: "};
void disp(void)

{
FirstLine[0]='0'+TempData[0];
FirstLine[1]='0'+TempData[1];
FirstLine[2]='0'+TempData[2];
FirstLine[3]='0'+TempData[3];
ShowString(0,FirstLine);
}
void main()
{
initT0();
init_12864();
Init_Timer1();
Displaypro();
while(1)
{
scan();
display4();
delay(300);
display3();
delay(300);
display5();
delay(1000);
TempData[0]=ReadADC(0)/1000;//处理0通道电压显示
TempData[1]=ReadADC(0)/100%10;
TempData[2]=ReadADC(0)%100/10;//处理0通道电压显示
TempData[3]=ReadADC(0)%10;
delay(300);
disp();
}
}

问题提的不够明确啊、。。。
有冲突的情况没有说清楚啊,是数码管或12864显示的是错误数据,还是数码管或12864没显示数据,又或者是将12864取下后数码管就能正常显示?
还有,用不同的IO口是所有的口都不同(包括片选、电源正负极、使能等等),还是只是数据口不同?
说清楚才能判断是硬件问题还是软件问题,光贴个代码,不够啊!追问

显示液晶的程序和数码管显示的程序可以单独显示,但是融合在一起就不能正常显示了,有紊乱。液晶显示和数码管扫描有冲突,去掉数码管扫描部分,液晶显示正常了。该怎么解决呢?时序怎么控制呀?液晶显示的数据基本正确,但是显示看不清楚,还会闪,有时整个屏幕没有字了,一会儿又有字了,有时也会乱码。数码管显示基本正常。数码管用了P1口和P2.0-P2.3口,液晶只用了P2.5-P2.7

追答

首先程序方面:
case 1:P2=0x02;P0=StrTab[num1]&0x7f;break;
case 2:P2=0x04;P0=StrTab[num1];break;
case 3:P2=0x08;P0=StrTab[num1];break;
液晶是用的P2.5-P2.7是么,数码管扫描时,可能会给P2口赋值,你直接用的P2=0x0?,
这样会将P2.5-P2.7的值改为0,如果没猜错的话,这三个管脚对应的12864是RW、RS、E
你说在12864正在显示时,将它们赋值为0会有什么后果?

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-03
请给个源码或是电路图才好判断。追问

void Timer1_isr(void) interrupt 3 using 1
{
static unsigned int num1;
TH1=0xf0;
TL1=0x00;
switch (num1){
case 0:P2=0x01;P0=StrTab[num1];break;
case 1:P2=0x02;P0=StrTab[num1]&0x7f;break;
case 2:P2=0x04;P0=StrTab[num1];break;
case 3:P2=0x08;P0=StrTab[num1];break;
}
num1++;
if(num1==4)
num1=0;
}
这是数码管扫描部分

相似回答