|
發布時間: 2017-11-2 22:39
正文摘要:以上是代碼,功能是實現秒表計時,60清零,精確到后兩位,我覺得代碼沒問題啊 以下是仿真 #include<reg51.h> #include<intrins.h> char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; ... |
zjb2106558 發表于 2017-11-4 09:26 是的 為什么 |
Afan的單片機 發表于 2017-11-3 17:05 score[1]=(number-score[1]*1000)/100;后面的score[1]也得跟著改成score[0]呀。剩下那幾句也是……。 |
Afan的單片機 發表于 2017-11-3 23:14 讀懂正確有效程序,就知道自己錯在哪兒了! |
Afan的單片機 發表于 2017-11-3 23:14 位掃描要有延時 |
位掃描要加延時,不然看不到效果![]() |
zl2168 發表于 2017-11-3 21:08 額。。。感謝 但是我的哪里錯了呢 |
|
本帖最后由 zl2168 于 2017-11-3 21:10 編輯 實例93 99.9秒秒表 先Proteus仿真一下,確認有效。
實例95 99.9秒秒表.rar
(38.86 KB, 下載次數: 4)
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,書中電路和程序設計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s(10ms)計數器,并修改相應計數顯示程序。仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。 |
spark399 發表于 2017-11-3 14:16 是1-4呢,5不滿足條件 |
|
改動了以下: #include<reg51.h> #include<intrins.h> char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int number=0; char score[]={0,0,0,0}; void timer0(void) interrupt 1 { number++; score[0]=number/1000; score[1]=(number-score[1]*1000)/100; score[2]=(number-score[1]*1000-score[2]*100)/10; score[3]=(number-score[1]*1000-score[2]*100)%10; if (number>6000){number=0;} TL0=0Xf0; TH0=0Xd8; } main(){ int k=0; int wei=0x01; TMOD=0X01; TH0=0Xd8; TL0=0Xf0;//10ms TR0=1; ET0=1; EA=1; while(1){ for(k=0;k<4;k++) { P2=led[score[k]]; wei=_crol_(wei,2); P3=wei; } } } |
spark399 發表于 2017-11-3 14:16 我改成了for(k=0;k<4;k++),為什么還是不能正常顯示呢 |
yzwzfyz 發表于 2017-11-3 10:10 秒表計時呢 |
| 聲明處:05.char score[]={0,0,0,0};初始為4個元素,編譯器分配4個存儲空間,數組長度為4,最大有效下標3:有效下標score[0]---score[3];“ for(k=1;k<5;k++)”中k=1~5,一是錯位,二是最后一個數據超出地址空間了。 |
| 數組尋址是從0開始吧?score[0]開始。還有取余數用%就行了,不用那么麻煩。 |
| 不知道你要表達的意思是什么! |
| 有人嗎 |