本程序使用的是普中stm32開發板外加一個電機驅動模塊,實習自動根據溫度調節風扇轉速, 和手動選擇模式,溫度的范圍可通過按鍵和紅外遙控進行調節。屏幕顯示當前溫度和模式。并且可通過串口查看溫度
單片機源程序如下:
- #include "system.h"
- #include "SysTick.h"
- #include "led.h"
- #include "usart.h"
- #include "tftlcd.h"
- #include "DS18B20.h"
- #include "key.h"
- #include "hwjs.h"
- /*******************************************************************************
- * 函 數 名 : main
- * 函數功能 : 主函數
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- int main()
- {
- u8 i=0,key,a=15,b=20,t=25,k=30;
- int PWM,low,zhouqi;
- float temper;
- u8 temper_buf[6];
- int temper1;
-
- zhouqi=250;
- low=zhouqi-PWM;
-
- SysTick_Init(72);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優先級分組 分2組
- LED_Init();
- KEY_Init();
- USART1_Init(9600);
- Hwjs_Init();
- TFTLCD_Init();
-
-
- FRONT_COLOR=YELLOW;
-
- LCD_ShowFontHZ(10,20,"當前溫度為");
-
- while(DS18B20_Init())
- {
- printf("DS18B20檢測失敗,清插好!\r\n");
-
- }
- printf("DS18B20檢測成功!\r\n");
-
- while(1)
- {
- key=KEY_Scan(0);
- switch(key)
- {
- case KEY_UP:
- {
- led2=0;
- t+=1;
- break;
- }
- case KEY_DOWN:
- {
- led2=1;
- t-=1;
- break;
- }
- case KEY_LEFT:
- {
- led3=0;
- k+=1;
- break;
- }
- case KEY_RIGHT:
- {
- led3=1;
- k-=1;
- break;
- }
- }
- LCD_ShowFontHZ(10,60,"第一檔");
- LCD_ShowChar(10+100,70,'<',16,0);
- LCD_ShowNum(10+110,70,a,2,16);
- LCD_ShowFontHZ(10,100,"第二檔");
- LCD_ShowNum(10+100,110,a,2,16);
- LCD_ShowChar(10+115,110,'-',16,0);
- LCD_ShowNum(10+125,110,b,2,16);
- LCD_ShowFontHZ(10,140,"第三檔");
- LCD_ShowNum(10+100,150,b,2,16);
- LCD_ShowChar(10+115,150,'-',16,0);
- LCD_ShowNum(10+125,150,t,2,16);
- LCD_ShowFontHZ(10,180,"第四檔");
- LCD_ShowNum(10+100,190,t,2,16);
- LCD_ShowChar(10+115,190,'-',16,0);
- LCD_ShowNum(10+125,190,k,2,16);
- LCD_ShowFontHZ(10,220,"第五檔");
- LCD_ShowChar(10+100,230,'>',16,0);
- LCD_ShowNum(10+110,230,k,2,16);
- LCD_ShowFontHZ(10,260,"風力為");
-
- i++;
- if(i%5==0)
- {
- temper=DS18B20_GetTemperture();
- if(temper<0)
- {
- printf("檢測的溫度為:-");
- }
- else
- {
- printf("檢測的溫度為:");
- }
- printf("%.2f\r\n",temper);
- temper1=temper*100;
- temper_buf[0]=temper1/10000+0x30;
- temper_buf[1]=temper1%10000/1000+0x30;
- temper_buf[2]=temper1%1000/100+0x30;
- temper_buf[3]='.';
- temper_buf[4]=temper1%100/10+0x30;
- temper_buf[5]=temper1%10+0x30;
- LCD_ShowString(10+20*8,30,tftlcd_data.width,tftlcd_data.height,16,(u8 *)temper_buf);
- }
-
- if(hw_jsbz==1)
- {
-
- if(hw_jsm==0x00FF629D)
- {
- if(temper>k)
- {
- LCD_ShowFontHZ(110,260,"第五檔");
- low=0;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- }
- if(temper<15)
- {
- LCD_ShowFontHZ(110,260,"第一檔");
- low=400;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- if(temper>=15&temper<20)
- {
- LCD_ShowFontHZ(110,260,"第二檔");
- low=300;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- if(temper>=20&temper<t)
- {
- LCD_ShowFontHZ(110,260,"第三檔");
- low=200;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- if(temper>=t&temper<k)
- {
- LCD_ShowFontHZ(110,260,"第四檔");
- low=100;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- }
-
- else if(hw_jsm==0x00FF30CF)
- {
- LCD_ShowFontHZ(110,260,"第一檔");
- low=400;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- else if(hw_jsm==0x00FF18E7)
- {
- LCD_ShowFontHZ(110,260,"第二檔");
- low=300;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- else if(hw_jsm==0x00FF7A85)
- {
- LCD_ShowFontHZ(110,260,"第三檔");
- low=200;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- else if(hw_jsm==0x00FF10EF)
- {
- LCD_ShowFontHZ(110,260,"第四檔");
- low=100;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- delay_ms(low);
- }
- else if(hw_jsm==0x00FF38C7)
- {
- LCD_ShowFontHZ(110,260,"第五檔");
- low=0;
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- delay_ms(PWM);
- }
- else if(hw_jsm==0x00FFA25D)
- {
- LCD_ShowFontHZ(110,260,"關閉");
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- }
- else if(hw_jsm==0x00FF22DD)
- {
- a+=1;
- hw_jsm=0;
- }
- else if(hw_jsm==0x00FFE01F)
- {
- a-=1;
- hw_jsm=0;
- }
- else if(hw_jsm==0x00FFC23D)
- {
- b+=1;
- hw_jsm=0;
- }
- else if(hw_jsm==0x00FF02FD)
- {
- b-=1;
- hw_jsm=0;
- }
- else if(hw_jsm==0x00FF906F)
- {
- t+=1;
- hw_jsm=0;
- }
- else if(hw_jsm==0x00FFA857)
- {
- t-=1;
- hw_jsm=0;
- }
- else if(hw_jsm==0x00FFB04F)
- {
- k+=1;
- hw_jsm=0;
- }
- else if(hw_jsm==0x00FF9867)
- {
- k-=1;
- hw_jsm=0;
- }
- }
- if(i%20==0)
- {
- led1=!led1;
- }
- delay_us(5);
- }
- }
復制代碼
所有資料51hei提供下載:
智能遙控風扇.rar
(333.5 KB, 下載次數: 69)
2018-8-2 23:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|