STM32溫度報(bào)警傳感器代碼(共19頁)_第1頁
STM32溫度報(bào)警傳感器代碼(共19頁)_第2頁
STM32溫度報(bào)警傳感器代碼(共19頁)_第3頁
STM32溫度報(bào)警傳感器代碼(共19頁)_第4頁
STM32溫度報(bào)警傳感器代碼(共19頁)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上主函數(shù) 、main.c#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"#include "ds18b20.h"#include "key.h"#include <string.h>#include <stdio.h>#include <stdlib.h>int temp_low

2、 = 22;int temp_high = 32;int zanshi_low=0;int zanshi_hign=0;void TIM3_Int_Init(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /時(shí)鐘使能TIM_TimeBaseStructure.TIM_Period = arr; /設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器

3、周期的值 計(jì)數(shù)到5000為500msTIM_TimeBaseStructure.TIM_Prescaler =psc; /設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值 10Khz的計(jì)數(shù)頻率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /設(shè)置時(shí)鐘分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上計(jì)數(shù)模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /根據(jù)TIM_TimeBaseIn

4、itStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位 TIM_ITConfig( /使能或者失能指定的TIM中斷TIM3, /TIM2TIM_IT_Update ,ENABLE /使能);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; /TIM3中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /先占優(yōu)先級(jí)0級(jí)NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /從優(yōu)先級(jí)3級(jí)NVIC_InitStructure.NVIC_I

5、RQChannelCmd = ENABLE; /IRQ通道被使能NVIC_Init(&NVIC_InitStructure); /根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器TIM_Cmd(TIM3, ENABLE); /使能TIMx外設(shè) u8 flag=0; int main(void) u8 t = 0; u8 shuzu20;u8 keyvalue=0;u8 gaibianshui=0; short temperature; delay_init(); /延時(shí)函數(shù)初始化 uart_init(9600); /串口初始化為9600NVIC_PriorityG

6、roupConfig(NVIC_PriorityGroup_2);/ 設(shè)置中斷優(yōu)先級(jí)分組2 LED_Init(); /初始化與LED連接的硬件接口TIM3_Int_Init(9999,7199);/10Khz的計(jì)數(shù)頻率,計(jì)數(shù)到5000為500ms LCD_Init(); POINT_COLOR = RED; /設(shè)置字體為紅色 LCD_ShowString(0, 50, 200, 16, 16, "STM32 test");LCD_ShowString(0, 70, 200, 16, 16, "name: zhang qi qi "); /LCD_Show

7、String(0,90,200,16,16,"Max 32 C Min 26 C"); memset(shuzu, 0, 20); sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low); LCD_ShowString(0, 90, 200, 16, 16, shuzu); while (DS18B20_Init() /DS18B20初始化 LCD_ShowString(0, 130, 200, 16, 16, "DS18B20 Error"); delay_m

8、s(200); LCD_Fill(0, 130, 239, 130 + 16, WHITE); delay_ms(200); POINT_COLOR = BLUE; /設(shè)置字體為藍(lán)色 LCD_ShowString(0, 110, 260, 16, 16, "The temperature is: . C now ");LCD_ShowChar(0+25*8,110,',',16,0);LCD_ShowChar(0+29*8,110,'!',16,0); while (1) POINT_COLOR = BLUE; /設(shè)置字體為藍(lán)色 if (t

9、% 10 = 0) /每100ms讀取一次 t = 0; temperature = DS18B20_Get_Temp(); if (temperature < 0) LCD_ShowChar(0 + 40, 150, '-', 16, 0); /顯示負(fù)號(hào) temperature = -temperature; /轉(zhuǎn)為正數(shù) else LCD_ShowChar(0 + 40, 150, ' ', 16, 0); /去掉負(fù)號(hào)memset(shuzu, 0, 20);sprintf(shuzu, "The temperature is:%3d.%1dC

10、", temperature / 10, temperature % 10);LCD_ShowString(0, 110, 200, 16, 16, shuzu); delay_ms(10);/判斷溫度zanshi_low=temp_low*10;zanshi_hign=temp_high*10;if(temperature<zanshi_low)|(temperature>zanshi_hign)if(temperature<zanshi_low)flag=1;printf("chaoxiaxian");if(temperature>za

11、nshi_hign)flag=2;printf("chaoshangxian"); elseflag=0;LED0=1; /正常情況燈不亮 LED1=1;/獲取溫度時(shí)間控制t t+;/瀏覽開關(guān)KEY_Init();delay_ms(10);keyvalue=KEY_Scan(0);if(keyvalue!=0)if(keyvalue=3)gaibianshui=(gaibianshui+1)%3;if(gaibianshui=1) /改變上限if(keyvalue=2) /key1按下temp_high+;memset(shuzu, 0, 20);sprintf(shuzu

12、, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);if(keyvalue=1) /key0按下temp_high-;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);if(gaibianshui=2) /改變上限if

