本帖最后由 liaobiaoxing 于 2009-8-25 22:29 编辑
用的6M的晶震,P0口为数码管的段控位,P2口为数码管的位控位,程序如下:
- #include<reg52.h>
- unsigned int count=0,sec=0,min=0,hour=0,x;
- unsigned char show[10]={0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09}; //从0到10对应的段控位
- delay(x) //延时程序
- { unsigned int a,b;
- for(a=0;a<=x;a++)
- for(b=0;b<=10;b++);
- }
- void display() //负责显示
- { P2=0X01;
- P0=show[sec%10];
- delay(5);
- P2=0X02;
- P0=show[sec/10];
- delay(5);
- P2=0x04;
- P0=0xfd;
- delay(5);
- P2=0x08;
- P0=show[min%10];
- delay(5);
- P2=0x10;
- P0=show[min/10];
- delay(5);
- P2=0x20;
- P0=0xfd;
- delay(5);
- P2=0x40;
- P0=show[hour%10];
- delay(5);
- P2=0x80;
- P0=show[hour/10];
- delay(5);
- }
- void time_init() //定时器中断0初始化,10MS定时。
- { EA=1;
- ET0=1;
- TMOD=0X01;
- TH0=0xec;
- TL0=0x78;
- TR0=1;
- }
- void time_int() interrupt 1 //中断响应程序
- {
-
- TH0=0xec;
- TL0=0x78;
- count++;
- TF0=0;
- }
- void main()
- {
- time_init();
-
- while(1)
- {
- if(count==100); //判断秒,分,时进位。
- { count=0;
- sec++;
- if(sec==60);
- { sec=0;
- min++;
- if(min==60);
- { min=0;
- hour++;
- if(hour==24)
- { hour=0;
- }
- }
-
- }
- }
- display();
- }
- }
初学单片机,还真找不出来错在哪了。希望各位大大能帮我看一下,不胜感激。该程序的主要症状在于,开始后,小时那一个段以飞快的速度走0~24循环。分钟和秒钟无变化,难道是因为定时出了问题?
|