今天在做 小蜜蜂的综合案例的时候,数码管显示,有重影。
#include <STC15F2K60S2.H>
unsigned char num;
unsigned char code Duan[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0XC8,0xc3};
void shumadong();
void suocun(unsigned char n)
{switch(n){case 4:P2 = (P2 & 0x1f)|0x80;break;case 5:P2 = (P2 & 0x1f)|0xa0;break;case 6:P2 = (P2 & 0x1f)|0xc0;break;case 7:P2 = (P2 & 0x1f)|0xe0;break;}
}void shuma(unsigned char wei ,unsigned char shu)
{suocun(6);P0=0x01<<wei;suocun(7);P0=Duan[shu];
}
void Delay(unsigned int t)
{
while(t--);
}
void Delay_shuma(unsigned int t)
{while(t--){shumadong();}
}
void shumadong()
{shuma(0,1);Delay(500);shuma(2,num);Delay(500);}void main()
{while(1){shumadong();num+=1;if(num>9){num=0;}Delay_shuma(100);}
}
原因是:在动态显示的函数里的延迟函数,我用了第二个在等待的时候扫描的延时。
这里的应该是消影,而第二个延迟函数在主函数里,加完num后,将他刷新。
void Delay(unsigned int t)
{
while(t--);
}
void Delay_shuma(unsigned int t)
{while(t--){shumadong();}
}
void shumadong()
{shuma(0,1);Delay(500);shuma(2,num);Delay(500);}
在建立串口模块时,发生了,乱码行为。
void init_chuan()
{TMOD = 0x20;AUXR = 0x00;SCON = 0x50;TH1 = 0xfd;TL1 = 0xfd;TR1=1;ES=1;EA=1;
}
void chuankou() interrupt 4
{if(RI==1){data1=SBUF;RI=0;}
}
void working()
{if(data1 & 0xa0==0xa0){if(data1 & 0x01 ==0x01){L1=~L1;}}
}
void send(unsigned char dat)
{SBUF = dat;while(TI==0);TI=0;
}
void jv(unsigned char *p)
{while(*p !='\0'){send(*p++);}
}
void main()
{//suocun(4);//ding_Init();init_chuan();jv("we\r\n");while(1){//shumadong();//jvzhen();}
}
最终原因是,我把串口的工作函数放在了中断里,如果放在中断里面,会一直判断。我又没发什么,所以会这样。
在建立串口模块时,我要发送0xa1来发送指令。
但是我每次发送以后,L1只亮,不灭。我设置的是L1=~L1。
找到原因是我在收到信息以后,没有将data1清零。
void working()
{if(data1 & 0xa0==0xa0){if(data1 & 0x01 ==0x01){L1=~L1;send(data1);data1=0x00;}}
}