|
- #include <reg51.h>
- #include <intrins.h>
- #define DataPort P1
- unsigned char code table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- sbit SMG1=P3^4;//第一个数码管的位选
- sbit SMG2=P3^5;//第2个数码管的位选
- sbit SMG3=P3^6;//第3个数码管的位选
- sbit SMG4=P3^7;//第4个数码管的位选
- void delayms(unsigned int t) //t ms
- {
- unsigned int num,count;
- for(num=t;num>0;num--)
- for(count=200;count>0;count--)
- {
- _nop_();
- }
- }
- //display(1234);
- void display(unsigned int num)
- {
- DataPort=table[num/1000];
- SMG1=1; //第一个亮
- delayms(5);
- SMG1=0;
- DataPort=table[num%1000/100];
- SMG2=1; //第二个亮
- delayms(5);
- SMG2=0;
- DataPort=table[num%100/10];
- SMG3=1; //第3个亮
- delayms(5);
- SMG3=0;
- DataPort=table[num%10];
- SMG4=1; //第4个亮
- delayms(5);
- SMG4=0;
- }
- void timer0_init()
- {
- EA=1;//打开总中断
- ET0=1;//打开定时器0的中断
- TMOD|=0x01;//设置成工作方式1 16位定时器
- TH0=(65535-10000)/256; //设置初值
- TL0=(65535-10000)%256;
- TR0=1;//打开定时器
- }
- unsigned char count;
- void main()
- {
- SMG1=SMG2=SMG3=SMG4=0;//数码管的
- timer0_init();
- while (1)
- {
- display(count);
- }
- }
- //中断服务函数
- void timer0_int() interrupt 1
- {
- static unsigned char num;
- TH0=(65535-10000)/256; //设置初值
- TL0=(65535-10000)%256;
- num++;
- if (num==100)
- {
- num=0;
- count++;
- if(count==60)
- {
- count=0;
- }
- }
- }
复制代码 |
|