|
閑來無事,鼓搗起18B20測溫,用數(shù)碼管顯示,可惜數(shù)碼管有閃爍。反復(fù)試驗,發(fā)現(xiàn)在定時中斷中設(shè)置標(biāo)志,數(shù)碼管根據(jù)標(biāo)志定時掃描,完全摒棄delay(uint ms)類軟件延時,數(shù)碼管也不閃爍。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (10.62 KB, 下載次數(shù): 107)
下載附件
2020-10-21 16:03 上傳
18B20.jpg (255.78 KB, 下載次數(shù): 117)
下載附件
2020-10-21 09:34 上傳
單片機源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #include"DS18B20.h"
- sfr AUXR = 0x8E; //0000,0000 輔助寄存器
- sbit digt1=P2^0;
- sbit digt2=P2^1;
- sbit digt3=P2^2;
- sbit digt4=P2^3;
- uchar DS18B20_IS_OK;
- uchar delay_5mS_OK;
- uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
- uchar Display_Digit[];
- void delay(uchar ms);
- void Timer0_Init(); //定時器初始化
- void display(); //數(shù)碼管掃描顯示
- void main()
- {
- P0=0XFF;
- P2=0X00;
- delay(100);
- Timer0_Init();
- while(1)
- {
- display(); //顯示
- Read_Temperature(); //讀取溫度
- if(DS18B20_IS_OK)
- Display_Temperature();
- delayus(3);
- }
- }
- void Timer0_Init() //定時器初始化
- {
- AUXR &= 0x7F; //定時器時鐘12T模式,5mS
- TMOD &= 0xF0; //設(shè)置定時器模式
- TMOD |= 0x01; //設(shè)置定時器模式
- TL0 = 0x00; //設(shè)置定時初值
- TH0 = 0xEE; //設(shè)置定時初值
- TR0 = 1; //定時器0開始計時
- ET0 = 1;
- EA = 1;
- }
- void Timer0() interrupt 1 //定時器中斷
- {
- TL0 = 0x00; //重設(shè)定時初值
- TH0 = 0xEE;
- delay_5mS_OK =1;
- }
- void display() //數(shù)碼管掃描
- {
- static uchar stat=0;
- if(delay_5mS_OK==0) //5mS未到,退出
- return;
- switch(stat)
- {
- case 0:
- digt4=1;
- P0=0xff; //先送FF,關(guān)閉顯示,以消除殘影
- P0=table[Display_Digit[0]];
- if(table[Display_Digit[0]]==0x40) //溫度為負(fù)數(shù)
- {
- if(table[Display_Digit[1]]!=0x3f) //十位非“0”
- digt1=0; //第一位顯示符號
- }
- delay(3);
- stat++;
- break;
-
- case 1:
- digt1=1;
- P0=0xff;
- P0=table[Display_Digit[1]];
- if(table[Display_Digit[1]]==0x3f) //十位是“0”,顯示符號
- {
- P0=table[Display_Digit[0]];
- }
- digt2=0;
- delay(3);
- stat++;
- break;
- case 2:
- digt2=1;
- P0=0xff;
- P0=table[Display_Digit[2]]+0X80; //個位加上小數(shù)點
- digt3=0;
- delay(3);
- stat++;
- break;
-
- case 3:
- digt3=1;
- P0=0xff;
- P0=table[Display_Digit[3]]; //小數(shù)位
- digt4=0;
- delay(3);
- stat=0;
- break;
- }
- delay_5mS_OK=0;
- }
- void delay(uchar ms)
- {
- uchar i;
- while(ms--)
- {
- for(i=0;i<120;i++);
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
18B20測溫數(shù)碼管溫度.rar
(38.19 KB, 下載次數(shù): 48)
2020-10-21 09:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|