哪位高人帮忙解答一下问题,哪错了,怎么错了。希望能得到有用的回答。有些文字说明没改。
#include "reg51.h"
#include "string.h"
#include "stdio.h"
#include "lcd.h"
#include "key.h"
#include "adc.h"
#include "time.h"
/**********************************
变量定义
**********************************/
sbit relay=P2^3; //继电器控制位
uchar disp_buff[16]; //电量百分比
uchar i=0; //中间变量
uchar key_num = 0; //按键扫描标志位变量
uchar flag_display = 0; //显示界面标志位变量
uint temp_max = 45; //温度最大值变量
uint temp_min = 15; //温度最小值变量
uint time_jishi = 0; //10ms计时变量
/**********************************
函数声明
**********************************/
void Delay_function(uint x); //延时函数(ms)
void Key_function(void); //按键函数
void Monitor_function(void); //监测函数
void Display_function(void); //显示函数
void Manage_function(void); //处理函数
/****
******* 主函数
*****/
void main()
{
Lcd1602_Init(); //LCD1602初始化
Delay_function(50); //延时50ms
lcd1602_clean(); //清屏
Delay_function(50); //延时50ms
Timer0_Init(); //定时器0初使化函数
Delay_function(50); //延时50ms
while(1)
{
Key_function(); //按键函数
Monitor_function(); //监测函数
Display_function(); //显示函数
Manage_function(); //处理函数
Delay_function(10); //延时10ms
time_jishi++; //计时变量+1
if(time_jishi >= 5000)
{
time_jishi = 0;
}
}
}
/****
******* 延时 x ms函数
*****/
void Delay_function(uint x)
{
uint m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
/****
*******按键函数
*****/
void Key_function(void)
{
key_num =Keyboard_Scan(); //按键扫描
if(key_num!=0) //有按键按下
{
switch(key_num)
{
case 1: //按键1,切换设置界面
flag_display++;
if(flag_display >=3)
flag_display = 0;
lcd1602_clean(); //清屏
break;
case 2;
if(flag_display==2)
{
switch(key_num)
{
case 1: //按键1,切换设置界面
flag_display++;
if(flag_display >=3)
flag_display = 0;
lcd1602_clean();
case 1: //按键2
if(flag_display ==2) //界面1:温度最小值+1
{
if(temp_min < 999)
temp_min++;
}
if(flag_display == 1) //界面2:温度最大值+1
{
if(temp_max < 99)
temp_max++;
}
break;
case 3: //按键3
if(flag_display == 2) //界面1:温度最小值-1
{
if(temp_min > 0)
temp_min--;
}
if(flag_display == 3) //界面2:温度最大值-1
{
if(temp_max > 0)
temp_max--;
}
break;
default:
break;
}
}
break;
case 3; //按键3,切换设界面
if(flag_display ==3)
lcd1602_clean();
break;
default:
break;
}
}
}
/****
*******显示函数
*****/
void Display_function(void)
{
switch(flag_display) //根据不同的显示模式标志位,显示不同的界面
{
case 0: //界面0
lcd1602_display_str(1,0,"predict:");
lcd1602_display_str(1,11,"h");
lcd1602_display_str(1,14,"m");
lcd1602_display_predict(1,9,"predict_h");
lcd1602_display_predict(1,12,"predict_m");
lcd1602_display_predict(1,15,"predict_s");
i=(uint)voltage*16/256;
memset(disp_buff[16],'\xFF',i);
memset(disp_buff[16]+i,'\xDB',16-i);
lcd1602_display_str(2,0,disp_buff[16]);
break;
case 1;
lcd1602_display_str(1,0,"Temperature:"); //界面1:显示温度
lcd1602_display_temp(2,3,temp);
break;
case 2: //界面2:显示设置温度最小值
{
switch(flag_display)
case 1;
lcd1602_display_str(1,0,"Temp_Min=");
lcd1602_display_str(2,0,"Temp_Max=");
if(time_jishi % 20 == 0)
{
lcd1602_display_num(1,9,"temp_min");
lcd1602_display_num(2,9,"temp_max");
}
if(time_jishi % 40 == 0)
{
lcd1602_display_str(1,9," ");
}
break;
case 2: //界面3:显示设置温度最大值
lcd1602_display_str(1,0,"temp_Min=");
lcd1602_display_str(2,0,"Temp_Max=");
if(time_jishi % 20 == 0)
{
lcd1602_display_num(1,9,temp_min);
lcd1602_display_num(2,9,temp_max);
}
if(time_jishi % 40 == 0)
{
lcd1602_display_str(2,9," ");
}
break;
case 3;
lcd1602_display_str(1,0,"Temperature:"); //界面1:显示温度
lcd1602_display_temp(2,3,temp);
break;
default:
break;
}
}
}
/****
*******处理函数
*****/
void Manage_function()
{
if(voltage>=5||temp_min>=temp||temp_max<=temp)
{
delay_funtion()
relay=0;
}
else
relay=1;
}