一个小设计,使用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, 下载次数: 49)
|