- /*
- *平台:Keil U4+STC89C52
- *名称:/*
- *平台:Keil U4+STC89C52
- *名称:P1.0输出1HZ方波,送入定时器T0,计的数通过数码管的方式显示出来,
- 最多显示到99,超过以后重新回到0。
- *日期:2017.11.19*/
- #include<reg52.h>
- #define WEI0 P1=0xfd; //定义位选引脚
- #define WEI1 P1=0xfb;
- int m=1;
- unsigned int count;//用来计数
- //unsigned int i,j;
- //定义一个数组,将0~9对应的编码存入数组
- unsigned char n[] = {0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90};
- sbit LED=P1^0;
- void timer0();//函数声明
- /*定时器T0,工作方式2,200微秒发起一次中断*/
- void timer0()
- {
- TMOD=0x02;
- TH0=0x48;//初始化TH0和TL0
- TL0=0x48; //每隔200微秒发起一次中断
- ET0=1;//开启T0中断
- EA=1;//开启总中断
- TR0=1;//打开T0定时器
- count=0;//count初始值为零
- }
- void SMG_display(int a,int b);//声明显示函数
- void SMG_display(int a,int b)
- {
- switch(m)
- {
- case 0x01: P0=0xff;WEI1;P0=n[a];m++; break;
- case 0x02: P0=0xff;WEI0;P0=n[ b];m=1; break;
- default: break;
- }
- }
- void main()
- {
- int a,b;
- LED=1; //关闭LED
- timer0();//
- while(1)
- {
- for(b=0;b<10;b++)
- {
- for(a=0;a<10;)
- {
- SMG_display(a,b);
- if(count<=2500)
- {
- LED=0;
- }
- if(count>2500&&count<=4999)
- {
- LED=1;
- }
- if(count==5000)
- {
- LED=0;
- count=0;
- a++;
- }
- }
- }
- P0=1; //关闭数码管
- }
- }
- void timer() interrupt 1
- {
- count++;//每次中断count+1
- }
复制代码
|