本帖最后由 han001 于 2017-6-10 16:38 编辑
感谢您抽出时间来帮我解决这个问题。因完整程序太长,并且我个人认为这两个问题与其他部分没有关联,因此没有附出完整程序。
步入正题。在下是想,来简单的模拟一个界面显示。定义一个引脚,用一根杜邦线,引脚接地时,显示需要模拟的那个界面,不接地时,是正常状态的界面。用的是12864来显示。
问题一、
程序如下:
void main()//固定界面显示
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TL0=0x00; //50ms中断定时
ET0=1;
EA=1;
lcd_busy(); //LCD忙状态检测
delay1ms(10);
lcd_init(); //LCD初始化
lcd_pos(0,0);//智能控制
i=0;
while(dis0!='\0')
{ // LCD显示,下面三个均是
write_dat(dis0);
i++;
}
lcd_pos(1,0);//当前水温
i=0;
while(dis2!='\0')
{
write_dat(dis2);
i++;
}
lcd_pos(2,0);//当前水位比
i=0;
while(dis3!='\0')
{
write_dat(dis3);
i++;
}
lcd_pos(3,0);//当前功能显示区
i=0;
while(dis1!='\0')
{
write_dat(dis1);
i++;
}
if(Low==0)//触发模拟自动上水,其中Low是定义的IP脚
{
write_cmd(0x01);
delay1ms(5);
delay(20);
lcd_pos(0,0);
i=0;
while(dis0!='\0')
{
write_dat(dis0);
i++;
}
delay(20);
lcd_pos(1,0);
i=0;
while(dis6!='\0')
{
write_dat(dis6);
i++;
}
delay(20);
lcd_pos(2,0);
i=0;
while(dis12!='\0')
{
write_dat(dis12);
i++;
}
lcd_pos(2,6);
write_sfm1(6,water);
write_cmd(0x90);
delay(20);
lcd_pos(3,0);
i=0;
while(dis7!='\0')
{
write_dat(dis7);
i++;
}
P1=0x00; // 接地,显示一个界面
}
else if(Low==1)//未触发
{
write_cmd(0x01);
delay1ms(5);
delay(20);
lcd_pos(0,0);
i=0;
while(dis0!='\0')
{
write_dat(dis0);
i++;
}
delay(20);
lcd_pos(1,0);
i=0;
while(dis2!='\0')
{
write_dat(dis2);
i++;
}
delay(20);
lcd_pos(2,0);
i=0;
while(dis3!='\0')
{
write_dat(dis3);
i++;
}
delay(20);
lcd_pos(3,0);
i=0;
while(dis1!='\0')
{
write_dat(dis1);
i++;
}
P1=0xff; //正常状态,未接地,显示原界面
}
delay1ms(10);
while(1)
{
keyscan(); // 显示函数
}
}
问题描述:
不知以上程序是否存在问题,个人认为无,但程序结果却有错误,无编译问题,未报错。具体表现如下:
1.当在下烧写完程序后,用杜邦线接Low引脚时,接地和接Vcc都没有正常显示。
2.当在下先用杜邦线接Low引脚再烧写程序时,如果接的是地,它会显示应该显示的界面,如果接的是Vcc,同样都会显示应该显示的界面。但是,当接地或者Vcc时,再把地换成Vcc或者把Vcc换成地,都不显示任何界面,只显示上一次地或Vcc显示的界面。
3.当不用杜邦线接Low引脚时,如果if里面是Low==0时,会一闪而过Low==1应当显示的界面,一闪而过后,显示初始状态界面(初始状态界面就是什么都不做时,也会显示的界面,如同手机桌面),相反的,不再赘述。
综上所述,想请教一下您们,怎么解决这个问题,怎么才能让它正常,接地显示一个,不接地显示一个。还有,接地为0,接Vcc时为1,如果什么都不接,默认为0吗?希望能得到您的帮助!
问题二、
程序如下(同问题一只增加了红色标出的语句):
void main()//固定界面显示
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TL0=0x00; //50ms定时
ET0=1;
EA=1;
lcd_busy();
delay1ms(10);
lcd_init();
lcd_pos(0,0);//智能控制
i=0;
while(dis0!='\0')
{
write_dat(dis0);
i++;
}
lcd_pos(1,0);//当前水温
i=0;
while(dis2!='\0')
{
write_dat(dis2);
i++;
}
lcd_pos(2,0);//当前水位比
i=0;
while(dis3!='\0')
{
write_dat(dis3);
i++;
}
lcd_pos(3,0);//当前功能显示区
i=0;
while(dis1!='\0')
{
write_dat(dis1);
i++;
}
if(Low==0)//触发模拟自动上水
{
write_cmd(0x01);
delay1ms(5);
delay(20);
lcd_pos(0,0);
i=0;
while(dis0!='\0')
{
write_dat(dis0);
i++;
}
delay(20);
lcd_pos(1,0);
i=0;
while(dis6!='\0')
{
write_dat(dis6);
i++;
}
delay(20);
lcd_pos(2,0);
i=0;
while(dis12!='\0')
{
write_dat(dis12);
i++;
}
lcd_pos(2,6);
write_sfm1(6,water);
write_cmd(0x90);
delay(20);
lcd_pos(3,0);
i=0;
while(dis7!='\0')
{
write_dat(dis7);
i++;
}
P1=0x00;
break;
}
else if(Low==1)//未触发
{
write_cmd(0x01);
delay1ms(5);
delay(20);
lcd_pos(0,0);
i=0;
while(dis0!='\0')
{
write_dat(dis0);
i++;
}
delay(20);
lcd_pos(1,0);
i=0;
while(dis2!='\0')
{
write_dat(dis2);
i++;
}
delay(20);
lcd_pos(2,0);
i=0;
while(dis3!='\0')
{
write_dat(dis3);
i++;
}
delay(20);
lcd_pos(3,0);
i=0;
while(dis1!='\0')
{
write_dat(dis1);
i++;
}
P1=0xff;
break;
}
delay1ms(10);
while(1)
{
keyscan();
}
}
具体如下:
编译报错,如图。不解,求答,谢谢您!
文字版:
Build target 'Target 1'
compiling test1.c...
TEST1.C(136): error C171: 'break': missing enclosing loop
TEST1.C(179): error C171: 'break': missing enclosing loop
Target not created
|