|
|
給你一個(gè)示例參考
- #include <STC89C5xRC.H>
- unsigned char code table[]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- unsigned char code wela[]={
- 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- unsigned char data dis_buf[6];
- unsigned int num,count;
- unsigned char tim50ms,i,j;
- bit flag=0;
- void Timer0Init(void) //50毫秒@12.000MHz
- {
- TMOD= 0x51; //設(shè)置定時(shí)器模式
- TH0 = 0x3C; //設(shè)置定時(shí)初值
- TL0 = 0xB0; //設(shè)置定時(shí)初值
- TH1 = 0x00; //設(shè)置定時(shí)初值
- TL1 = 0x00; //設(shè)置定時(shí)初值
- TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
- TR1 = 1; //定時(shí)器1開始計(jì)數(shù)
- EA = 1; //開總中斷
- ET0 = 1; //開定時(shí)器0中斷
- }
- void main()
- {
- Timer0Init();
- for(i=0;i<6;i++)
- {//顯示緩存初始為0
- dis_buf[i]=table[0];
- }
- while(1)
- {
- if(flag)
- {
- flag=0;
- count=num;
- for(i=0;i<5;i++)
- {//數(shù)據(jù)分解
- dis_buf[5-i]=table[count%10];//由低位到高位保存到顯示緩存
- count/=10;
- }
- }
- P0=0x00;//消隱
- P2=wela[j+1];//送段碼
- P0=dis_buf[j+1];//送位碼
- j++;
- j%=5;
- }
- }
- void timer0() interrupt 1 //定時(shí)器0周期50ms
- {
- tim50ms++;
- if(tim50ms==20)//1s時(shí)間到
- {
- tim50ms=0;
- TR1 = 0; //關(guān)閉定時(shí)器1
- num=TH1<<8|TL1;//讀取T1計(jì)數(shù)值就是外部脈沖頻率(不大于65KHz)
- TH1 = 0x00; //清0
- TL1 = 0x00; //清0
- TR1 = 1; //定時(shí)器1開始計(jì)數(shù)
- flag= 1;
- }
- TH0 = 0x3C; //重新設(shè)置定時(shí)初值
- TL0 = 0xB0; //重新設(shè)置定時(shí)初值
- }
復(fù)制代碼
|
|