版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、成績學 生 課 程 實 踐 能 力 考 查題目:溫度按鍵設定、顯示、報警系統設計課程名稱:嵌入式系統開發(fā) 專業(yè)班級:學生學號: 學生姓名:考查地點: 考查時長: 4小時 所屬院部: 指導教師:2017 2018學年 第 2 學期 金陵科技學院教務2017-2018學年第2學期嵌入式系統開發(fā)實踐能力考核班級姓名學號課程名稱嵌入式系統開發(fā)課程編號0806504151授課時間2018年2月26日- 2018年5月4日周學時4學分2簡要評語(從完成情況、是否具備獨立開發(fā)能力、是否獨立完成、編程熟練程度等角度評價。)任課教師簽名:日期:溫度按鍵設定、顯示、報警系統設計要求:1、讀取DS18B20溫度,在
2、液晶上實時顯示,并顯示上、下限,初始值上限32,下限26。2、通過按鍵可以設置環(huán)境溫度的上限和下限,WK_UP鍵按下調節(jié)上限,再按下調節(jié)下限,再按下調節(jié)上限KEY1按下加1;KEY0按下減1,根據上限和下限判斷當前溫度有沒有超出范圍。3、當溫度超過上限,LED1隔1秒亮一次。超過下限,LED2隔1秒亮一次。(也可自定義報警方式)4、串口波特率一律用9600bps。液晶顯示的信息:STM32 testname: xxxxxxxxxMaximum is 32C,Minimum is 26 CThe temperature is 29 C,now!(xxxxx是自己的名字拼音)目錄:第1章. 系統要
3、求第2章. 硬件設計2.2 DS18B20模塊2.4 LCD顯示模塊2.5 LED 模塊第3章. 軟件設計第五章.課程總結第1章. 設計要求及方案1、讀取DS18B20溫度,在液晶上實時顯示,并顯示上、下限,初始值上限32,下限26。2、通過按鍵可以設置環(huán)境溫度的上限和下限,WK_UP鍵按下調節(jié)上限,再按下調節(jié)下限,再按下調節(jié)上限KEY1按下加1;KEY0按下減1,根據上限和下限判斷當前溫度有沒有超出范圍。3、當溫度超過上限,LED1隔1秒亮一次。超過下限,LED2隔1秒亮一次。(也可自定義報警方式)4、串口波特率一律用9600bps。液晶顯示的信息:STM32 testname: xxxxx
4、xxxxMaximum is 32C,Minimum is 26 CThe temperature is 29 C,now!(xxxxx是自己的名字拼音)本次課程設計的要求是使用STM32F103設計一個溫度測控系統,ALIENTEK MiniSTM32 V3 版開發(fā)板選擇的是 STM32F103RCT6 作為 MCU,它擁有的資源 包括:48KB SRAM、256KB FLASH、2 個基本定時器、4 個通用定時器、2 個高級定時器、2 個 DMA 控制器(共 12 個通道)、3 個 SPI、2 個 IIC、5 個串口、1 個 USB、1 個 CAN、3 個 12 位 ADC、1 個 12
5、位 DAC、1 個 SDIO 接口及 51 個通用 IO 口。在本課程中使用了以下部分來完成課程設計的要求:1.應用DS18B20進行溫度的檢測。2.應用按鍵模塊進行外部的上下限數值設定。3.應用LED的閃爍進行報警。4.應用LCD顯示實時溫度、上下限等信息。第2章. 硬件設計2.2 DS18B20設計ALIENTEK MiniSTM32 開發(fā)板總共有 3 個按鍵,其原理圖如下:2.4 LCD顯示模塊2.5 LED 模塊其中 PWR 是開發(fā)板電源指示燈,為藍色。LED0 和 LED1 分別接在 PA8 和 PD2 上,PA8還可以通過 TIM1 的通道 1 的 PWM 輸出來控制 DS0 的亮
6、度。為了方便大家判斷,我們選擇了 DS0 為紅色,DS1 為綠色的 LED 燈。 第3章. 軟件設計溫度顯示及報警模塊 按鍵設定模塊#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.
7、h>#include <stdlib.h>int temp_low = 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); /時鐘使能TIM_TimeBaseStructure.
8、TIM_Period = arr; /設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值 計數到5000為500msTIM_TimeBaseStructure.TIM_Prescaler =psc; /設置用來作為TIMx時鐘頻率除數的預分頻值 10Khz的計數頻率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /設置時鐘分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上計數模式TIM_TimeBaseInit(TIM3, &
9、;TIM_TimeBaseStructure); /根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位TIM_ITConfig( /使能或者失能指定的TIM中斷TIM3, /TIM2TIM_IT_Update ,ENABLE /使能);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; /TIM3中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /先占優(yōu)先級0級NVIC_InitStructure.NVIC_IRQChannelSubPrior
10、ity = 3; /從優(yōu)先級3級NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ通道被使能NVIC_Init(&NVIC_InitStructure); /根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器TIM_Cmd(TIM3, ENABLE); /使能TIMx外設u8 flag=0; int main(void) u8 t = 0; u8 shuzu20;u8 keyvalue=0;u8 gaibianshui=0; short temperature; delay_init(); /延時函數初始化 ua
11、rt_init(9600); /串口初始化為9600NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/ 設置中斷優(yōu)先級分組2 LED_Init(); /初始化與LED連接的硬件接口TIM3_Int_Init(9999,7199);/10Khz的計數頻率,計數到5000為500ms LCD_Init(); POINT_COLOR = RED; /設置字體為紅色 LCD_ShowString(0, 50, 200, 16, 16, "STM32 test");LCD_ShowString(0, 70, 200, 16, 16, &q
12、uot;name: zhang qi qi "); /LCD_ShowString(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,
13、 16, "DS18B20 Error"); delay_ms(200); LCD_Fill(0, 130, 239, 130 + 16, WHITE); delay_ms(200); POINT_COLOR = BLUE; /設置字體為藍色 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
14、 (1) POINT_COLOR = BLUE; /設置字體為藍色 if (t % 10 = 0) /每100ms讀取一次 t = 0; temperature = DS18B20_Get_Temp(); if (temperature < 0) LCD_ShowChar(0 + 40, 150, '-', 16, 0); /顯示負號 temperature = -temperature; /轉為正數 else LCD_ShowChar(0 + 40, 150, ' ', 16, 0); /去掉負號memset(shuzu, 0, 20);sprintf(
15、shuzu, "The temperature is:%3d.%1dC", 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("
16、;chaoxiaxian");if(temperature>zanshi_hign)flag=2;printf("chaoshangxian"); elseflag=0;LED0=1; /正常情況燈不亮 LED1=1;/獲取溫度時間控制t t+;/瀏覽開關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_
17、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(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,
18、16, 16, shuzu);if(gaibianshui=2) /改變上限if(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 i
19、s %2d C", temp_high, temp_low);LCD_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;i
20、f(flag=2)LED1 = !LED1;#include "led.h"void LED_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); /使能PA,PD端口時鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; /LED0->PA.8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_
21、PP; /推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /IO口速度為50MHz 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_Pin_2); /PD.2 輸出高 #include &quo
22、t;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的回應/返回1:未檢測到DS18B20的存在/返回0:存在u8 DS18B20_Check(void) u8 retry=0;DS18B20_IO_IN();/SET PA0 INPUT whi
23、le (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讀取一個位/返回值:1/0u8 DS18B20_Read_Bit(void) / read one bit u8 data;DS18B20_IO_OUT();/SET PA0 OUTP
24、UT 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讀取一個字節(jié)/返回值:讀到的數據u8 DS18B20_Read_Byte(void) / read one byte u8 i,j,dat; dat=0;for (i=1;i<=8;i+) j=DS18B20_Read_Bit(); dat=(j<&l
25、t;7)|(dat>>1); return dat;/寫一個字節(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_DQ_OUT=1; delay_us(60); else DS18B20_DQ_OUT=
26、0;/ Write 0 delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); /開始溫度轉換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 同時檢測DS的存在/返回1:不存在/返回0:存在 u8 DS18B20_Init(void) GPIO_InitTypeDef GPI
27、O_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /使能PORTA口時鐘 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, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GP
28、IO_Pin_2); /輸出1DS18B20_Rst();return DS18B20_Check(); /從ds18b20得到溫度值/返回值:溫度值 (-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);/ skip rom DS18B20_Write_Byte(0xbe);/ convert TL=DS18B20
29、_Read_Byte(); / LSB TH=DS18B20_Read_Byte(); / MSB if(TH>7) TH=TH; TL=TL; temp=0;/溫度為負 else temp=1;/溫度為正 tem=TH; /獲得高八位 tem<<=8; tem+=TL;/獲得底八位 tem=(float)tem*0.625;/轉換 if(temp)return tem; /返回溫度值else return -tem; #include "key.h"#include "delay.h" /按鍵初始化函數 /PA15和PC5 設置成輸入
30、void KEY_Init(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);/使能PORTA,PORTC時鐘GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);/關閉jtag,使能SWD,可以用SWD模式調試GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;/PA15GPIO_InitStructure.GPIO_Mode
31、= GPIO_Mode_IPU; /設置成上拉輸入 GPIO_Init(GPIOA, &GPIO_InitStructure);/初始化GPIOA15GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;/PC5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /設置成上拉輸入 GPIO_Init(GPIOC, &GPIO_InitStructure);/初始化GPIOC5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;/PA0GPIO_InitStructure.GPIO_
32、Mode = GPIO_Mode_IPD; /PA0設置成輸入,默認下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);/初始化GPIOA.0 /按鍵處理函數/返回按鍵值/mode:0,不支持連續(xù)按;1,支持連續(xù)按;/返回值:/0,沒有任何按鍵按下/KEY0_PRES,KEY0按下/KEY1_PRES,KEY1按下/WKUP_PRES,WK_UP按下 /注意此函數有響應優(yōu)先級,KEY0>KEY1>WK_UP!u8 KEY_Scan(u8 mode) static u8 key_up=1;/按鍵按松開標志if(mode)key_up=1; /支持連按 if(key_up
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中數學教研組工作總結-15篇
- 2025年水利管理及技術咨詢服務項目申請報告模范
- 2025年測高儀項目提案報告模范
- 2025年數控裁板鋸項目提案報告模稿
- 保安個人述職報告集合15篇
- 2024冶金工程質保期合同擔保協議2篇
- 去廣告公司實習報告范文集合七篇
- 保險公司實習報告范文集錦八篇
- 初二生物教學計劃范文合集五篇
- 小學生考試沒考好檢討書
- 超市柜臺長期出租合同范例
- 人教版三年級下冊數學期中測試卷含答案(新)
- 廣東省廣州市2025屆高三上學期12月調研測試語文試題(含答案)
- 【8物(科)期末】合肥市第四十五中學2023-2024學年八年級上學期期末物理試題
- 2024年01月11190當代中國政治制度期末試題答案
- 2024-2025學年深圳市初三適應性考試模擬試卷歷史試卷
- 2024政府采購評審專家考試題庫附含答案
- 第24課《穿井得一人》公開課一等獎創(chuàng)新教學設計 統編版語文七年級上冊
- 提高吸入劑使用正確率品管圈成果匯報
- 重度子癇前期產后護理查房
- 2024年全新七年級語文上冊期末試卷及答案(人教版)
評論
0/150
提交評論