一個小設計,使用51單片機,DS18B20實時采集溫度,溫度顯示+溫控調節PWM驅動風扇。
屏幕忘記型號了,是寶上買的小屏,其他可以直接用,沒有問題。
單片機源程序如下:
- #include "main.h"
- #include "TFT.h"
- #include "wenkong.h"
- extern js;
- extern shang;
- extern xia;
- extern wen_du;
- extern flag;
- void Font_Test(void)
- {
- dsp_single_colour(WHITE);
-
- Fast_DrawFont_GBK16(16,50,BLUE,YELLOW, "目前溫度為");
- Fast_DrawFont_GBK16(50,70,RED,WHITE, "度");
- Fast_DrawFont_GBK16(16,90,BLUE,WHITE, "上限");
- Fast_DrawFont_GBK16(66,92,RED,WHITE, "度");
- Fast_DrawFont_GBK16(16,110,BLUE,WHITE, "下限");
- Fast_DrawFont_GBK16(66,110,RED,WHITE, "度");
- }
- void shuaxin(void)
- {
- uint one,two;
- one=wen_du/10%10;
- two=wen_du/1%10;
-
- OLED_ShowNum(32,72,one,RED,WHITE);
- OLED_ShowNum(40,72,two,RED,WHITE);//目前溫度值
-
- }
- void shang_xia(void)
- {
- uint three,four,five,six;
- three=shang/10%10;
- four=shang/1%10;
- five=xia/10%10;
- six=xia/1%10;
- OLED_ShowNum(52,92,three,RED,WHITE);
- OLED_ShowNum(60,92,four,RED,WHITE);//上限
- OLED_ShowNum(52,110,five,RED,WHITE);
- OLED_ShowNum(60,110,six,RED,WHITE);//下限
- }
- void main()
- {
- uchar j;
- // uchar lanya;
- uint a,b;
- lcd_initial();
- dj=0; //電機
- shang=30;
- xia=20; //初始上下限值
- flag=0;
- init_eeprom(); //開始初始化保存的數據
- for(j=0;j<80;j++) //先讀取溫度值,防止開機顯示85
- ReadTemperature();
- init();
- Font_Test();
- bl=1;
- while(1) //進入while循環
- {
- while(flag==0xFFFF)
- {
- dj=0;
- a=shang;
- b=xia;
- zi_keyscan();//按鍵掃描函數
- if(a!=shang||b!=xia)
- {shang_xia();}
- }
- // if(RI==1) // 是否有數據到來
- // {
- // RI = 0;
- // lanya = SBUF; // 暫存接收到的數據
- // if(lanya==1)//如果數據為1
- // dj=0;
- // else if(lanya==2)//如果數據為2
- // dj=1;
- shuaxin();
- shang_xia();
- if(js>=50) //當js在定時器里加到50次時(js加一次是20ms,加到50次就是1000ms,也就是1秒讀取一次溫度)
- {
- ReadTemperature(); //讀取溫度值
- js=0; //定時讀取溫度的變量js清零,重新計時下次讀取溫度
- }
- zi_dong();//判斷當前需要哪一個檔位
-
- }
- }
-
復制代碼
所有資料51hei提供下載:
51+tft+pwm.7z
(52.51 KB, 下載次數: 50)
2020-4-14 09:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|