13、(keyvalue=2) /key1按下temp_low+;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);if(keyvalue=1) /key0按下temp_low-;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_

14、ShowString(0, 90, 200, 16, 16, shuzu);keyvalue=0; void TIM3_IRQHandler(void) /TIM3中斷if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) /檢查指定的TIM中斷發(fā)生與否:TIM 中斷源 TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); /清除TIMx的中斷待處理位:TIM 中斷源 /溫度不正常處理燈if(flag=1)LED0 = !LED0;if(flag=2)LED1 = !LED1;LED 函數(shù)led.c#includ

15、e "led.h"void LED_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); /使能PA,PD端口時(shí)鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; /LED0->PA.8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽輸出 GPIO_InitStructure.

16、GPIO_Speed = GPIO_Speed_50MHz; /IO口速度為50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); /根據(jù)設(shè)定參數(shù)初始化GPIOA.8 GPIO_SetBits(GPIOA,GPIO_Pin_8); /PA.8 輸出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; /LED1->PD.2 端口配置, 推挽輸出 GPIO_Init(GPIOD, &GPIO_InitStructure); /推挽輸出 ,IO口速度為50MHz GPIO_SetBits(GPIOD,GPIO

17、_Pin_2); /PD.2 輸出高 溫度代碼 s18b20.c#include "ds18b20.h"#include "delay.h"void DS18B20_Rst(void) DS18B20_IO_OUT(); /SET PA0 OUTPUT DS18B20_DQ_OUT=0; /拉低DQ delay_us(750); /拉低750us DS18B20_DQ_OUT=1; /DQ=1 delay_us(15); /15US/等待DS18B20的回應(yīng)/返回1:未檢測到DS18B20的存在/返回0:存在u8 DS18B20_Check(void)

18、u8 retry=0;DS18B20_IO_IN();/SET PA0 INPUT while (DS18B20_DQ_IN&&retry<200)retry+;delay_us(1); if(retry>=200)return 1;else retry=0; while (!DS18B20_DQ_IN&&retry<240)retry+;delay_us(1);if(retry>=240)return 1; return 0;/從DS18B20讀取一個(gè)位/返回值:1/0u8 DS18B20_Read_Bit(void) / read o

19、ne bit u8 data;DS18B20_IO_OUT();/SET PA0 OUTPUT DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN();/SET PA0 INPUTdelay_us(12);if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data;/從DS18B20讀取一個(gè)字節(jié)/返回值:讀到的數(shù)據(jù)u8 DS18B20_Read_Byte(void) / read one byte u8 i,j,dat; dat=0;for (i=1;i

20、<=8;i+) j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); return dat;/寫一個(gè)字節(jié)到DS18B20/dat:要寫入的字節(jié)void DS18B20_Write_Byte(u8 dat) u8 j; u8 testb;DS18B20_IO_OUT();/SET PA0 OUTPUT; for (j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if (testb) DS18B20_DQ_OUT=0;/ Write 1 delay_us(2); DS18B20

21、_DQ_OUT=1; delay_us(60); else DS18B20_DQ_OUT=0;/ Write 0 delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); /開始溫度轉(zhuǎn)換void DS18B20_Start(void)/ ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);/ skip rom DS18B20_Write_Byte(0x44);/ convert /初始化DS18B20的IO口 DQ 同時(shí)檢測DS的存在/返回1:不存在/返回0:

22、存在 u8 DS18B20_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /使能PORTA口時(shí)鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;/PORTA0 推挽輸出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &a

23、mp;GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_2); /輸出1DS18B20_Rst();return DS18B20_Check(); /從ds18b20得到溫度值/精度:0.1C/返回值:溫度值 (-5501250) short DS18B20_Get_Temp(void) u8 temp; u8 TL,TH; short tem; DS18B20_Start (); / ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);/ s

24、kip rom DS18B20_Write_Byte(0xbe);/ convert TL=DS18B20_Read_Byte(); / LSB TH=DS18B20_Read_Byte(); / MSB if(TH>7) TH=TH; TL=TL; temp=0;/溫度為負(fù) else temp=1;/溫度為正 tem=TH; /獲得高八位 tem<<=8; tem+=TL;/獲得底八位 tem=(float)tem*0.625;/轉(zhuǎn)換 if(temp)return tem; /返回溫度值else return -tem; 鍵盤代碼key.c #include "k

25、ey.h"#include "delay.h" /按鍵初始化函數(shù) /PA15和PC5 設(shè)置成輸入void KEY_Init(void)GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);/使能PORTA,PORTC時(shí)鐘GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);/關(guān)閉jtag,使能SWD,可以用SWD模式調(diào)試GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;/PA15GPIO_InitStructure.GPIO_Mode = GPIO_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論