給你一個示例參考
無標題.jpg (166.6 KB, 下載次數: 39)
下載附件
2020-4-7 16:39 上傳
- #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; //設置定時器模式
- TH0 = 0x3C; //設置定時初值
- TL0 = 0xB0; //設置定時初值
- TH1 = 0x00; //設置定時初值
- TL1 = 0x00; //設置定時初值
- TR0 = 1; //定時器0開始計時
- TR1 = 1; //定時器1開始計數
- EA = 1; //開總中斷
- ET0 = 1; //開定時器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++)
- {//數據分解
- 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 //定時器0周期50ms
- {
- tim50ms++;
- if(tim50ms==20)//1s時間到
- {
- tim50ms=0;
- TR1 = 0; //關閉定時器1
- num=TH1<<8|TL1;//讀取T1計數值就是外部脈沖頻率(不大于65KHz)
- TH1 = 0x00; //清0
- TL1 = 0x00; //清0
- TR1 = 1; //定時器1開始計數
- flag= 1;
- }
- TH0 = 0x3C; //重新設置定時初值
- TL0 = 0xB0; //重新設置定時初值
- }
復制代碼
|