這張帖子是基于STC15W4K系列的溫控顯示設計;
采用lcd1602顯示和ds18b20溫控裝置的實用設計;
如果對您有幫助,很感謝您的黑幣;
0.png (583.63 KB, 下載次數: 89)
下載附件
2017-7-22 23:04 上傳
數字溫度計實驗步驟:
1、按照正確接線方式將DS18B20芯片插到J13三芯單排母端子上,J13端口定義在開發板背面VDD/P36/GND/GND;
2、按照正確方向把LCD1602液晶屏插到開發板J7端子上;
3、MINI USB連接線給開發板通電下載程序,下載軟件中內部IRC時鐘選擇11.0592MHZ;
4、下載程序后,LCD1602屏會顯示18B20檢測到的實時溫度值。
備注:如果使用的DS18B20傳感器是帶延長線的,那可以將傳感器供電接到J19的VCC/GND上,信號線與J25端子的P36連接。
單片機源程序如下:
- /****************************************Copyright (c)****************************************************
- **
- **
- **
- **--------------File Info---------------------------------------------------------------------------------
- ** File name:
- ** Last modified Date:
- ** Last Version:
- ** Descriptions:
- **--------------------------------------------------------------------------------------------------------
- ** Created by: FiYu
- ** Created date: 2016-9-8
- ** Version: 1.0
- ** Descriptions: 數字溫度計實驗
- **--------------------------------------------------------------------------------------------------------
- ** Modified by: FiYu
- ** Modified date:
- ** Version:
- ** Descriptions:
- ** Rechecked by:
- **********************************************************************************************************/
- /****-----請閱讀ReadMe.txt進行實驗-----***********/
- #include "ds18b20.h"
- #define uint unsigned int
- #define uchar unsigned char
- #define LOW 0
- #define HIGH 1
- #define LowTemper 5
- #define HighTemper 30
- /**********************
- 引腳別名定義
- ***********************/
- sbit rs=P2^4; //1602的數據/指令選擇控制線
- sbit rw=P2^3; //1602的讀寫控制線
- sbit en=P2^1; //1602的使能控制線
-
- sbit LED_R=P1^7; //紅色LED用IO口P17
- sbit LED_B=P1^6; //藍色LED用IO口P16
- uchar code table1[]="Current Temper: "; //要顯示的內容1放入數組table
- uchar code table2[]="Normal "; //要顯示的內容2放入數組table
- uchar code table3[]="Too low "; //要顯示的內容3放入數組table
- uchar code table4[]="Too high"; //要顯示的內容4放入數組table
- uchar code table5[]="-"; //要顯示的內容5放入數組table
- uchar code table6[]=" "; //要顯示的內容6放入數組table
- /**************************************
- 功能描述:LCD1602寫命令函數
- 入口參數:uchar com
- 返回值:無
- ***************************************/
- void lcd_wcom(uchar com)
- {
- rs=0; //選擇指令寄存器
- rw=0; //選擇寫
- P0=com; //把命令字送入P0
- delay_ms(1); //延時一小會兒,讓1602準備接收數據
- en=1; //使能線電平變化,命令送入1602的8位數據口
- en=0;
- }
- /**************************************
- 功能描述:LCD1602寫數據函數
- 入口參數:uchar dat
- 返回值:無
- ***************************************/
- void lcd_wdat(uchar dat)
- {
- rs=1; //選擇數據寄存器
- rw=0; //選擇寫
- P0=dat; //把要顯示的數據送入P0
- delay_ms(1); //延時一小會兒,讓1602準備接收數據
- en=1; //使能線電平變化,數據送入1602的8位數據口
- en=0;
- }
- /**************************************
- 功能描述:LCD1602初始化函數
- 入口參數:無
- 返回值:無
- ***************************************/
- void lcd_init()
- {
- lcd_wcom(0x38); //8位數據,雙列,5*7字形
- lcd_wcom(0x0c); //開啟顯示屏,關光標,光標不閃爍
- lcd_wcom(0x06); //顯示地址遞增,即寫一個數據后,顯示位置右移一位
- lcd_wcom(0x01); //清屏
- }
- /***************************************************************************
- * 描 述 : 主函數
- * 入 參 : 無
- * 返回值 : 無
- **************************************************************************/
- int main()
- {
- unsigned char i=0,j=0,m=0,n=0,k=0;
- unsigned char strTemp[6],uTemp,Sign;
- float fTemp;
-
- /////////////////////////////////////////////////
- //注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關的IO口均為
- // 高阻態,需將這些口設置為準雙向口或強推挽模式方可正常使用
- //相關IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
- // P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
- /////////////////////////////////////////////////
- P0M1 = 0; P0M0 = 0; //設置P0.0~P0.7為準雙向口
- P1M1 = 0; P1M0 = 0; //設置P1.0~P1.7為準雙向口
- P2M1 = 0; P2M0 = 0; //設置P2.0~P2.7為準雙向口
- P3M1 = 0; P3M0 = 0; //設置P3.0~P3.7為準雙向口
- P4M1 = 0; P4M0 = 0; //設置P4.0~P4.7為準雙向口
- P5M1 = 0; P5M0 = 0; //設置P5.0~P5.7為準雙向口
-
- lcd_init(); //液晶初始化
- lcd_wcom(0x80); //顯示地址設為80H(即00H,)上排第一位
- for(i=0;i<16;i++) //將table1[]中的數據依次寫入1602顯示
- {
- lcd_wdat(table1[i]);
- delay_ms(20);
- }
-
- while(1)
- {
- memset(strTemp, 0, sizeof(strTemp)); //strTemp數組清零
-
- fTemp = floatReadDs18B20(); //溫度讀取函數,帶1位小數位
- sprintf(strTemp, "%.01f", fTemp); //浮點數轉成字符串
-
- uTemp=(uchar)fTemp;
- if(uTemp<10)
- {
- lcd_wcom(0x80+0x45); //重新設定顯示地址
- lcd_wdat(table6[0]); //將table6[]中的數據依次寫入1602顯示
- delay_ms(20);
- Sign=3;
- }
- else
- {
- Sign=4;
- }
-
- if(ReadTempFlag)
- {
- lcd_wcom(0x80+0x41); //重新設定顯示地址
- lcd_wdat(table5[0]);
- delay_ms(20);
- lcd_wcom(0x80+0x42);
- for(j=0;j<Sign;j++) //將strTemp[]中的數據依次寫入1602顯示
- {
- lcd_wdat(strTemp[j]);
- delay_ms(20);
- }
- }
- else
- {
- lcd_wcom(0x80+0x41); //重新設定顯示地址
- lcd_wdat(table6[0]);
- delay_ms(20);
- lcd_wcom(0x80+0x42); //重新設定顯示地址
- for(j=0;j<Sign;j++) //將strTemp[]中的數據依次寫入1602顯示
- {
- lcd_wdat(strTemp[j]);
- delay_ms(20);
- }
- }
-
- lcd_wcom(0x80+0x48); //重新設定顯示地址
- if(ReadTempFlag||(uTemp<LowTemper)) //溫度過低時,藍燈較快閃爍(間隔60mS)
- {
- for(m=0;m<8;m++) //將table3[]中的數據依次寫入1602顯示
- {
- lcd_wdat(table3[m]);
- delay_ms(20);
- }
- LED_B=LOW;
- delay_ms(60);
- LED_B=HIGH;
- delay_ms(60);
- }
- else if(uTemp>HighTemper) //溫度過高時,紅燈較快閃爍(間隔60mS)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (37.94 KB, 下載次數: 82)
下載附件
2017-7-22 23:06 上傳
所有資料51hei提供下載:
項目實戰2 - 數字溫度計(DS18B20正負溫顯示).rar
(1.08 MB, 下載次數: 70)
2017-7-22 18:41 上傳
點擊文件名下載附件
實用項目 下載積分: 黑幣 -5
|