pt100+SHT11测温仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- #include <intrins.h>
- #include <math.h> //Keil library
- #include <stdio.h> //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; //预先准备好开始。
- sht11_delay();
- sht11_scl=1;
- sht11_delay();
- sht11_sda=0;
- sht11_delay();
- sht11_scl=0;
- sht11_delay();
- sht11_scl=1;
- sht11_delay();
- sht11_sda=1;
- sht11_delay();
- sht11_scl=0;
- }
- /*单片机读取SHT11发来的数据*/
- char sht11_read(unchar ack)
- {
- unchar i=0,dat=0;
- sht11_sda=1; //释放数据线
- for(i=0x80;i>0;i>>=1) //按位取数据,从高位开始依次按位取。
- {
- sht11_scl=1;
- if(sht11_sda)
- dat=dat|i; //读取1位的数据值。
- sht11_scl=0;
- }
- sht11_sda=ack; //若读取完数据,结束通信。
- sht11_scl=1; //sht11_sda=ack; sht11_scl=1; sht11_scl=0; 这三句是产生一个应答或非信号。
- sht11_delay();
- sht11_scl=0;
- sht11_delay();
- sht11_sda=1; //释放数据线。
- return dat;
- }
- /*单片机给SHT11发送指令数据。*/
- char sht11_write(unchar cmd)
- {
- unchar i=0,error=0;
- for(i=0x80;i>0;i>>=1) //按位发数据,从高位开始依次按位取。
- {
- if(i&cmd) //按位与,发送数据。
- sht11_sda=1;
- else sht11_sda=0;
- sht11_scl=1;
- sht11_delay();
- sht11_scl=0;
- }
- sht11_sda=0; // sht11_sda=0; sht11_scl=1; sht11_scl=0; 这三句是产生一个应答信号。
- sht11_scl=1;
- error=sht11_sda; //检查通讯是否正常,为0是正常,1为错误。
- sht11_delay();
- sht11_scl=0;
- sht11_sda=1; //释放数据线。
- return error;
- }
- /*SHT11“通信复位”*/
- void sht11_restart() //数据线保持高,时钟线产生9个脉冲。SHT11通信复位。
- {
- unchar i;
- sht11_sda=1; //预先准备。
- sht11_scl=0;
- for(i=0;i<9;i++)
- {
- sht11_scl=1;
- sht11_scl=0;
- }
- sht11_start();//启动传输。
- }
- /*SHT11温湿度测量*/
- char s_measure(unsigned char *p_value, unsigned char mode)
- {
- unsigned int error=0;
- unsigned int i;
- sht11_start(); //启动传输
- switch(mode) //选择发送命令
- {
- case 0 : error+=sht11_write(ce_liang_wendu); break; //测量温度
- case 1 : error+=sht11_write(ce_liang_shidu); break; //测量湿度
- default: break;
- }
- for (i=0;i<65535;i++) if(sht11_sda==0) break; //等待测量结束
- if(sht11_sda) error+=1; // 如果长时间数据线没有拉低,说明测量错误
- *(p_value) =sht11_read(NoACK); //读第一个字节,高字节 (MSB)
- *(p_value+1)=sht11_read(NoACK); //读第二个字节,低字节 (LSB)
- *(p_value+1)=sht11_read(ACK);
- return error; // error=1 通讯错误
- }
- /*温湿度值转换及修正*/
- void zhuanhuan_sth11(float *p_shidu ,float *p_wendu)
- {
- //温度转换、修正的系数值、常量值。
- const float C1=-4.0;
- const float C2=+0.0405;
- const float C3=-0.0000028;
- const float T1=+0.01;
- const float T2=+0.00008;
- //定义一些温湿度相关变量。
- float RH=*p_shidu; // 取出SHT11测量的12位湿度值
- float T=*p_wendu; // 取出SHT11测量的14位温度值
- float RH_xiangdui; // 相对湿度
- float T_C; // 转换后的温度
- //温湿度转换、修正公式。
- T_C=T*0.01 - 40; //温度转换
- RH_xiangdui=C3*RH*RH + C2*RH + C1; //相对湿度修正
- //返回转换、修正后的值。
- *p_wendu=T_C; //返回温度结果
- *p_shidu=RH_xiangdui; //返回湿度结果
- }
- /*SHT11数据处理及显示*/
- void sht11_process()
- {
- int temp;
- unint humi;
- value humi_val,temp_val; //定义两个共同体,一个用于湿度,一个用于温度
- unchar error,wendu=0,shidu=1; //用于检验是否出现错误
- error=0; //初始化error=0,即没有错误
- error+=s_measure(( char*)&temp_val.i,wendu); //温度测量
- error+=s_measure((unsigned char*)&humi_val.i,shidu); //湿度测量
- if(error!=0) //如果发生错误,系统复位
- sht11_restart();
- else
- {
- humi_val.f=(float)humi_val.i; //转换为浮点数
- temp_val.f=(float)temp_val.i; //转换为浮点数
- zhuanhuan_sth11(&humi_val.f,&temp_val.f); //修正相对湿度及温度
- temp=temp_val.f*10;
- humi=humi_val.f*10;
-
- temp_print[0]=temp/1000; //温度百位
- temp_print[1]=temp%1000/100; //温度十位
- temp_print[2]=temp%1000%100/10; //温度个位
- temp_print[3]=10; //小数点
- temp_print[4]=temp%10; //温度小数点后第一位
- temp_print[5]=11; //显示温度符号℃
- print_SHT11_temp(); //输出温度
-
- humi_print[0]=humi/1000; //湿度百位
- humi_print[1]=humi%1000/100; //湿度十位
- humi_print[2]=humi%1000%100/10; //湿度个位
- humi_print[3]=10; //小数点
- humi_print[4]=humi%10; //湿度小数点后第一位
- humi_print[5]=11;
- if(humi_print[0]==1) //如果湿度到100则显示99.9
- {
- humi_print[0]=0;
- humi_print[1]=9;
- humi_print[2]=9;
- humi_print[4]=9;
- }
- print_SHT11_humi(); //输出湿度
- }
- delay(800); //等待足够长的时间,以进行下一次转换
- }
- /******************************************PCF8591程序部分******************************************/
- /*6us延迟函数*/
- void delay_6us()
- {
- _nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_();
- }
- /*启动信号函数*/
- void pcf8591_start()
- {
- sda_pcf8591=1;
- delay_6us();
- scl_pcf8591=1;
- delay_6us();
- sda_pcf8591=0; //这时候 启动开始。
- delay_6us();
- scl_pcf8591=0;
- }
- /*停止信号函数*/
- void pcf8591_stop()
- {
- sda_pcf8591=0;
- delay_6us();
- scl_pcf8591=1;
- delay_6us();
- sda_pcf8591=1;
- delay_6us();
- }
- /*应答信号函数*/
- void pcf8591_ack()
- {
- sda_pcf8591=0;
- delay_6us();
- scl_pcf8591=1;
- delay_6us();
- scl_pcf8591=0;
- delay_6us();
- }
- /*非应答信号函数*/
- void pcf8591_noack()
- {
- sda_pcf8591=1;
- scl_pcf8591=1;
- delay_6us();
- scl_pcf8591=0;
- }
- /*单片机给pcf8591发送指令数据。*/
- void pcf8591_write(unchar cmd)
- {
- unchar i=0,error=0;
- for(i=0x80;i>0;i>>=1) //按位发数据,从高位开始依次按位取。
- {
- if(i&cmd) //按位与,发送数据。
- sda_pcf8591=1;
- else sda_pcf8591=0;
- scl_pcf8591=1;
- delay_6us();
- scl_pcf8591=0;
- }
- sda_pcf8591=1; //释放数据线。
- }
- /*单片机读取pcf8591发来的数据*/
- char pcf8591_read()
- {
- unchar i=0,dat=0;
- sda_pcf8591=1; //释放数据线
- for(i=0x80;i>0;i>>=1) //按位取数据,从高位开始依次按位取。
- {
- scl_pcf8591=1;
- if(sda_pcf8591)
- dat=dat|i; //读取1位的数据值。
- scl_pcf8591=0;
- }
- sda_pcf8591=1; //释放数据线。
- return dat;
- }
- /*pcf8591把模拟量转换成数字量并进行显示*/
- void pcf8591_process()
- { unchar temp;
- value pcf8591_value;
- pcf8591_start();
- pcf8591_write(0x90); //上来必须先发地址,选择是什么操作,这里进行写操作
- pcf8591_ack();
- pcf8591_write(0x00); //输出模拟量 0通道。
- pcf8591_ack();
-
- pcf8591_start(); //开始进行模数转换
- pcf8591_write(0x91);
- pcf8591_ack();
- pcf8591_value.c=pcf8591_read();
- pcf8591_noack();
- pcf8591_stop();
-
- if(pcf8591_value.c>0xff)
- {
- pt100_temp[0]=1; //温度百位
- pt100_temp[1]=0; //温度十位
- pt100_temp[2]=0; //温度个位
- pt100_temp[3]=11;
- print_PT100_temp();
- }
-
- if(pcf8591_value.c<=0xff)
- {
- pcf8591_value.f=(float)pcf8591_value.c;
- temp=pcf8591_value.f/2.55+0.5; //加0.5为了四舍五入
- pt100_temp[0]=temp/100; //温度百位
- pt100_temp[1]=temp%100/10; //温度十位
- pt100_temp[2]=temp%10; //温度个位
- pt100_temp[3]=11;
- print_PT100_temp();
- }
- }
- /******************************************12864程序部分********************************************/
- /*延时函数*/
- void delay_12864()
- {
- unchar i,j;
- for(i=0;i>10;i++)
- for(j=0;j>256;j++);
- }
- /*检查LCD12864是否“忙”*/
- void check_busy() //检查LCD12864是否“忙” 数据线的最高位DB7为1时则“忙”。
- { //因为每次LCD12864读指令或者数据时候,都要判断“自己”是否“忙”。
- P1=0x00;
- rs=0; //选择 指令。
- rw=1; //选择 (人)读。
- en=1; //这时LCD12864写出来一个指令,告诉人,是否“忙”,这个指令从数据口出来,也就是给了P1。
- while(P1&0x80); //直到,数据线的最高位DB7为0时则“不忙”。
- en=0; //en由1——0,产生一个下降沿,才能锁存数据。
- }
- /*给LCD12864写命令。*/
- void write_cmd(unchar cmd) //给LCD12864写命令。
- {
- check_busy(); //检查“忙不忙”。
- rs=0; //选择 指令。
- rw=0; //选择 (人)写。
- port=cmd; //指令赋给数据端。
- en=1; //使能信号。
- delay_12864(); //延时。
- en=0;
- }
- /*设置显示的“页”*/
- void set_page(unchar page) //设置显示的“页”。因为一页有8行,一共有64行,所以LCD12864有8页。
- {
- page=0xb8|page; //“页”的首地址为0xb8。
- write_cmd(page); //把命令给LCD12864。
- }
- /*设置显示的“行”*/
- void set_line(unchar line) //设置显示的“行”。一般是从第0行开始。
- {
- line=0xc0|line; //第0行的地址为0xc0。
- write_cmd(line); //把命令给LCD12864。
- }
- /*设置显示的“列”*/
- void set_column(unchar column) //设置显示的“列”。
- {
- column=column&0x3f; //因为一个屏的“列”最多有64列,所以防止越出来。
- column=0x40|column; //“列”的首地址为0x40。
- write_cmd(column); //把命令给LCD12864。
- }
- /*单片机给12864写数据*/
- void write_data(unchar dat) //写数据。
- {
- check_busy(); //检查“忙不忙”。
- rs=1; //选择 数据。
- rw=0; //选择 (人)写。
- port=dat; //数据赋给数据端。
- en=1;
- delay_12864();
- en=0;
- }
- /*开关屏幕函数*/
- void set_onoff(unchar onoff) //开关屏幕函数。0x3f是开,0x3e是关。
- {
- onoff=0x3e|onoff; //选择开或关。
- write_cmd(onoff); //把命令给LCD12864。
- }
- /*选择屏幕函数*/
- void select_screen(unchar screen) //选择屏幕函数。
- {
- switch(screen)
- {
- case 0:cs1=0;cs2=0;break; //选择全屏。
- case 1:cs1=0;cs2=1;break; //选择左半屏。
- case 2:cs1=1;cs2=0;break; //选择右半屏。
- default:break;
- }
- }
- /*清屏函数*/
- void clear_screen(unchar screen) //清屏函数。
- {
- unchar p,c;
- select_screen(screen); //选屏幕。
- for(p=0;p<8;p++) //控制“页”数。从第0页开始。每页每页进行写。
- {
- set_page(p);
- set_column(0);
- for(c=0;c<64;c++) //控制“列” 。从第0列开始。每页最多可写32个中文文字或64个ASCII字符
- {
- write_data(0x00); //写入“0”(就是空白)。列地址自动加1。
- }
- }
- }
- /*初始化LCD 12864*/
- void initial() //初始化LCD 12864
- {
- check_busy();
- select_screen(0); //选择全屏
- set_onoff(0); //关闭屏幕
- select_screen(0); //选择全屏
- set_onoff(1); //开启屏幕
- select_screen(0); //选择全屏
- clear_screen(0); //清空屏幕
- set_line(0); //从第0行开始
- }
- /*12864显示函数*/
- void hz_LCDDisp16(unchar page,unchar column, unchar code *hzk,unchar num) //显示函数。
- {
- unchar j=0,i=0;
- for(j=0;j<2;j++)
- {
- write_cmd(0xb8+page+j);
- write_cmd(0x40+column);
- if(num==0)
- {
- for(i=0;i<16;i++)
- write_data(hzk[16*j+i]);
- }
- else
- for(i=0;i<8;i++)
- write_data(hzk[8*j+i]);
- }
- }
- /*12864显示SHT11输出的温度*/
- void print_SHT11_temp() //显示输出温度
- {
- unchar i,j;
- for(i=0;i<6;i++)
- {
- if(i==3)
- {
- j=0;
- }
- if(i<3)
- {
- cs1=0;
- cs2=1;
- if(temp_print[0]==0&&i==0)
- {
- hz_LCDDisp16(0,38,kongbai,1);
- j=8;
- i++;
- }
- if(temp_print[1]==0&&temp_print[0]==0)
- {
- hz_LCDDisp16(0,46,kongbai,1);
- j=16;
- i++;
- }
- if(temp_print[1]<0||temp_print[2]<0)
- {
- temp_print[1]=abs(temp_print[1]);
- temp_print[2]=abs(temp_print[2]);
- temp_print[4]=abs(temp_print[4]);
- hz_LCDDisp16(0,38,fuhao,1);
- }
- switch(temp_print[i])
- {
- case 0:hz_LCDDisp16(0,j+38,zero,1);break;
- case 1:hz_LCDDisp16(0,j+38,one,1);break;
- case 2:hz_LCDDisp16(0,j+38,two,1);break;
- case 3:hz_LCDDisp16(0,j+38,there,1);break;
- case 4:hz_LCDDisp16(0,j+38,four,1);break;
- case 5:hz_LCDDisp16(0,j+38,five,1);break;
- case 6:hz_LCDDisp16(0,j+38,six,1);break;
- case 7:hz_LCDDisp16(0,j+38,seven,1);break;
- case 8:hz_LCDDisp16(0,j+38,eight,1);break;
- case 9:hz_LCDDisp16(0,j+38,nine,1);break;
- case 10:hz_LCDDisp16(0,j+38,dian,1);break;
- }
- }
- else if(i>=3)
- { cs1=1;
- cs2=0;
- switch(temp_print[i])
- {
- case 0:hz_LCDDisp16(0,j,zero,1);break;
- case 1:hz_LCDDisp16(0,j,one,1);break;
- case 2:hz_LCDDisp16(0,j,two,1);break;
- case 3:hz_LCDDisp16(0,j,there,1);break;
- case 4:hz_LCDDisp16(0,j,four,1);break;
- case 5:hz_LCDDisp16(0,j,five,1);break;
- case 6:hz_LCDDisp16(0,j,six,1);break;
- case 7:hz_LCDDisp16(0,j,seven,1);break;
- case 8:hz_LCDDisp16(0,j,eight,1);break;
- case 9:hz_LCDDisp16(0,j,nine,1);break;
- case 10:hz_LCDDisp16(0,j,dian,1);break;
- case 11:hz_LCDDisp16(0,j,wenduhao,0);break;
- }
- }
- j+=8;
- }
- }
- /*12864显示SHT11输出的湿度*/
- void print_SHT11_humi()
- {
- unchar i,j;
- for(i=0;i<6;i++)
- {
- if(humi_print[0]==0&&i==0)
- {
- i++;
- j=8;
- }
- if(i==3)
- {
- j=0;
- }
- if(i<3)
- {
- cs1=0;
- cs2=1;
- if(humi_print[0]==0&&i==0)
- {
- hz_LCDDisp16(2,38,kongbai,1);
- j=8;
- i++;
- }
- if(humi_print[1]==0&&humi_print[0]==0)
- {
- hz_LCDDisp16(2,46,kongbai,1);
- j=16;
- i++;
- }
- switch(humi_print[i])
- {
- case 0:hz_LCDDisp16(2,j+38,zero,1);break;
- case 1:hz_LCDDisp16(2,j+38,one,1);break;
- case 2:hz_LCDDisp16(2,j+38,two,1);break;
- case 3:hz_LCDDisp16(2,j+38,there,1);break;
- case 4:hz_LCDDisp16(2,j+38,four,1);break;
- case 5:hz_LCDDisp16(2,j+38,five,1);break;
- case 6:hz_LCDDisp16(2,j+38,six,1);break;
- case 7:hz_LCDDisp16(2,j+38,seven,1);break;
- case 8:hz_LCDDisp16(2,j+38,eight,1);break;
- case 9:hz_LCDDisp16(2,j+38,nine,1);break;
- case 10:hz_LCDDisp16(2,j+38,dian,1);break;
- }
- }
- else if(i>=3)
- { cs1=1;
- cs2=0;
- switch(humi_print[i])
- {
- case 0:hz_LCDDisp16(2,j,zero,1);break;
- case 1:hz_LCDDisp16(2,j,one,1);break;
- case 2:hz_LCDDisp16(2,j,two,1);break;
- case 3:hz_LCDDisp16(2,j,there,1);break;
- case 4:hz_LCDDisp16(2,j,four,1);break;
- case 5:hz_LCDDisp16(2,j,five,1);break;
- case 6:hz_LCDDisp16(2,j,six,1);break;
- case 7:hz_LCDDisp16(2,j,seven,1);break;
- case 8:hz_LCDDisp16(2,j,eight,1);break;
- case 9:hz_LCDDisp16(2,j,nine,1);break;
- case 10:hz_LCDDisp16(2,j,dian,1);break;
- case 11:hz_LCDDisp16(2,j,baifenhao,1);break;
- }
- }
- j+=8;
- }
- }
- /*12864显示PT100输出的温度*/
- void print_PT100_temp()
- {
- unchar i,j=0;
- for(i=0;i<4;i++)
- {
- if(i==3)
- {
- j=0;
- }
- if(i<3)
- {
- cs1=0;
- cs2=1;
- if(pt100_temp[0]==0&&i==0)
- {
- hz_LCDDisp16(6,38,kongbai,1);
- j=8;
- i++;
- }
- if(pt100_temp[1]==0&&pt100_temp[0]==0)
- {
- hz_LCDDisp16(6,46,kongbai,1);
- j=16;
- i++;
- }
- /*
- if(temp_print[1]<0||temp_print[2]<0)
- {
- temp_print[1]=abs(temp_print[1]);
- temp_print[2]=abs(temp_print[2]);
- temp_print[4]=abs(temp_print[4]);
- hz_LCDDisp16(0,38,fuhao,1);
- }
- */
- switch(pt100_temp[i])
- {
- case 0:hz_LCDDisp16(6,j+38,zero,1);break;
- case 1:hz_LCDDisp16(6,j+38,one,1);break;
- case 2:hz_LCDDisp16(6,j+38,two,1);break;
- case 3:hz_LCDDisp16(6,j+38,there,1);break;
- case 4:hz_LCDDisp16(6,j+38,four,1);break;
- case 5:hz_LCDDisp16(6,j+38,five,1);break;
- case 6:hz_LCDDisp16(6,j+38,six,1);break;
- case 7:hz_LCDDisp16(6,j+38,seven,1);break;
- case 8:hz_LCDDisp16(6,j+38,eight,1);break;
- case 9:hz_LCDDisp16(6,j+38,nine,1);break;
- }
- }
- else if(i>=3)
- { cs1=1;
- cs2=0;
- switch(pt100_temp[i])
- {
- case 0:hz_LCDDisp16(6,j,zero,1);break;
- case 1:hz_LCDDisp16(6,j,one,1);break;
- case 2:hz_LCDDisp16(6,j,two,1);break;
- case 3:hz_LCDDisp16(6,j,there,1);break;
- case 4:hz_LCDDisp16(6,j,four,1);break;
- case 5:hz_LCDDisp16(6,j,five,1);break;
- case 6:hz_LCDDisp16(6,j,six,1);break;
- case 7:hz_LCDDisp16(6,j,seven,1);break;
- case 8:hz_LCDDisp16(6,j,eight,1);break;
- case 9:hz_LCDDisp16(6,j,nine,1);break;
- case 11:hz_LCDDisp16(6,j,wenduhao,0);break;
- }
- }
- j+=8;
- }
- }
- /*z为毫秒数延迟*/
- void delay(int z) //z为毫秒数
- {
- int x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- /*************************************************************************************************/
- void main()
- {
-
-
- initial(); //初始化。
- clear_screen(0); //清屏。
- cs1=0; //选左半屏。
- cs2=1;
- hz_LCDDisp16(0,0,hz_wen,0); //显示“温”字。
- hz_LCDDisp16(0,15,hz_du,0); //显示“度”字。
- hz_LCDDisp16(0,30,maohao,1); //显示“:”。
- hz_LCDDisp16(2,0,hz_shi,0); //显示“湿”字。
- hz_LCDDisp16(2,17,hz_du,0); //显示“度”字。
- hz_LCDDisp16(2,31,maohao,1); //显示“:”。
- hz_LCDDisp16(6,0,hz_wen,0); //显示“温”字。
- hz_LCDDisp16(6,15,hz_du,0); //显示“度”字。
- hz_LCDDisp16(6,30,maohao,1); //显示“:”。
- sht11_restart();
- while(1) //无限循环。
- {
- sht11_process();
- pcf8591_process();
- }
- }
-
复制代码
所有资料51hei提供下载:
1111.zip
(131.22 KB, 下载次数: 277)
|