科技大 发表于 2012-5-9 10:52:09

温湿度检测设计有如下程序错误,请问如何改?

include<intrins.h>
#include <absacc.h>
#include <math.h>
#include "1602.h"
#include "sht11.h"
#define uchar unsigned char
#define uint   unsigned int
#define KEY_CANCEL 0x08
#define KEY_UP 0x04
#define KEY_DOWN 0x02
#define KEY_ENTER 0x01
//uchar xdata key_lcd_val_tmp;//临时保存用户设置的数据,当用户按ENTER键时写入相应寄存器
//uchar current_page=1;//记录当前正在显示的页面,初始状态显示第一页
uchar is_setting_system = 0;//记录系统是否处于设置系统状态==1,默认是显示页面状态==0
uintkey_value = 0; //键值为零
uchar key_value_valid = 0;//系统可以处理新键值
uchar j;
sbit Beep   =P3^6;
sbit LED_RED=P1^5;
sbit LED_GREEN=P1^4;                        
sbit KEY01=P2^0;
sbit KEY02=P2^1;
sbit KEY03=P2^2;
sbit KEY04=P2^3;                  
void delay(uint);
void Init();
void delay_LCM(uint);                                     //LCD延时子程序
void initLCM( void);                       //LCD初始化子程序
void lcd_wait(void);      //LCD检测忙子程序
void WriteCommandLCM(uchar WCLCM,uchar BusyC);                              //写指令到ICM子函数
void WriteDataLCM(uchar WDLCM);                                             //写数据到LCM子函数
void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //显示指定坐标的一个字符子函数
void DisplayListChar(uchar X,uchar Y,uchar code *DData);                                       //显示指定坐标的一串字符子函数
void weishu1(float m);         
void display(void);
void alarm(void);
void handle_key_lcd1602(void);//处理按键与lcd1602显示,while循环中直接使用       
/**********main funcation************/
void main(void)
{
/*********************************/
        uint temp,humi;
//        uint Temp_CHA;
//        float humi_val;
//        float temp_val;                //定义两个共同体,一个用于湿度,一个用于温度
//        float dew_point;                          //用于记录露点值
        uchar error;                //用于检验是否出现错误
        uchar checksum;//CRC
        bit temp_f;
        unsigned char HUMI,TEMP;
        HUMI=0X01;
        TEMP=0X02;
        temp_f=1;
//        uchar wendu;//用于记录温度
//        uchar shidu;//用于记录湿度
/**********************************/
//delay(500);                      //系统延时500ms启动
//t=0;                   //采样值存储单元初始化为0
initLCM( );
Init();
LED_GREEN=0;
Beep =1;
delay(1000);
Beep =0;
WriteCommandLCM(0x01,1);                  //清显示屏
DisplayListChar(0,0,str1);
DisplayListChar(0,1,str2);
s_softreset();
//s_connectionreset();                           //启动连接复位
while(1)
{
handle_key_lcd1602();
if( is_setting_system == 0 )
{
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);            //修正相对湿度及温度
//                   dew_point=calc_dewpoint(humi_val.f,temp_val.f); //计算e dew_point
temp=temp_val.f*10;
humi=humi_val.f*10;
Temp_bai=temp/1000;                   //温度百位
Temp_shi=temp%1000/100;           //温度十位       
Temp_ge =temp%100/10;                        //温度个位
Temp_fen=temp%10;                                //温度小数点后第一位               
Humi_bai=humi/1000;                   //湿度百位
Humi_shi=humi%1000/100;           //湿度十位       
Humi_ge =humi%100/10;                        //湿度个位
Humi_fen=humi%10;                                //湿度小数点后第一位                  
alarm();
if(( Temp_bai !=0) && ( Temp_bai !=1) )
{
temp=temp*-1.0+10.0;
Temp_shi=temp%1000/100;           //温度十位       
Temp_ge =temp%100/10;                        //温度个位
Temp_fen=temp%10;                                //温度小数点后第一位
                                /*
Temp_CHA=Temp_shi*100+Temp_ge*10+Temp_fen;
Temp_CHA=55.0-Temp_CHA;
Temp_shi=Temp_CHA/100;                           //温度十位       
Temp_ge =Temp_CHA%100/10;                        //温度个位
Temp_fen=Temp_CHA%10;                                //温度小数点后第一位
                                */
display0();       
                        }
                        else
                        {
                                display1();       
                        }
                           display2();
                }
                }
                else
