仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
仿真图
单片机源程序如下:
- //*******************************
- //*********主函数*****************
- void main(void)
- {
- uchar i,j;
- unsigned int temp,humi;
- value humi_val,temp_val; //定义两个共同体,一个用于湿度,一个用于温度
- unsigned char error; //用于检验是否出现错误
- unsigned char checksum; //CRC
-
- s_connectionreset(); //启动连接复位
- LCD_init();
-
- while(1)
- {
-
- error=0; //初始化error=0,即没有错误
- error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); //温度测量
- error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); //湿度测量
- if(error!=0) s_connectionreset(); ////如果发生错误,系统复位
- else
- {
- humi_val.f=(float)humi_val.i; //转换为浮点数
- temp_val.f=(float)temp_val.i; //转换为浮点数
- calc_sth10(&humi_val.f,&temp_val.f); //修正相对湿度及温度
- temp=temp_val.f*10;
- //temp是温度值,temp,小数点位,个位求出来,一个一个的显示
-
- humi=humi_val.f*10-35;
- //humi是湿度值,小数点位,个位求出来,一个一个的显示
-
- //添加程序
- //第一行显示湿度
- LCD_disp_char(0x00,1,1);
- for(i=0;i<1;i++)
- {
- DisplayListChar(0x01,0,&table1[i],6);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)//十位
- {
- i=humi/100;
- DisplayListChar(0x07,0,&digit1[i],1);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)//个位
- {
- i=humi%100/10;
- DisplayListChar(0x08,0,&digit1[i],1);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)//小数点
- {
- DisplayListChar(0x09,0,&dian[i],1);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)
- {
- i=humi%10;
- DisplayListChar(0x0A,0,&digit1[i],1);
- delay_n40us(10);
- }
- //在LCD第2行显示温度
- LCD_disp_char(0x40,0,1);
- for(i=0;i<1;i++)//wendu:
- {
- DisplayListChar(0x41,1,&table[i],6);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)//十位
- {
- i=temp/100;
- DisplayListChar(0x47,1,&digit[i],1);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)//个位
- {
- i=temp%100/10;
- DisplayListChar(0x48,1,&digit[i],1);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)//小数点
- {
- DisplayListChar(0x49,1,&dian[i],1);
- delay_n40us(10);
- }
- for(i=0;i<1;i++)
- {
- i=temp%10;
- DisplayListChar(0x4A,1,&digit[i],1);
- delay_n40us(10);
- }
-
- }
- }
- }
复制代码
全部资料51hei下载地址:
LCD1602显示温湿度-程序.zip
(45.87 KB, 下载次数: 56)
|