91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 8KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-07-15
  • 語言: 其他
  • 標簽: 溫度顯示??

資源簡介

DS18B20傳感器應用的完整程序,一個設定按鍵,兩個調整溫度報警值的增、減按鍵(+125℃~-55℃),設定后將報警值存入其EEPROM中,上電后從中讀取報警值。經過使用穩定可靠。

資源截圖

代碼片段和文件信息

/*********************************************************************/
#include?
#include???
#define?uint?unsigned?int
#define?uchar?unsigned?char???//宏定義
#define?DQ???P3_0??????????//定義DS18B20總線
#define?SET??P3_1??????????//定義調整鍵
#define?DEC??P3_2??????????//定義減少鍵
#define?ADD??P3_3??????????//定義增加鍵
#define?alarmh??P3_6????//定義上限報警輸出位
#define?alarml??P3_7????//定義下限報警輸出位
bit?shanshuo_st;???????????//閃爍間隔標志
bit?beep_st;???????????????//蜂鳴器間隔標志
sbit?DIAN?=?P2^7;??????????//小數點
uchar?flag;????????????????//正、負標志位
uchar?x=0;????????????????//計數器
uchar?m;??????????????????//溫度值全局變量
uchar?set_st=0;???????????//狀態標志
signed?char?shangxian;????//上限報警溫度
signed?char?xiaxian;??????//下限報警溫度
uchar?display[4]={0x000x000x000x00};
uchar?code?LEDData[]={0xC00xF90xA40xB00x990x920x820xF80x800x900xff};//定義數碼管????????????????????????????????????????????????????????????????????//顯示字符與數字的對應數組關系
/*****延時子程序*****/
void?Delay(uint?num)
{
?while(?--num?);
}

/*****延時子程序*****/
void?Delay_DS18B20(int?num)
{
??while(num--)?;
}
/*****初始化DS18B20*****/
void?Init_DS18B20(void)
{
??unsigned?char?x=0;
??DQ?=?1;?????????//DQ復位
??Delay_DS18B20(8);????//稍做延時
??DQ?=?0;?????????//單片機將DQ拉低
??Delay_DS18B20(80);???//精確延時,大于480us
??DQ?=?1;?????????//拉高總線
??Delay_DS18B20(14);
??x?=?DQ;???????????//稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
??Delay_DS18B20(20);
}
/*****讀一個字節*****/
unsigned?char?ReadOneChar(void)
{
??unsigned?char?i=0;
??unsigned?char?dat?=?0;
??for?(i=8;i>0;i--)
??{
????DQ?=?0;?????//?給脈沖信號
????dat>>=1;
????DQ?=?1;?????//?給脈沖信號
????if(DQ)
????dat|=0x80;
????Delay_DS18B20(4);
??}
??return(dat);
}
/*****寫一個字節*****/
void?WriteOneChar(unsigned?char?dat)
{
??unsigned?char?i=0;
??for?(i=8;?i>0;?i--)
??{
????DQ?=?0;
????DQ?=?dat&0x01;
????Delay_DS18B20(5);
????DQ?=?1;
????dat>>=1;
??}
}
/*****讀取溫度*****/
unsigned?int?ReadTmp(void)
{
??unsigned?char?a=0;
??unsigned?char?b=0;
??unsigned?int?t=0;
??float?tt=0;
??Init_DS18B20();
??WriteOneChar(0xCC);??//跳過讀序號列號的操作
??WriteOneChar(0x44);??//啟動溫度轉換
??Init_DS18B20();
??WriteOneChar(0xCC);??//跳過讀序號列號的操作
??WriteOneChar(0xBE);??//讀取溫度寄存器
??a=ReadOneChar();?????//讀低8位
??b=ReadOneChar();?????//讀高8位
??if(b>127)?????????????//?當高8位的第8位為1時,就是負值
?{
???a=(~a)+1;???????????//?當為負值的時候,低8位的操作(負數為補碼,按位取反再加1)
???if?((~a)?>=?0xff)?????//?<-127度?,則高8位進位
???{
?????b=(~b)+1;
???}
???else???????????????????//?不小于-127度時,高8位取反
???{???????????????????????????
????b=~b; ????
???}??
???flag=1;??????????????????//表示為負值
?}
??else
??flag=0;???????????????????//表示為正值
??
??t=b;
??t<<=8;
??t=t|a;
??tt=t*0.0625;
??t=tt*10;?????
??return(t);
}

/*****初始化定時器0*****/
void?InitTimer(void)
{
??TMOD=0x1;
??TH0=0x3c;
??TL0=0xb0;?????//50ms(晶振12M)
}
/*****定時器0中斷服務程序*****/
void?timer0(void)?interrupt?1
{
?TH0=0x3c;
?TL0=0xb0;
?x++;
}
/*****外部中斷0服務程序*****/
void?int0(void)?interrupt?0
{
?EX0=0;??????//關外部中斷0
?if(DEC==0&&set_st==1)
?{

評論

共有 條評論