|
發布時間: 2020-6-11 12:08
正文摘要:單片機源程序如下: #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit led1 = P1^0; sbit led2 = P1^1; void main() { &nbs ... |
| 你這個用定時器觸發中斷,但是定時完一次之后你這個定時器需要重新啟動,才能再次開始定時,然后進入中斷才會反轉 |
| int x=0,y=0; 放到外面去做全局變量 |
wulin 發表于 2020-6-11 16:39 好的多謝 |
左眼 發表于 2020-6-11 18:06 懂了多謝 |
| 把在定時器0的中斷服務函數里的int前面加上static就行了。你的錯誤出現在每一次定時器中斷進入你都會重置x,y值,導致其每次都是0開始,1結束。對于其為什么會亮,是因為你電路圖有問題的,沒有上拉或下拉電阻,你的端口值是不確定的,似乎是低電平,導致通電就亮。建議買塊板子,不要用仿真,新手用實物,等你本事到了再用仿真。 |
| 另外y的值設的有點大,時間長得讓人懷疑是不是有問題 |
|
樓主局部變量int x=0,y=0;,也就是每次進入中斷都清0,永遠也加不到想要的數。只有把x、y設為全局變量或局部靜態變量才能達到樓主想要的效果。 void timer () interrupt 1 { static unsigned char x=0,y=0; TH0=0x3C; //計數初值重裝載 TL0=0xB0; if(led2==0) { x++; if(x==40) { led2=1; x=0; } } if(led2==1) { y++; if(y==200) { led2=0; y=0; } } } |
你在定時器中斷中定義的x,y是局部變量,每進入一次中斷都會被重新賦值為0,所以它們永遠不會達到你設置的改變條件。 |
| 定時器里面的變量或聲明為公共變量或聲明為靜態變量。否則進入中斷變量始終為0。 |
| 我想做一個手控燈,一個自動燈,但是那個自動燈亮了就不滅了 |