附件里面有程序和proteus仿真圖,運行即可看到現象,用來顯示hour的十位不正常,程序中有注明是哪段程序,把那段程序去掉顯示就正常了,如果加上那段,點擊運行秒不動,等一會兒才懂,走過幾秒就又停止了,就是那段程序干擾了整個循環,還請幫忙看看怎么修改;還有就是是不是用proteus仿真定時不準,還是我的代碼有問題,大概走1分鐘會慢下來9秒
復制代碼
- #include"reg51.h" //包含reg51.h頭文件
- #define uchar unsigned char //宏定義
- #define uint unsigned int //宏定義
- sbit led1=P1^0; //定義LED連接關系
- sbit led2=P1^1;
- sbit w1=P2^0; //時-十位
- sbit w2=P2^1; //時-各位
- sbit w3=P2^2; //分-十位
- sbit w4=P2^3; //分-個位
- sbit w5=P2^4; //秒-十位
- sbit w6=P2^5; //秒-個位
- uchar sec,min,hour,num; //定義變量
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陽極字碼表
- void delay(uint ims) //延時子函數
- {
- uint i,j;
- for(i=ims;i>0;i--) //ims為多少就是多少ms
- for(j=110;j>0;j--);
- }
- void main() //主函數
- {
- TMOD=0x01; //設置為定時器0工作方式1定時器1工作方式1
- TH0=(65536-45872)/256; //裝入定時初值
- TL0=(65536-45872)%256;
- EA=1; //開總中斷
- ET0=1; //開定時器0中斷
- TR0=1; //開定時器0
- while(1) //大循環
- {
- P0=table[sec%10];
- w6=0; //秒-個位
- delay(10);
- w6=1;
- P0=table[sec/10];
- w5=0; //秒-十位
- delay(10);
- w5=1;
-
- P0=table[min%10];
- w4=0; //分-個位
- delay(10);
- w4=1;
-
- P0=table[min/10];
- w3=0; //分-十位
- delay(10);
- w3=1;
- P0=table[hour%10];
- w2=0; //時-個位
- delay(10);
- w2=1;
-
- /************這段程序有問題**************/
- P0=table[hour/10];
- w1=0; //時-十位
- delay(10); //問題可能就是這個延時破壞了循環,請高手指教
- w1=1;
- /***************************************/
- if(num==20)
- {
- num=0;
- led1=~led1;
- led2=~led2;
- if(sec<59)
- sec++;
- else
- {
- sec=0;
- if(min<59)
- min++;
- else
- {
- min=0;
- if(hour<11)
- hour++;
- else
- hour=0;
- }
- }
- }
- }
- }
- void timer0()interrupt 1
- {
- TH0=(65536-45872)/256;
- TL0=(65536-45872)%256;
- num++;
- }
復制代碼 [ 此貼被role_2099在2009-04-23 19:17重新編輯 ]