int main(void)
{
TMOD=0x01; //將T0設定成為以作業方式1(16位)作業的計數器模式;
TH0=(65535-10000) / 256; //計數10000次(延時10ms)
TL0=(65535-10000) % 256; //計數10000次(延時10ms);
EA=1; //開放總中斷;
ET0=1; //開放定時計數器0中斷;
//TR0=1;
while(1)
{
if(!start) //有按鍵按下
{
delay(200); //消抖
if(!start)
{
while(!start);
run_flag++;
}
}
if(run_flag==1)
{
TR0=1; //開始計數
}
else if(run_flag>1)
{
run_flag=0;
TR0=0;
}
reflash(); //呼叫數碼管顯示函式
}
}
void timer_service(void) interrupt 1
{
TH0=(65535-10000) / 256;
TL0=(65535-10000) % 256;
n_ms++;
if(n_ms>=100)
{
n_ms=0;
n_s++;
if(n_s>=60)
{
n_s=0;
n_m++;
if(n_m>=60)
{
n_m=0;
}
}
}
}
uj5u.com熱心網友回復:
沒看出有邏輯問題。按鍵不參與控制,在只有定時器計時的時候,數碼管顯示正常吧?delay(200)大概多久?消抖的時間一般10~15ms就可以了。
uj5u.com熱心網友回復:
可以軟體仿真跑一下 delay 是否與定時器T0有關, 是否需要啟動定時器才起作用?uj5u.com熱心網友回復:
delay只是個延時函式,我試過改小也一樣;另外將while(1)里面的按鍵判斷去掉直接在上面讓TR0=1 ,數碼管是可以直接顯示的,也能正常計數;加上這段按鍵的就不行uj5u.com熱心網友回復:
把elseif屏蔽掉,先確認按鍵按下電壓有變化。
else if(run_flag>1)
{
run_flag=0;
TR0=0;
}
uj5u.com熱心網友回復:
屏蔽掉后 按下按鍵也沒計數,數碼管顯示一直是0uj5u.com熱心網友回復:
萬用表查硬體電路吧。還有,全域變數run_flag是怎么定義的,初始化了嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/156723.html
標籤:單片機/工控
