stc15w4k32s4做的温湿度测量仪 给别人做的设计
单片机源程序如下:
- /******************************************************
- @title DHT11LCD12864显示
- @author 王树辉
- @since Keil uVision4
- @version 1.0
- @remark 温湿度测量
- @crystal frequency 22.1184MHz
- @site 6J408
- ******************************************************/
- #include"STC15.h" /*时钟频率22.1184MHz*/
- #include"typedef.h"
- #include"delay.h"
- #include"DHT11.H"
- /*此函数功能是将所有I/O口配置为准双向I/O口*/
- #define DATA P2
- int num1=25;
- int num2=35;
- void key();
- sbit RS=P4^1; //12864屏幕
- sbit WR=P4^2;
- sbit EN=P4^4;
- sbit PSB=P4^5;
- sbit key1=P0^0;
- sbit key2=P0^1;
- sbit fengshan=P0^2;
- sbit fengming=P0^3;
- sbit key3=P0^4;
- sbit key4=P0^6;
- void init_GPIO()
- {
- P0M0=P0M1=0x00;
- P1M0=P1M1=0x00;
- P2M0=P2M1=0x00;
- P3M0=P3M1=0x00;
- P4M0=P4M1=0x00;
- P5M0=P5M1=0x00;
- delay(10);
- }
- void writecmd(u8 cmd)
- {
- RS=0;
- WR=0;
- EN=0;
- DATA=cmd;
- delay(10);
- EN=1;
- delay(10);
- EN=0;
- }
- void writedat(u8 dat)
- {
- RS=1;
- WR=0;
- EN=0;
- DATA=dat;
- delay(10);
- EN=1;
- delay(10);
- EN=0;
- }
- void lcdpos(u8 X,u8 Y)
- {
- u8 pos;
- if(X==0)
- {X=0x80;}
- else if(X==1)
- {X=0X90;}
- else if(X==2)
- {X=0X88;}
- else if(X==3)
- {X=0X98;}
- pos=X+Y;
- writecmd(pos);
- }
- void writestring(u8 X,u8 Y,char *s)
- {
- lcdpos(X,Y);
- while(*s)
- {
- writedat(*s++);
- }
- }
- void init_12864()
- {
- PSB=1;
- writecmd(0x30);
- delay(10);
- writecmd(0x0c);
- delay(10);
- writecmd(0x01);
- delay(10);
- }
- void main()
- {
- struct DHT11 dat;
- init_GPIO();
- init_12864();
- writestring(0,0,"DHT111温湿度显示");
- writestring(1,0,"室内温度 湿度 ");
- writestring(2,0,"设定温度:");
- writestring(3,0,"设定湿度:");
- while(1)
- {
-
-
- if(Read_DHT11(&dat)==SUCCESS)
- {
- lcdpos(1,4);
- writedat(dat.temp_int/10%10+0x30);
- writedat(dat.temp_int%10+0x30);
- lcdpos(2,6);
- writedat(num1/10%10+0x30);
- writedat(num1%10+0x30);
-
- if(key1==0)
- {
- delay(5);
- if(key1==0)
- {
- num1++;
- }
- }
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- num1--;
- }
- }
-
- if(dat.temp_int>num1)
- {
- fengshan=1;
- }
- else
- {
- fengshan=0;
- }
- lcdpos(1,7);
- writedat(dat.humi_int/10%10+0x30);
- writedat(dat.humi_int%10+0x30);
- lcdpos(3,6);
- writedat(num2/10%10+0x30);
- writedat(num2%10+0x30);
-
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- num2++;
- }
- }
- if(key4==0)
- {
- delay(5);
- if(key4==0)
- {
- num2--;
- }
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
Keil代码下载:
DHT11 12864 显示.zip
(115.73 KB, 下载次数: 184)
|