历史上的今天
返回首页

历史上的今天

今天是:2025年02月14日(星期五)

正在发生

2020年02月14日 | 单片机+PT100+SHT11的温湿度检测系统仿真与程序源码

2020-02-14 来源:51hei

pt100+SHT11测温仿真原理图如下

微信截图_20180517100737.png?imageView2/2/w/5500.jpg?imageView2/2/w/5500.png?imageView2/2/w/550 

单片机源程序如下:

#include

#include

#include     //Keil library 

#include          //Keil library

#define unchar unsigned char 

#define unint unsigned int

#define port P1                              //LCD12864的8位数据口



typedef union                   //定义共同类型

{ unsigned int i;           //i表示测量得到的温湿度数据(int 形式保存的数据)

  unsigned char c;

float f;                           //f表示测量得到的温湿度数据(float 形式保存的数据)

} value;


/******************************************12864函数声明******************************************/

void delay_12864();                                   //延时函数

void check_busy();                                   //检查是否“忙”

void write_cmd(unchar cmd);                   //给LCD12864写命令。

void set_page(unchar page);                   //设置显示的“页”。

void set_line(unchar line);                   //设置显示的“行”。

void set_column(unchar column);           //设置显示的“列”。

void write_data(unchar dat);           //写数据。

void set_onoff(unchar onoff);           //开关屏幕函数。

void select_screen(unchar screen); //选择屏幕函数。

void clear_screen(unchar screen);  //清屏函数。

void initial();                                           //初始化LCD 12864

void hz_LCDDisp16(unchar page,unchar column, unchar code *hzk,unchar num);        //显示函数。

void print_SHT11_temp();           //显示输出SHT11的温度

void print_SHT11_humi();                   //显示输出SHT11的湿度

void print_PT100_temp();                   //显示输出PT100的温度

void delay(int z);                           //z为毫秒数延时

/*******************************12864的端口定义、文字库**********************************/

//首先要选择“读,写”是对与谁。以人来说,读是LCD12864来读取人的指令或数据。写是给人写。

sbit rs=P2^0;                                  //rs=1时,为读写数据。rs=0时,为读写指令。

sbit rw=P2^1;                                  //rw=1时,为读数据(指令)。rw=0时,为写数据(指令)。(以人来说。)

sbit en=P2^2;                                  //使能信号。

sbit cs1=P2^3;                                  //片选信号,0时选中左半屏。 

sbit cs2=P2^4;                                  //片选信号,0时选中右半屏。 

char code hz_wen[]=   //温

{

0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,

0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00

};                                         //度

char code hz_du[]= 

{

0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,

0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00

};

char code hz_shi[]=         //湿

{

0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,

0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00

};

char code maohao[]=                //:

{

0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00

};

char code dian[]=                //.

{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00

};

char code wenduhao[]=   //℃

{

0x06,0x09,0x09,0xE6,0xF8,0x0C,0x04,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,

0x00,0x00,0x00,0x07,0x1F,0x30,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00

};

char code baifenhao[]=        //%

{

0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00

};

char code fuhao[]=      //- 负号

{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01

};

char code kongbai[]=        //空白

