资源简介

基于STC15F2K60S2单片机的DHT11+CO2测量系统,在LCD1602上显示。由于是基于库函数的,所以方便用户修改代码,达到自己想要的功能。STC15F2K60S2单片机也是51内核的,但是功能更加强大。

资源截图

代码片段和文件信息

#include	
#include “LCD1602.H“
#define dht11_io P20   //P2.0口作为数据读取接口
#define MAIN_Fosc 22118400L //主时钟
#define baud_rate 4800L //波特率
#define Timer1_Reload (65536UL -(MAIN_Fosc / 4 / baud_rate)) //Timer1重装值
#define uchar unsigned char
#define uint unsigned int

uchar code tab[9]={0xff0x010x860x000x000x000x000x000x79};//读CO2气体浓度值
uchar  date[]={0x000x000x000x000x000x000x000x000x00};
uchar LCD1602_Table[]=“0123456789“;//LCD1602显示标尺
//变量定义
u16 U8FLAG;
u8  U8temp;
u8  U8T_data_HU8T_data_LU8RH_data_HU8RH_data_LU8checkdata;
u8  U8T_data_H_tempU8T_data_L_tempU8RH_data_H_tempU8RH_data_L_tempU8checkdata_temp;
u8  U8comdata;
u8 datas=0;

//函数声明
void  Delay30us();
void  Delay40us();
void  Delay18ms();
void  Delay1000ms();
void  read_byte(); //读取一字节的数据并赋值给U8comdata
u8    read_temp(); //读取温度,返回温度值
u8    read_humi(); //读取湿度,返回湿度值
void  serial_init(); //串口初始化
void  serial_send_byte(u8 dat); //串口发送一个字节的数据
void  serial_send_string(u8 *dat);//串口发送字符串

void UART_init(void)
{
S2_USE_P10P11(); //UART1 使用P30 P31口 默认
    // 下面代码设置定时器2
T2H  = 0xFD; // 波特率:9600 /22.1184MHZ1T
T2L  = 0xC0; // 波特率:9600 /22.1184MHZ1T
AUXR = 0x14;    // 0001 0100,T2R=1启动T2运行,T2x12=1,定时器2按1T计数 
// 下面代码设置定串口2
S2CON = 0x10;         // 0001 0000 S2M0=0(最普遍的8位通信)REN=1(允许接收)
// 下面代码设置中断
IE2  =0x01;        // 开串口2中断
EA   = 1;       // 开总中断
}
void send(uchar dat)  //发送一字节    
 {
  S2BUF=dat;
  while(!TI2);
  CLR_TI2();
 }
void UART2(void) interrupt 8  // 串行口2中断函数

static uchar j;
   ES=0;  //禁止中断
   if(!RI2);
   CLR_RI2();     //清楚接收完毕标志
   date[j]=S2BUF; 
   if(date[0]==0xff)  //判断接收到的第一位为传感器所发数据
      j++;
  else
      j=0;
   if(j==9)    //接收传感器所发数据9字节
     j=0; 
   ES=1;   //允许串口中断
}

void main()
{
uint  tmp;
    uchar i;
Delay1000ms();
serial_init();
UART_init();
dht11_io = 1;
LCD1602_Init();
WriteString(00“TH: “);
WriteString(70“RH“);
WriteString(120“C“);
WriteString(01“CO2:“);
ES=1;
EA=1;
while(1)
{
for(i=0;i<9;i++)  //向co2传感器发送数据
   {
    send(tab[i]);
   }
  Delay1000ms();
tmp=date[2]*256+date[3]; //计算出co2浓度值
if(tmp>9999)
 tmp=0; 
if((tmp/1000)>0)
WriteChar(61LCD1602_Table[tmp/1000]);
else  WriteChar(61‘ ‘);
        WriteChar(71LCD1602_Table[tmp%1000/100]);
WriteChar(81LCD1602_Table[tmp%100/10]);
WriteChar(91LCD1602_Table[tmp%10]);   
SetCur(NoCur);           //  有显示无光标
serial_send_string(“CO2:“);
if((tmp/1000)>0)
serial_send_byte(LCD1602_Table[tmp/1000]);
else serial_send_byte(‘ ‘);
serial_send_byte(LCD1602_Table[tmp%1000/100]);
serial_send_byte(LCD1602_Table[tmp%100/10]);
serial_send_byte(LCD1602_Table[tmp%10]);   
serial_send_byte(‘ ‘);

datas=read_temp();
WriteChar(100datas%100/10+‘0‘);
WriteChar(110datas%10+‘0‘);
SetCur(NoCur);           //  有显示无光标
serial_send_st

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      63118  2018-05-31 01:11  DHT11\dht11

     文件       1016  2018-05-31 01:11  DHT11\dht11.build_log.htm

     文件       5221  2018-05-31 01:11  DHT11\dht11.hex

     文件         57  2018-05-31 01:11  DHT11\dht11.lnp

     文件      28680  2018-05-31 01:11  DHT11\dht11.M51

     文件       2264  2017-06-17 15:41  DHT11\dht11.plg

     文件      71319  2017-06-17 15:47  DHT11\dht11.uvgui.Administrator

    .......     71636  2018-05-31 01:17  DHT11\dht11.uvgui.WK

    .......      5345  2018-05-29 17:08  DHT11\dht11.uvopt

    .......     13939  2018-05-29 17:08  DHT11\dht11.uvproj

     文件       3406  2018-05-28 15:29  DHT11\LCD1602.C

     文件        705  2018-05-28 15:31  DHT11\LCD1602.h

     文件       7607  2018-05-29 17:05  DHT11\LCD1602.LST

     文件      27195  2018-05-29 17:05  DHT11\LCD1602.OBJ

     文件       7109  2018-05-31 01:11  DHT11\main.c

     文件      15979  2018-05-31 01:11  DHT11\main.LST

     文件      40371  2018-05-31 01:11  DHT11\main.OBJ

     文件      32846  2017-06-17 14:59  DHT11\STC15Fxxxx.H

     目录          0  2018-05-31 01:17  DHT11

----------- ---------  ---------- -----  ----

               397813                    19


评论

共有 条评论