




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、/ 液晶顯示溫度#include "AT89X52.H"#define Ddata P0sbit RS=P2”/ 命令數據控制端sbit RW=P2A6;/ 讀寫選擇端sbit LCDE=P2A5;/ 液晶使能端sbit DQ=P2A0;/ds18b20與單片機連接口4 頁#define uchar unsigned char #define uint unsigned int/ 定義初值unsigned char hour=0,min=0,sec=0;unsigned int count=0;unsigned char line116=" temp:"
2、/16 個字符unsigned char line216=" time:00:00:00"/16 個字符unsigned char tab='0','1','2','3','4','5','6','7','8','9'/ 數組uchar data disdata5;uint tvalue;/ 溫度值uchar tflag;/ 溫度正負標志void time();/*lcd1602 程序 */延時 1 毫秒(不夠精確的
3、)void delay1ms(unsigned int ms)/unsigned int i,j;for(i=0;i<ms;i+)for(j=0;j<110;j+);void delay5ms()/ 延時 5 毫秒(不夠精確的) unsigned int i;for (i=0;i<1000;i+);void delay50us()register int i;for (i=0;i<20;i+);void delay()unsigned char m,n;for(m=255;m>0;m-) for(n=255;n>0;n-);void wr_com(unsig
4、ned char comm)/* 寫控制字符程序E=1 RS=0RW=0*/LCDE=0;/ 使能端RS=0;/*rs寄存器選擇輸入端,當 RS=0;當進行寫模塊操作,指向指令寄存器。RW=0;/* 當 RS=1 ,無論是讀操作還是寫操作,都是指向數據寄存器。LCDE=1;Ddata=comm;RS=0;RW=0;LCDE=0;void wr_data(unsigned char dat)/* 當前位置寫字符子程序:E=1 RS=1 RW=0LCDE=0;RS=0;/*rs寄存器選擇輸入端,當 RS=0;當進行寫模塊操作,指向指令寄存器。RW=0;/* 當 RS=1 ,無論是讀操作還是寫操作,
5、都是指向數據寄存器。RS=1;RW=0;LCDE=1;Ddata=dat; / 將 dat 賦給 P0 口LCDE=0;RS=0;RW=0;unsigned char busycheck()/* 忙狀態(tài)檢查*/unsigned char i;LCDE=0;RS=0;RW=0;RS=0;RW=1;LCDE=1;i=Ddata;LCDE=0;return(i);void init()/* 初始化程序,必須按照產品的資料介紹的過程進行*/wr_com(0x38);/* 顯示模式設置必須三次,不用檢測忙信號delay5ms();wr_com(0x38);delay5ms();wr_com(0x38);
6、delay5ms();wr_com(0x01);/* 清屏 *delay5ms();busycheck();wr_com(0x08);delay5ms();busycheck();delay5ms();wr_com(0x06);/* 光標移動設置,寫一個字符后地址指針加1*delay5ms();busycheck();delay50us();wr_com(0x38);/* 顯示模式設置*delay50us();busycheck();delay50us();wr_com(0x0c); /* 顯示開,不顯示光標* delay50us();busycheck();delay50us();5頁wr_
7、com(0x40);/set cgram addressdelay50us();delay50us();/* 這些延時可用可不用*/void display() unsigned char i;wr_com(0x80); /set ram addressdelay50us();busycheck();delay50us();for(i=0;i<6;i+)wr_data(line1i); /display ( 6 個字符)delay50us();busycheck();busycheck();delay50us();wr_com(0xc0);/0xc0=0x80+0x40delay50us
8、();busycheck();delay50us();for(i=0;i<16;i+)wr_data(line2i); /displaydelay50us();busycheck();6 頁,*溫度傳感器ds1820 程序*/void delay_18B20(unsigned int i)/ 延時 1 微秒while(i-);void ds1820rst()/*ds1820 復位 */ unsigned char x=0;DQ = 1;/DQ 復位delay_18B20(4);/ 延時DQ = 0;/DQ 拉低delay_18B20(100); / 精確延時大于480usDQ = 1;/
9、拉高delay_18B20(40);uchar ds1820rd()/* 讀數據 */ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)/ 讀一個字節(jié)的數據函數 DQ = 0; / 給脈沖信號dat>>=1;DQ = 1; / 給脈沖信號if(DQ)dat|=0x80;/等價于 dat = dat | 0x80,dat 和 0x80 做“或”的運算,結果是最高位置1,其它位保持不變。delay_18B20(10);8頁return(dat);void ds1820wr(uchar wdata)/*寫數據*/uns
10、igned char i=0;for (i=8; i>0; i-) DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;/右移一位wdata>>=1;read_temp()/* 讀取溫度值并轉換*/uchar a,b;ds1820rst();/ds1802/ 初始化程序14 頁ds1820wr(0xcc);/* ds1820wr(0x44);* ds1820rst();ds1820wr(0xcc);/* ds1820wr(0xbe);/* a=ds1820rd();b=ds1820rd(); tvalue=b;跳過讀序列號啟動溫
11、度轉換跳過讀序列號讀取溫度*/*/*/*/讀低八位/讀高八位tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff) tflag=0;else/“ &是邏輯與“ |是邏輯或if (dat & 0x01 ):不管 dat 是什么數和 0x01(00000001)做了 與"的 運算后,最低位保持不變,其它位均為0.如果dat的最低位為1 , 則表達式為真,就會執(zhí)行if語句中的內容。如果dat最低位為0, 則表達式為假,不執(zhí)行if語句,執(zhí)行if語句后的下一條語句。dat |= 0x80 :等價于 dat = dat | 0x
12、80,dat 和 0x80 做 或”的運算, 意思是最高位置1 ,其它位保持不變。具體的可以去參考一下C語言的相關語法tvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/ 溫度值擴大10 倍,精確到1 位小數return(tvalue);/*/void ds1820disp()/ 溫度值顯示 uchar flagdat;disdata0=tvalue/1000+0x30;/ 百位數disdata1=tvalue%1000/100+0x30;/ 十位數disdata2=tvalue%100/10+0x30;/ 個位數disdata3=tvalue%10+
13、0x30;/ 小數位if(tflag=0)flagdat=0x20;/ 正溫度不顯示符號elseflagdat=0x2d;/ 負溫度顯示負號:-if(disdata0=0x30)disdata0=0x20;/ 如果百位為0,不顯示if(disdata1=0x30)disdata1=0x20;/ 如果百位為0,十位為0也不顯示wr_com(0x88);wr_data(flagdat);/ 顯示符號位wr_com(0x89);wr_data(disdata0);/ 顯示百位 wr_com(0x8a);wr_data(disdata1);/ 顯示十位 wr_com(0x8b);wr_data(dis
14、data2);/ 顯示個位wr_com(0x8c);wr_data(0x2e);/ 顯示小數點wr_com(0x8d);wr_data(disdata3);/ 顯示小數位void main()TMOD=0X01;EA=1;ET0=1;TR0=1;TH0=(65536-4995)/256;TL0=(65536-4995)%256;init();while(1)read_temp();/ 讀取溫度ds1820disp();/ 顯示time(); / 時間程序display();/ 時間顯示程序void t0(void)interrupt 1 using 0TH0=(65536-4995)/256;TL0=(65536-4995)%256;count+;if(count=200)count=0;sec+;if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=24)hour=0;void time()line215=tabsec%10;line214=tabsec/10;line212=ta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房屋抵押權設立合同
- 教育信息化解決方案項目投資合同
- 物流配送損害免責聲明
- 教育培訓服務責任豁免協議
- 文化產業(yè)投資開發(fā)協議書
- 攝影工作室拍攝作品著作權歸屬聲明
- 農業(yè)現代化高效節(jié)水灌溉技術推廣方案
- 企業(yè)產品質量危機處理預案
- 高考文言文雙文本專練:《史記》《論語》
- 近期項目成果回顧與反思
- 小兒白血病飲食
- 2024年杭州科技職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- JGJ79-2012 建筑地基處理技術規(guī)范
- LIMS實驗室信息管理系統(tǒng)
- 柱塞泵工作原理動畫演示
- 數字法學原理
- 玉米收購可行性分析報告
- 最全醫(yī)院應急預案匯編目錄
- 駕駛員心理健康教育培訓課件
- 別墅的價格評估報告
- 滬科版七年級數學下冊 第六章 實數 單元測試卷
評論
0/150
提交評論