handle_key_lcd1602();
}
}
/***********************/
void Init()
{
//TMOD=0x11;
//TL1=0x3C;
//TH1=0xB0;
EA=1;
//        ET1=1;        //定时器1允许
IT1=1;
EX1=1;        //外部中断1允许
//        TR1=1;        //定时器1运行
}
/*********延时K*1ms,12.000mhz**********/

void delay(uint k)
{
   uint i,j;
   for(i=0;i<k;i++)
    for(j=0;j<100;j++);
}   
/*****************报警子函数*******************/

void alarm(void)
{
       uint sht_temp1;
       uint sht_temp2;
       uint sht_humi1;
       uint sht_humi2;
       uint sht_temp;
       uint sht_humi;
       sht_temp1=sht_10*100+sht_10*10+sht_10;
       sht_temp2=sht_10*100+sht_10*10+sht_10;
       sht_humi1=sht_10*100+sht_10*10+sht_10;
       sht_humi2=sht_10*100+sht_10*10+sht_10;
       sht_temp =Temp_bai*100+Temp_shi*10+Temp_ge;
       sht_humi =Humi_bai*100+Humi_shi*10+Humi_ge;
       if(sht_temp>=sht_temp1)
       {
               Beep   =1;
               LED_RED=0;
               LED_GREEN=1;
                delay(500);       
       }
       else
       {
               Beep   =0;
               LED_RED=1;
               LED_GREEN=0;       
       }
       if(sht_temp<=sht_temp2)
       {
               Beep   =1;
               LED_RED=0;
               LED_GREEN=1;
                delay(500);       
       }
       else
       {
               Beep   =0;
               LED_RED=1;
               LED_GREEN=0;       
       }
       if(sht_humi>=sht_humi1)
       {
               Beep   =1;
               LED_RED=0;
               LED_GREEN=1;
                delay(500);       
       }
       else
       {
               Beep   =0;
               LED_RED=1;
               LED_GREEN=0;       
       }
       if(sht_humi<=sht_humi2)
       {
               Beep   =1;
               LED_RED=0;
               LED_GREEN=1;
                delay(500);       
       }
       else
       {
               Beep   =0;
               LED_RED=1;
               LED_GREEN=0;       
       }
       /*
       if(sht_temp>=124 || sht_temp<=-40 || sht_humi>=101 || sht_humi<0)
       {
               Beep   =1;
               LED_RED=0;
               LED_GREEN=1;
                delay(1000);       
       }
       else
       {
               Beep   =0;
               LED_RED=1;
               LED_GREEN=0;       
       }*/
}
void handle_key_lcd1602(void) //处理按键与lcd1602显示,while循环中直接使用
{
       
        //uchar j=0;//临时循环变量
        //static uchar xdata save_data={0,0,0,0,0,0,0,0,0,0,0,0};
        //static uchar inner_page_offset=1;
        //static uchar key_up_down_value = 0;//指向0f
if( is_setting_system == 0 ) //当前处于循环显示 数据界面
        {
if(key_value_valid==1)//按键值有效,按键按下(检测ENTER按键按下)
                        {
                                if(key_value==KEY_CANCEL)
                                        {
                                                        is_setting_system = 1;//下一次进入系统设置页面
                                                        //inner_page_offset = 1;
                                                        display3();
                                                        display4();
                                        }
                               
                        }                       
        }                                       
        else//当前处于设置界面
        {
        if(key_value_valid == 1)//有效按键按下
                        {
switch(key_value)//处理有效键值
                                {
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/               
case KEY_UP://按下的是向上键↑
{
sht_10++;
if(sht_10>=9)
sht_10=9;
display3();
display4();       
}       
break;       
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/                                                case KEY_DOWN://按下的是向下键↓
{
sht_10--;
if(sht_10<=0)
sht_10=0;
                                                       
display3();
display4();       
                                                }
break;
/*ENTER ENTER ENTER ENTER ENTER ENTER */
case KEY_ENTER:
{
j++;
if(j>12)
j=0;
                                                }
break;
/*CANCEL CANCEL CANCEL CANCEL CANCEL */
case KEY_CANCEL:
is_setting_system = 0;//下一次进入系统设置页面                                               
break;
default:
break;       
                                }                                               
                        }
        }
key_value_valid=0;//键值无效,为下一次按键做准备
EX1=1;        //外部中断1允许
}
/**************************/
void interrupt_key() interrupt 2 using 2
{
uint delay_time = 10000;
uchar key_command = 0;
//uchar key_command1 = 0;
uchar i;
uchar key_tmep_value[]={0x00,0x00,0x00,0x00};
//置端口为输入状态
KEY01 = 1;
KEY02 = 1;
KEY03 = 1;
KEY04 = 1;       
EX1=0;        //外部中断1允许
if(key_value_valid==0)//系统正在处理按键信息,所以当前按键无效
{
while(delay_time--);//延时片刻,待信号稳定
key_tmep_value = ~KEY01;
key_tmep_value = ~KEY02;
key_tmep_value = ~KEY03;
key_tmep_value = ~KEY04;
for(i=0;i<4;i++)
                                {                               
key_command |= (key_tmep_value <<i);
                                }
switch(key_command)
                                {
case KEY_UP:
key_value = key_command;//获取键值
key_value_valid = 1;//键值有效
break;
case KEY_DOWN:
key_value = key_command;//获取键值
key_value_valid = 1;//键值有效       
break;
case KEY_ENTER:
key_value = key_command;//获取键值
key_value_valid = 1;//键值有效
break;               
case KEY_CANCEL:
key_value = key_command;//获取键值
key_value_valid = 1;//键值有效                                                                                               
break;       
default:
//serial_send_string("key error",strlen("key error"));//--test
break;
                                }
                }
错误提示如下;

科技大 发表于 2012-5-9 10:52:56

请问:如何修改成功

mtlsh 发表于 2012-5-9 11:00:01

从哪搬来的程序。。。很明显是缺少"1602.h" “sht11.h"两个头文件 和 str1,str2没有定义

科技大 发表于 2012-5-9 11:03:03

mtlsh 发表于 2012-5-9 11:00 static/image/common/back.gif
从哪搬来的程序。。。很明显是缺少"1602.h" “sht11.h"两个头文件 和 str1,str2没有定义
...

那如何修改呢?{:handshake:}

xiaoyigechaos 发表于 2012-5-9 11:11:45

程序不全吧,你有那两个.h文件吗

科技大 发表于 2012-5-9 11:14:12

xiaoyigechaos 发表于 2012-5-9 11:11 static/image/common/back.gif
程序不全吧,你有那两个.h文件吗

因为仿真不成功,所以没生成{:sad:}

mtlsh 发表于 2012-5-9 11:32:56

科技大 发表于 2012-5-9 11:14 static/image/common/back.gif
因为仿真不成功,所以没生成

我靠,彻底地被你打败!!!!!"1602.h" “sht11.h"是要你自己写的啊 。 “没生成”是什么意思??

科技大 发表于 2012-5-10 20:02:08

mtlsh 发表于 2012-5-9 11:00 static/image/common/back.gif
从哪搬来的程序。。。很明显是缺少"1602.h" “sht11.h"两个头文件 和 str1,str2没有定义
...

大哥,如何定义啊?

jackielau 发表于 2012-5-10 20:30:22

科技大很厉害 晕倒了!!

little_Monkey 发表于 2012-5-10 21:20:13

名字很霸气,问题很BC

kafeiwutang 发表于 2012-5-10 21:38:55

第一行我就没看懂

科技大 发表于 2012-5-11 17:52:04

little_Monkey 发表于 2012-5-10 21:20 static/image/common/back.gif
名字很霸气,问题很BC

{:titter:}一个名称而已

科技大 发表于 2012-5-11 17:52:44

jackielau 发表于 2012-5-10 20:30 static/image/common/back.gif
科技大很厉害 晕倒了!!

我起清华 你就真以为是清华{:titter:}
页: [1]
查看完整版本: 温湿度检测设计有如下程序错误,请问如何改?