|
發布時間: 2020-6-4 16:00
正文摘要:代碼如下 #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int /*uchar code table[]= { 0x3F,0x06,0x66,0x4F, &nbs ... |
| 學些新的數碼管動態知識,可參http://www.denmoz.com/bbs/dpj-189201-1.html,有代碼有示例工程下載。 |
|
樓主的硬件電路只能在仿真里做做,做成實物會 1:程序跑不起來,因為EA接了VCC,沒接地; 2:三極管Q1,Q3會燒毀,單片機可能會燒毀;因為三極管基極沒有電阻,低電平時,電源對地等效接二極管短路。 3:D10-D25發光二極管會燒毀,因為沒有限流電阻; 4:數碼管可能會燒毀,也是因為沒有限流電阻; 5:繼電器驅動不起來;因為串聯220歐電阻能否驅動,要看你繼電器的選型了; 軟件方面: 1:你注釋掉的譯碼是對的; 2: if(key3==0) { DelayMs(10); if(key3==0) { num2+=10; if(num2==990) num2=0; } while(!key3); } 邊界有問題。剛開始你是uint scale,num,num1,num2=990,num3; 按了key3,結果num2+10=1000;1000!=990,所以num2不會被變為0。結果就是1000,超過了990. key4存在同樣問題,當num變為0后,按了key4鍵,num=65526。。。 4:如果單片機時鐘是12MHz,12T,那定時器1定時周期50ms,被num分頻20,就是1000ms,被num3分頻60,就是1分鐘。意味著num1要等1分鐘才會變一次。仿真顯示你有沒有等一分鐘后看過結果? |