|
你們好,我想問一下你們。我這個程序為什么會出現(xiàn)問題?
本人比較笨,拜托各位大神教教我!實在是很難受,弄了這么久。
———————————————————————————————————————————————————————————————————————
當(dāng)按下“setplace”按鍵之后,TR0=0,定時器0會停止,單片機停止對DS1302的寄存器進行讀取 同時,place++(place的值改變指定不一樣的位置)
按道理,跟隨place值的改變,光標(biāo)會在指定的位置閃爍才對啊 現(xiàn)在出現(xiàn)的問題是光標(biāo)怎么會一直跑飛呢?
———————————————————————————————————————————————————————————————————————
相關(guān)的子函數(shù)如下:
void ds_readtime(void) //ds1302讀取寄存器子函數(shù)
{
miao=BCD_Decimal(ds_read(0x81));
fen=BCD_Decimal(ds_read(0x83));
shi=BCD_Decimal(ds_read(0x85));
ri=BCD_Decimal(ds_read(0x87));
yue=BCD_Decimal(ds_read(0x89));
xingqi=BCD_Decimal(ds_read(0x8b));
nian=BCD_Decimal(ds_read(0x8d));
}
———————————————————————————————————————————————————————————————————————
void InitTimer(void) //定時器的初始化函數(shù)
{
TMOD = 0x11;
EA = 1;
TH0=0;
TL0=0;
ET0 = 1;
TR0 = 1;
TH1 = 0x3C;
TL1 = 0x0B0;
ET1 = 1;
TR1 = 1;
}
void Timer0Interrupt(void) interrupt 1 //定時器0功能子函數(shù)
{
ds_readtime(); //讀取ds1302各個寄存器的值到hour,minute,second,week,day,month,year中
}
———————————————————————————————————————————————————————————————————————
void keyscan() //鍵盤掃描函數(shù)
{
if(setplace==0) //這個按鍵按下會改變光標(biāo)的位置
{
delay10ms();
if(setplace==0)
{
place++;
while(setplace==0);
if(pingmu==0) //我設(shè)置了4個屏幕,現(xiàn)在這個屏幕是顯示時鐘的
{
if(place==8) place=0;
if(place==1)
{
temp2=(miao)/10*16+(miao)%10;
ds_write(0x8e,0x00);
ds_write(0x80,0x00|temp2); //miao數(shù)據(jù)寫入DS1302
ds_write(0x8e,0x80);
TR0=0;
lcd_writecom(0x83);
lcd_writecom(0x0f);
}
if(place==2)
{
TR0=0;
lcd_writecom(0x86);
lcd_writecom(0x0f);
}
if(place==3)
{
TR0=0;
lcd_writecom(0x89);
lcd_writecom(0x0f);
}
if(place==4)
{
TR0=0;
lcd_writecom(0x8f);
lcd_writecom(0x0f);
}
if(place==5)
{
TR0=0;
lcd_writecom(0xc8);
lcd_writecom(0x0f);
}
if(place==6)
{
TR0=0;
lcd_writecom(0xcb);
lcd_writecom(0x0f);
}
if(place==7)
{
TR0=0;
lcd_writecom(0xce);
lcd_writecom(0x0f);
}
if(place==0)
{
lcd_writecom(0x0c); //按動到第8次,設(shè)置光標(biāo)不閃爍
TR0=1; //打開定時器0
temp2=(miao)/10*16+(miao)%10;
ds_write(0x8e,0x00);
ds_write(0x80,0x00|temp2);//miao數(shù)據(jù)寫入DS1302
ds_write(0x8e,0x80);
}
}
}
}
}
|
|