![]() |
發布時間: 2018-9-22 16:00
正文摘要:為啥把程序刷進去沒反應 #include<reg52.h> unsigned char code a[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90}; unsigned char abuff[]={0xFF,0xFF,0XFF,0XFF,0XFF,0XFF}; unsign ... |
錯誤:unsigned char count=0; 正確:unsigned int count=0; 錯誤: case 0: P2=0x01;i++;P1=abuff[0];break; case 1: P2=0x02;i++;P1=abuff[1];break; case 2: P2=0x40;i++;P1=abuff[1];break; case 3: P2=0x80;i++;P1=abuff[1];break; case 4: P2=0x10;i++;P1=abuff[1];break; case 5: P2=0x20;i=0;P1=abuff[1];break; 正確: case 0: P2=0x01;i++;P1=abuff[0];break; case 1: P2=0x02;i++;P1=abuff[1];break; case 2: P2=0x04;i++;P1=abuff[2];break; case 3: P2=0x08;i++;P1=abuff[3];break; case 4: P2=0x10;i++;P1=abuff[4];break; case 5: P2=0x20;i=0;P1=abuff[5];break; |
angmall 發表于 2018-9-23 18:54 十分感謝! |
count和sec換成UINT,i給個初值,定時器的初裝值放到啟動前,switch語句改正好,應該可以運行了,但到不了999999,建議把秒數分成兩部分,高三位和第三位這樣定義才放的下。 |
zl2168 發表于 2018-9-22 17:09 親,請問能不能把keil程序發一下呢謝謝你 |
zl2168 發表于 2018-9-22 17:09 親,請問能不能把keil程序發一下呢謝謝你 |
unsigned char的取值范圍是0-255 char是有長度的,你好好看看書,會有詳細的解釋 unsigned char sec=0; //記錄秒數 unsigned char i=0; //動態掃描索引 unsigned char count=0; //記錄中斷次數 TF0=1為一次中斷 if(count>=1000) // 中斷1000次,即達到1s { count=0; sec++; //秒數加1 unsigned char是8位的,占一個寄存器, 無符號字符型,范圍(0-255) unsigned int是16位, 占2個寄存器, 無符號整型 范圍(0-65,535) unsigned long是32位, 占4個寄存器, 無符號整型 范圍(0-4,294,967,296) sec 定義為 unsigned long sec, 可以計到 999999秒 count 定義為 unsigned int |
count 不能定義為char |
本帖最后由 zl2168 于 2018-9-22 19:30 編輯 實例93 99.9秒秒表 先Proteus仿真一下,確認有效。 ![]() ![]() 以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,書中電路和程序設計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。 若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s(10ms)計數器,并修改相應計數顯示程序。 |