|
5黑幣
- 頻率計(jì),利用delay函數(shù)進(jìn)行數(shù)碼管掃描,但老師要求我用定時(shí)器(T2)中斷來(lái)做數(shù)碼管掃描,該怎么寫(xiě)呢?求大神指點(diǎn)。
復(fù)制代碼
- #include <reg52.h>
- #include<stdio.h>
- #include<ctype.h>
- #define uint unsigned int
- unsigned char num=0;
- sbit k1=P3^7;
- sbit k3=P3^6;
- code unsigned char TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- unsigned long x;
- char str[19];
- int i=0;
- unsigned char timecount;
- unsigned int T0count;
- void inial();
- void anjian();
- void printf_1();
- void delay();
- int printf_time;
- void inial()
- {
- TMOD |= 0x05;//計(jì)數(shù)器T0
- TH0 = 0;
- TL0 = 0;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
-
- RCAP2H=0x0B;//定時(shí)器T2
- RCAP2L=0xDC;
-
- ET2=1;
- TR2=1;
-
- TMOD|=0x20;//串口配置
- TH1=0xf3;
- TL1=0xf3;
- TR1=1;
- PCON|=0x80;
- SCON=0X50;
- ES=1;
- }
- void delay( )
- {
- int y=300;
- while(y--);
- }
- void display()
- {
- unsigned char ge,shi,bai,qian,wan,shiwan;//定義各個(gè)位
- shiwan=x/100000;//十萬(wàn)
- wan=x%100000/10000;//萬(wàn)位
- qian=x%10000/1000;//千位
- bai=x%1000/100;//百位
- shi=x%100/10;//十位
- ge=x%10;//個(gè)位
-
-
復(fù)制代碼
- for(i=0;i<6;i++) //顯示
- {
- switch(i)
- {
- case 0:P2=0xFE,P0=TAB[ge];break;
- case 1:P2=0xFd,P0=TAB[shi];break;
- case 2:P2=0xFb,P0=TAB[bai];break;
- case 3:P2=0xF7,P0=TAB[qian];break;
- case 4:P2=0xeF,P0=TAB[wan];break;
- case 5:P2=0xdf,P0=TAB[shiwan];break;
-
- }
- delay();
- P0=0x00;
- }
- }
-
- void anjian()
- {
- if(k1==0)
- {
- delay();
- if(k1==0)
- {
- display();
-
- }
- }
- }
- void main()
- {
- inial();
-
- while(1)
- {
-
- anjian();
- printf_1();
-
- }
-
- }
- void t0(void) interrupt 1
- {
- T0count++;
- }
- void t2(void)interrupt 5
- {
- TF2=0;
- timecount++;
-
- printf_time++;
- if(timecount>=16)//定時(shí)1S
- {
- x=T0count*65536+TH0*256+TL0;
-
- timecount=0;
- T0count=0;
- TH0 = 0;
- TL0 = 0;
- TR0 = 1;
- }
-
- }
- void ser() interrupt 4
- {
- RI=0;
-
- }
- void printf_1()//串口輸出
- {
- if(printf_time>=48)
- {
- sprintf(str,"%06fHz\n",x);
- for(i=0;i<9;i++)
- {
- SBUF=str[i];
- while(!TI);
- TI=0;
- }
- printf_time=0;
- }
- }
復(fù)制代碼
|
|