|
本帖最后由 imlwg 于 2018-2-22 16:16 編輯
德飛萊hc6800-es v2.0單片機,八位數碼管做個簡單時鐘,1毫秒中斷,運行后發現一秒的時間和現實相差太多,以下是代碼,請教各位大蝦是哪兒出了問題。
- #include<reg52.h>
- #include<intrins.h>
- #define duanxian P0
- sbit led138c=P2^4;
- sbit led138b=P2^3;
- sbit led138a=P2^2;
- unsigned char duan[11]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
- void timeinit();
- void displayinit();
- void display();
- void dely(unsigned int dat){while(dat--);}
- unsigned long int cnt=0;
- unsigned int sec=0,min=0,hour=0;
- unsigned char temp,b=0x00;
- void main()
- {
- timeinit();
- displayinit();
-
- while(1);
-
-
-
- }
-
- void timeinit()
- {
- TMOD |=0X01;
- TH0=0XFC;
- TL0=0X18;
- ET0=1;
- EA=1;
- TR0=1;
- }
-
- void displayinit()
- {
- unsigned int n=0;
- do
- { for(n=0;n<8;n++)
- {
- switch(n)
- {
- case(0): led138c=0;led138b=0;led138a=0;duanxian=duan[0];break;
- case(1): led138c=0;led138b=0;led138a=1;duanxian=duan[0];break;
- case(2): led138c=0;led138b=1;led138a=0;duanxian=0x80;break;
- case(3): led138c=0;led138b=1;led138a=1;duanxian=duan[0];break;
- case(4): led138c=1;led138b=0;led138a=0;duanxian=duan[0];break;
- case(5): led138c=1;led138b=0;led138a=1;duanxian=0x80;break;
- case(6): led138c=1;led138b=1;led138a=0;duanxian=duan[0];break;
- case(7): led138c=1;led138b=1;led138a=1;duanxian=duan[0];break;
- };
- dely(100);
- duanxian=0x00;
- };
- }while(TF0==0);
- }
- void time0() interrupt 1
- {
-
- TH0=0XFC;
- TL0=0X18;
- cnt++;
- display();
- if(cnt==100)
- {
- cnt=0;
- sec++;
- temp=duan[10];
- duan[10]=b;
- b=temp;
- };
- if(sec==60){sec=0;min++;};
- if(min==60){min=0;hour++;}
- if(hour==24)hour=0;
- }
- void display()
- {
-
- unsigned int a;
- for(a=0;a<8;a++)
- {
- switch(a)
- {case(0): led138c=0;led138b=0;led138a=0;duanxian=duan[sec%10];break;
- case(1): led138c=0;led138b=0;led138a=1;duanxian=duan[sec/10%10];break;
- case(2): led138c=0;led138b=1;led138a=0;duanxian=duan[10];break;
- case(3): led138c=0;led138b=1;led138a=1;duanxian=duan[min%10];break;
- case(4): led138c=1;led138b=0;led138a=0;duanxian=duan[min/10%10];break;
- case(5):led138c=1;led138b=0;led138a=1;duanxian=duan[10];break;
- case(6): led138c=1;led138b=1;led138a=0;duanxian=duan[hour%10];break;
- case(7): led138c=1;led138b=1;led138a=1;duanxian=duan[hour/10%10];break;
- };
- dely(100);
- duanxian=0x00;
- };
-
-
- }
復制代碼
|
|