{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

char code zero[]=      //0

{

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00

};

char code one[]=       //1

{

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00

};

char code two[]=       //2

{

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00

};

char code there[]=     //3

{

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00

};

char code four[]=       //4

{

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00

};

char code five[]=       //5

{

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00

};

char code six[]=        //6

{

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00

};

char code seven[]=      //7

{

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00

};

char code eight[]=      //8

{

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00

};

char code nine[]=       //9

{

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00

};

/******************************************PCF8591函数声明******************************************/

void delay_6us();               //6us延迟函数

void pcf8591_start();                        //启动信号函数

void pcf8591_stop();                        //停止信号函数

void pcf8591_ack();                                //应答信号函数

void pcf8591_noack();                         //非应答信号函数

void pcf8591_write(unchar cmd);        //单片机给pcf8591发送指令数据。

char pcf8591_read();                        //单片机读取pcf8591发来的数据

void pcf8591_process();                        //pcf8591把模拟量转换成数字量并进行显示

/******************************************PCF8591定义**********************************************/

sbit scl_pcf8591=P2^6;

sbit sda_pcf8591=P2^7;

unsigned char pt100_temp[4];

/******************************************SHT11函数声明******************************************/

void sht11_delay();                                //SHT11延迟函数

void sht11_start();                                //SHT11的启动传输函数

char sht11_read(unchar ack) ;        //单片机读取SHT11发来的数据

char sht11_write(unchar cmd);        //单片机给SHT11发送指令数据。

void sht11_restart();                        //SHT11“通信复位”

char s_measure(unsigned char *p_value, unsigned char mode);//SHT11温湿度测量

void zhuanhuan_sth11(float *p_shidu ,float *p_wendu);      //温湿度值转换及修正

void sht11_process();                        //SHT11数据处理及显示

/******************************************SHT11定义**********************************************/

#define ACK   0             //结束数据传输;

#define NoACK 1                                //继续通信

                                                          //地址  命令  读/写

#define ce_liang_wendu 0x03   //000   0001    1

#define ce_liang_shidu 0x05   //000   0010    1

#define RESET          0x1e   //000   1111    0

sbit sht11_scl=P3^0;

sbit sht11_sda=P3^1;

char temp_print[7];                                                     //用于记录温度

unsigned char humi_print[7];                                         //用于记录湿度

/******************************************SHT11程序部分******************************************/

/*SHT11延迟函数*/

void sht11_delay()

{

        _nop_();

        _nop_();

        _nop_();

}

/*SHT11的启动传输函数*/

void sht11_start()

{

    sht11_sda=1; sht11_scl=0;       //预先准备好开始。        

推荐阅读

史海拾趣

智烽维(CDA)公司的发展小趣事

随着技术的不断成熟和市场的不断拓展,智烽维在2015年开始面向全球开展业务。公司凭借卓越的产品质量和优质的服务,成功打入了国际市场,并在多个国家和地区建立了稳定的销售网络。全球业务的拓展不仅为智烽维带来了更多的商机,也进一步提升了公司的品牌影响力和市场竞争力。

3M公司的发展小趣事

智烽维(CDA)于2007年成立,专注于超级电容器(法拉电容)的研发和生产。在创立初期,公司面临着资金短缺、技术挑战和市场认知度低等多重困难。然而,凭借对技术的执着追求和对市场的敏锐洞察,智烽维成功推出了卷绕型超级电容器产品,并逐渐在市场上建立起了一定的知名度。

Hi-Optel Technologly Co Ltd公司的发展小趣事

在超级电容器领域不断取得突破的同时,智烽维也在积极探索新的技术领域。2018年,公司成功实现了锂离子电容器的研发突破。这一成果不仅填补了公司在这一领域的空白,也为公司未来的发展开辟了新的道路。锂离子电容器以其高能量密度、高功率密度和长寿命等特点,在新能源汽车、智能电网等领域具有广阔的应用前景。

Hi-Light Electronic Co Ltd公司的发展小趣事

经过几年的技术积累和市场探索,智烽维在2013年成功完成了叠片型超级电容器的研发。这一产品的推出,不仅极大地丰富了公司的产品线,也进一步提升了智烽维在超级电容器领域的技术实力。叠片型超级电容器以其高性能、高可靠性和长寿命等特点,受到了市场的广泛关注和好评。

中科银河芯(GXCAS)公司的发展小趣事
为了使三极管进入饱和区,需要给基极提供足够的电流。
BESTECH公司的发展小趣事
为了使三极管进入饱和区,需要给基极提供足够的电流。

问答坊 | AI 解惑

预测

本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 共同学习  …

查看全部问答>

奥特曼Zigbee读书日记(二)--OSAL系统框架专题

9. TI协议栈所用系统框架探讨。 51的系统往往不是太大,但是几十K的程序,也足以让一个初学者望而却步。我们首先忽略C语言本身的难度,光是系统框架也让生手读起来很吃力,再加上这种到处是API跟\"define\"的程序,还没有正式学习协议部分就已经让 ...…

查看全部问答>

关于FPGA总线的问题

问题是这样的:从CPU过来的数据总线,接到FPGA了,FPGA后面又接了一个CPLD,等于说,FPGA既要将数据总线自己用,又要输出给CPLD用,该怎么实现了? 难题是数据总向是双向的不好办! 因为两片FPGA之间的连线资源较多,把它们之间的数据总结分为送 ...…

查看全部问答>

求89c52烧录软件

那位用这个,发给兄弟伙了...谢了...1005450581…

查看全部问答>

如何读写51程序

我想知道8051是如果从电脑下载到51芯片中的,我的板子是52,看了下芯片资料是用P30 P31串口写入的,就算烧写的时候,PSEN脚要拉低电平,这是怎么被拉低的,找了每天每找到 而且烧写的软件是用的驱动程序,这么复杂,应该不要用驱动就能送数据到51 ...…

查看全部问答>

有做ARM的大侠没有?keiluv3有下的没有?

有做ARM的大侠没有?keiluv3有下的没有?…

查看全部问答>

CEdit控件不能输入

从CWnd继承一个类CInputInfoWnd,在CInputInfoWnd用Create动态创建Edit控件m_editTest,此Edit控件上可以看到输入光标,但不能输入任何东西?…

查看全部问答>

2007年E题 开关稳压电源方案、原理图、程序

本帖最后由 paulhyde 于 2014-9-15 03:46 编辑 2007年E题 开关稳压电源方案、原理图、程序    …

查看全部问答>

msp430bsl为什么在64位window7旗舰版上的驱动安装了不好使

为什么64位window7旗舰版安装了msp430bsl不好使,别人在别的系统上和我的步骤一样都没出现这样的情况,菜鸟在这里向大虾求救,装了两天了,…

查看全部问答>