freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機的溫控報警器設計-資料下載頁

2024-11-17 20:58本頁面

【導讀】的,僅憑感覺只能感覺到大概的溫度值,傳統(tǒng)的指針式的溫度計雖然能指示溫度,字讓人們更加直觀的了解自己想知道的溫度到底是多少。隨著世界的科技發(fā)展,對于溫度的測量要求也是越來越嚴格了,但是。溫度的測量不僅僅局限于外出穿衣的指標上了,但是很多時候,在惡劣的環(huán)境中的測量則會受到很大程度的限制,尤其在工業(yè)控制中,在這個時候,溫度測量的自動控制先得尤為重要。單片機avrmega16進行處理控制,并通過lCD1602顯示設定溫度和當前溫度,若當前溫度超過設定溫度,系統(tǒng)將會進行比較簡單的聲光報警。

  

【正文】 變量,實時溫度變量 int t=50。 //全局變量,設定溫度總變量,初始值為 50 int xs=0,ge=0,shi=5,bai=0,sw=0。 //設定溫度變量,分別 xs 是小數(shù)位, ge 是個位, shi 是十位, bai 是百位, sw是轉換位變量 //============================================================= ///函數(shù)聲明 void delay_ms(uint ms)。 void delay_us(uint us)。 void port_init(void)。 void lcd_busy(void)。 void lcd_w_(uchar ,uchar attribc)。 void lcd_w_data(uchar w_data)。 void lcd_init(void)。 void locate(char posx,char posy)。 void display_char(uchar x,uchar y,uchar code)。 void display_str(uchar x,uchar y,uchar *s)。 uint read_18b20_temp(void)。 void write_18b20_(uchar val)。 uchar read_18b20_byte(void)。 36 void init_18b20(void)。 void displayl(uint ddd)。 void ss(void)。 void display_2(uint ddd)。 /**************************************************************/ void delay_us(uint us) //us 級別延時子函數(shù) { if(us==0) { return。 } while(us) { NOP()。 } } void delay_ms(uint ms) //ms 級別子函數(shù) { uint i=0,j=0。 for(i=0。ims。i++) { for(j=0。j(uint)(xtal*1432)。j++)。 } } 37 /**************************************************************/ void port_init(void) //端口初始化子函數(shù) { DDRD=0xf0。 PORTD=0x0C。 DDRC=0xff。 PORTC=0x00。 DDRBamp。=~(1PB2)。 DDRB|=(14)。 PORTB|=(1PB2)|(14)。 //DDRB|=BIT(3)。 //PORTB|=BIT(3)。 } /*****************************************************************/ void locate(char posx,char posy) //1602 位置顯示子函數(shù) { uchar temp。 posyamp。=0x01。 if(posy==1) //判斷 y軸是否為 1 { temp|=0x40。 //y 軸為 1 時,加十六位的 40 } 38 temp|=0x80|posx。 //總位置變量 lcd_w_(temp,0)。 } //字符 lcd1602 顯示子函數(shù) void display_char(uchar x,uchar y,uchar code) { locate(x,y)。 lcd_w_data(code)。 } //字符串 lcd1602 顯示子函數(shù) void display_str(uchar x,uchar y,uchar *s) { while(*s != 39。\039。) //判斷顯示內(nèi)容不為空 { display_char(x,y,*s++)。 //x, y為顯示的位置, *s 是要顯示的子函數(shù) x++。 if((y == 0) amp。amp。 (x = 16)) //當 x軸不夠位置顯示,字符自動換行 { y = 1。 x = 0。 } else if((y == 1) amp。amp。 (x = 16)) { return。 } } 39 } //============================================================== ///=================================================================== void lcd_busy(void) //lcd1602 忙信號子函數(shù) { uchar val。 dataport=0xff。 lcd_rs_0。 lcd_rw_1。 _NOP()。 lcd_en_1。 _NOP()。 _NOP()。 DDRC=0x00。 val=PINC。 //讀 PC端口,將數(shù)據(jù)傳入 val 局部變量 while(valamp。busy) //判斷 lcd1602 為工作中,工作完成繼續(xù)下一條代碼 { val=PINC。 //自讀 PC 端口,等待 lcd1602 返回來的信號為 0,即不忙 } lcd_en_0。 DDRC=0xff。 } //lcd1602 寫命令子函數(shù) void lcd_w_(uchar ,uchar attribc) 40 { if(attribc) //attribc 為是否是否需求 判斷 lcd1602 忙信號 { lcd_busy()。 } lcd_rs_0。 //拉低 rs電平 lcd_rw_0。 //拉低 rw電平 _NOP()。 //空指令,延時 dataport=。 //將要輸入到 1602 的命令放到 PC端口 _NOP()。 lcd_en_1。 //拉高 en電平 _NOP()。 _NOP()。 lcd_en_0。 //拉低 en電平 } //lcd1602 寫數(shù)據(jù)子函數(shù) void lcd_w_data(uchar w_data) { lcd_busy()。 //檢測 lcd 是否處于忙狀態(tài) lcd_rs_1。 //拉高 rs 電平 lcd_rw_0。 //拉低 rw 電平 _NOP()。 //空命令,用于延時 dataport=w_data。 //將要輸入到 lcd1602 的數(shù)據(jù)放到 PC端口 _NOP()。 lcd_en_1。 //拉高 en 電平 _NOP()。_NOP()。 lcd_en_0。 //拉低 en 電平 } 41 //lcd 初始化子函數(shù) void lcd_init(void) { lcd_w_(0x38,0)。 //8 位數(shù)據(jù)傳輸, 2 行顯示, 5*7 字形,不檢測忙信號 delay_ms(5)。 //延時 5ms lcd_w_(0x38,0)。 delay_ms(5)。 lcd_w_(0x38,0)。 delay_ms(5)。 lcd_w_(0x38,1)。 //8 位數(shù)據(jù)傳輸, 2 行顯示, 5*7 字形,檢測忙信號 lcd_w_(0x08,1)。 //關閉顯示,檢測忙信號 lcd_w_(0x01,1)。 //清屏,檢測忙信號 lcd_w_(0x06,1)。 //顯示光標右移設置,檢測忙信號 lcd_w_(0x0c,1)。 //顯示屏打開,光標不顯示,不閃爍,檢測忙信號 delay_ms(5)。 display_str(0,0,realtime T:)。 //第一行要顯示的初始內(nèi)容 delay_ms(5)。 display_str(0,1,set T:)。 //第二行要顯示的初始內(nèi)容 42 delay_ms(5)。 } /*****************************************************************************/ ///主函數(shù) void main(void) { delay_ms(100)。 //100ms 延時 port_init()。 //端口初始化 lcd_init()。 //lcd1602 初始化 led_off。 //關 led 燈 bell_off。 //關蜂鳴器 while(1) { temperture=read_18b20_temp()。 //將從 18b20 讀回來的數(shù)據(jù)傳入全局變量 temperture 中 displayl(temperture)。 //實時溫度顯示子函數(shù) delay_us(100)。 //100us 延時 ss()。 //溫度設定子函數(shù) display_2(t)。 //設定溫度顯示 子函數(shù) if(temperture=t) //當實時溫度比設定溫度高 { 43 bell_on。 //打開蜂鳴器 led_on。 //點亮 led燈 } if(ttemperture) //當實時溫度比設定溫度低 { led_off。 //關閉 led燈 bell_off。 //關閉蜂鳴器 } } } /********************************************************/ void displayl(uint ddd) //實時溫度顯示子函數(shù) { lcd_w_(0X80+11,1)。 //設置 lcd顯示位置是第一行,第 12 個位 delay_ms(5)。 lcd_w_data(display[ddd/1000%10])。 //實時溫度的百位 delay_ms(5)。 lcd_w_(0X80+12,1)。 //設置 lcd顯 示位置是第一行,第 13 個位 delay_ms(5)。 lcd_w_data(display[ddd/100%10])。 //實時溫度的十位 delay_ms(5)。 lcd_w_(0X80+13,1)。 //設置 lcd顯示位置是第一行,第 14 個位 delay_ms(5)。 lcd_w_data(display[ddd/10%10])。 //實時溫度的個位 delay_ms(5)。 44 lcd_w_(0X80+15,1)。 //設置 lcd顯示位置是第一行,第 16 個位 delay_ms(5)。 lcd_w_data(display[ddd%10])。 //實時溫度的小數(shù)后一位 delay_ms(5)。 } /*************************18b20 復位函數(shù)*************************************/ //10us 級別延時子函數(shù) void delay_10us(unsigned char i) { if(i==0) { return 。 } while(i) { NOP()。 //空指令,作用延時 NOP()。 NOP()。 NOP()。 } } //18b20 初始化(復位)子函數(shù) void init_18b20(void) { 45 DQ_OUT。 //設置 PB3 為輸出 DQ_SET。 //拉高 PB3 電平 delay_10us(1)。 //延時 DQ_CLR。 //拉低 PB3 電平 delay
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1