久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3123|回復: 0
打印 上一主題 下一主題
收起左側

求大神幫忙解決個問題 關于單片機溫度巡檢的

[復制鏈接]
跳轉到指定樓層
樓主
ID:48555 發表于 2013-4-30 21:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include #include #define uchar unsigned char sbit RS=P3^5; //定義LCD端口 sbit RW=P3^6; sbit E=P3^7; sbit DQ=P3^4; //定義單總線端口 uchar LCD_3,LCD_2,LCD_1,LCD_0; uchar ds18b20_romA[8]={0x8e,0x00,0x00,0x00,0xb8,0xc5,0x30,0x28}; //四個DS18B20的64位ROM地址 uchar ds18b20_romB[8]={0x52,0x00,0x00,0x00,0xb8,0xc5,0x34,0x28}; uchar ds18b20_romC[8]={0x65,0x00,0x00,0x00,0xb8,0xc5,0x35,0x28}; uchar ds18b20_romD[8]={0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28}; uchar code LCDData[] ="0123456789"; uchar code dot_tab[] ="0112334456678899"; uchar first_line[16]="A:000.0 B:000.0"; //LCD第一行顯示緩存數組 uchar second_line[16]="C:000.0 D:000.0"; //LCD第二行顯示緩存數組 //************************************ //延時程序 //************************************ void delay(unsigned int N) { unsigned int i; for(i=0;i>i; temp=temp&0x01; write_bit(temp); delay(5); } } //************************************* //64位的ROM序列號匹配 //************************************* bit match_rom(uchar *rom) { uchar i; ds18b20_init(); write_byte(0x55); for(i=8;i>0;i--) { write_byte(*(rom+i-1)); } return 1; } //************************************ //從ds18b20中讀出64位序列號 //************************************ /*uchar * read_rom(void) { uchar rom[8],i; ds18b20_init(); write_byte(0x33); for(i=8;i>0;i--) { rom[i-1]=read_byte(); } return &rom[0]; }*/ //************************************* //將64位序列號顯示在LCD上顯示出來 //************************************* /*void print_char(uchar a) { if(a>=0&&a<=9) write_data(a+0x30); else if(a>=0x0a &&a<= 0x0f) write_data(a+0x37); }*/ //************************************* //溫度轉換,將從ds18b20中讀出來的溫度值 //轉化成十進制的溫度值,并存放顯示緩存 //************************************* void convert_T(uchar temp_data_h,uchar temp_data_l) { uchar temp; if((temp_data_h&0xf0)==0xf0) //如果溫度寄存器里的高位為1, { //則溫度為負 temp_data_l=~temp_data_l; //負溫度將補碼轉成二進制, if(temp_data_l==0xff) //取反再加1 { temp_data_l=temp_data_l+0x01; temp_data_h=~temp_data_h; temp_data_h=temp_data_h+0x01; } else { temp_data_l=temp_data_l+0x01; temp_data_h=~temp_data_h; } LCD_0=dot_tab[temp_data_l&0x0f]; //查表得小數位的值 temp=((temp_data_l&0xf0)>>4)|((temp_data_h&0x0f)<<4); LCD_3='-'; //顯示"-"號 LCD_2=LCDData[(temp%100)/10]; //查表得負溫度溫度十位 LCD_1=LCDData[(temp%100)%10]; //查表得負溫度個位 } else //溫度為正 { LCD_0=dot_tab[temp_data_l&0x0f]; //查表得小數位的值 temp=((temp_data_l&0xf0)>>4)|((temp_data_h&0x0f)<<4); LCD_3=LCDData[temp/100]; //查表得溫度百位 LCD_2=LCDData[(temp%100)/10]; //查表得溫度十位 LCD_1=LCDData[(temp%100)%10]; //查表得溫度個位 } } void display(void) { uchar i; write_command(0x80); for(i=0;i<16;i++) { write_data(first_line); } write_command(0xc0); for(i=0;i<16;i++) { write_data(second_line); } } void main(void) { uchar temp_data_l,temp_data_h; /*uchar *ds18b20_rom;*/ init_lcd1602(); /*while(1) { uchar i; ds18b20_rom=read_rom(); //讀序列號 write_command(0x80); for(i=0;i<8;i++) { ds18b20_romA=*ds18b20_rom; ds18b20_rom++; } write_command(0x80); for(i=0;i<8;i++) //顯示序列號 { print_char(ds18b20_romA/16); print_char(ds18b20_romA%16); } }*/ while(1) { ds18b20_init(); write_byte(0xcc); write_byte(0x44); //啟動溫度轉換 delay(700); match_rom(ds18b20_romA); //匹配第一路 write_byte(0xbe); //讀溫度 temp_data_l= read_byte(); //溫度低8位 temp_data_h = read_byte(); //溫度高8位 convert_T(temp_data_h,temp_data_l); first_line[2]=LCD_3; //溫度轉換后的各位 first_line[3]=LCD_2; //分別存入顯示緩存數組中 first_line[4]=LCD_1; first_line[6]=LCD_0; match_rom(ds18b20_romB); //匹配第二路 write_byte(0xbe); //讀溫度 temp_data_l= read_byte(); //溫度低8位 temp_data_h = read_byte(); //溫度高8位 convert_T(temp_data_h,temp_data_l); first_line[10]=LCD_3; //溫度轉換后的各位 first_line[11]=LCD_2; //分別存入顯示緩存數組中 first_line[12]=LCD_1; first_line[14]=LCD_0; display(); match_rom(ds18b20_romC); //匹配第三路 write_byte(0xbe); //讀溫度 temp_data_l= read_byte(); //溫度低8位 temp_data_h = read_byte(); //溫度高8位 convert_T(temp_data_h,temp_data_l); second_line[2]=LCD_3; //溫度轉換后的各位 second_line[3]=LCD_2; //分別存入顯示緩存數組中 second_line[4]=LCD_1; second_line[6]=LCD_0; match_rom(ds18b20_romD); //匹配第四路 write_byte(0xbe); //讀溫度 temp_data_l= read_byte(); //溫度低8位 temp_data_h = read_byte(); //溫度高8位 convert_T(temp_data_h,temp_data_l); second_line[10]=LCD_3; //溫度轉換后的各位 second_line[11]=LCD_2; //分別存入顯示緩存數組中 second_line[12]=LCD_1; second_line[14]=LCD_0; display(); } } 這段程序想加個報警系統 初學者不知道從何下手 希望各位能指導下 報警由一個揚聲器和2個LED燈組成
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97影院2| 欧美a区| 欧美一级片久久 | 日韩电影中文字幕 | 亚洲国产精品久久久久婷婷老年 | 国产精品爱久久久久久久 | 91看国产 | 毛片区 | 特黄色毛片 | 成人福利网| 国产精品久久久久久亚洲调教 | 亚洲一区二区三区视频 | 在线观看视频福利 | 亚洲精品久久久久久久久久久久久 | 黄色大片在线免费观看 | 最新中文字幕久久 | 亚洲一区在线日韩在线深爱 | 不卡视频一区二区三区 | 亚洲精品在线视频 | 久久综合狠狠综合久久综合88 | 欧美电影网| 爱爱免费视频 | 中文字幕av网 | 国产91在线精品 | 成人aaa视频 | 日韩免费在线观看视频 | 国产精品亚洲一区二区三区在线 | 日韩福利 | 久久精彩视频 | 日韩av在线不卡 | 精品国产欧美在线 | 色男人天堂av | 久久久免费| 欧美精| 色婷综合网 | 亚洲精品一区二区 | 国产精品成人69xxx免费视频 | 欧美二区在线 | 日本a级大片 | 婷婷综合| 成人在线视频观看 |