|
4.C(44): error C129: missing ';' before 'U8FLAG' 如何修改
[复制链接]
#include
#include
#include "1602.h"
#include "DH11.h"
#include "2401.h"
#include "DS1302.h"
#define U8 uint8
#define uint unsigned int
#define uchar unsigned char
sbit Led_Alert=P2^1; //报警灯
sbit In_Alert=P2^3; //报警信号输入
sbit Beep=P2^4; //蜂鸣器
sbit Key_Up = P1^1;
sbit Key_Down = P1^2;
sbit Key_Set = P1^0;
sbit Key_Review = P1^3;
//定义标识
volatile bit FlagStartRH = 0; //开始温湿度转换标志
volatile bit FlagKeyPress = 0; //有键按下标志
volatile bit FlagAlert = 0; //报警状态标志
volatile bit FlagReview = 0; //查询标志
//定义温湿度传感器用外部变量
extern U8 U8FLAG,k;
extern U8 U8count,U8temp;
extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
extern U8 U8comdata;
extern U8 count, count_r;
//温湿度传感器用变量
U16 temp;
S16 temperature, humidity;
U16 RHCounter;
//按键响应用变量
U8 keyvalue, keyUp, keyDown, keySet, keyReview;
U8 FlagSet;
//DS1302 时钟用变量
//SYSTEMTIME CurrentTime;
uchar year, month, day, hour, minute, second;
//报警及存储用变量
//char * pSave;
//字符串显示用变量
uchar str1[6] = "000000";
uchar AlertDate[9]="00-00-00", AlertTime[9]="00:00:00";
uchar hide;
//函数声明
void int2str(int x, char* str);
void Delay1ms(unsigned int count);
void Data_Init();
void Timer0_Init();
void Timer0_ISR () ;
void SaveAlert();
void LoadAlert();
void KeyProcess(uint num);
//整型转字符串的函数,转换范围 0--65536
void int2str(int x, char* str)
{
int i=1;
int tmp=10;
while(x/tmp!=0)
{
i++;
tmp*=10;
}
tmp=x;
str[i]='\0';
while(i>1)
{
str[--i]='0'+(tmp%10);
tmp/=10;
}
str[0]=tmp+'0';
}
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<120;j++);
}
//数据初始化
void Data_Init()
{
RHCounter = 0;
Led_Alert = 1;
keyvalue = 0;
keyUp = 1;
keyDown = 1;
keySet = 1;
keyReview = 1;
FlagSet = 0;
hide = 0;
AlertDate[8]='\0';
AlertTime[8]='\0';
}
//定时器 0 初始化
void Timer0_Init()
{
ET0 = 1; //允许定时器 0 中断
TMOD = 1; //定时器工作方式选择
TL0 = 0x06;
TH0 = 0xf8; //定时器赋予初值
TR0 = 1; //启动定时器
}
//定时器 0 中断
void Timer0_ISR (void) interrupt 1 using 0
{
TL0 = 0x06;
TH0 = 0xf8; //定时器赋予初值
//每 2 秒钟启动一次温湿度转换
RHCounter ++;
if (RHCounter >= 450)
{
FlagStartRH = 1;
RHCounter = 0;
//设定闪烁标志
if (hide == 1) hide = 0;
else hide = 1;
}
}
//存入报警日期时间
void SaveAlert()
{
xxwrteeprom(0, year);
DELAY(1500);
wrteeprom(1, month);
DELAY(1500);
wrteeprom(2, day);
DELAY(1500);
wrteeprom(3, hour);
DELAY(1500);
wrteeprom(4, minute);
DELAY(1500);
wrteeprom(5, second);
DELAY(1500);
}
//载入报警日期时间
void LoadAlert()
{
uchar value;
value = rdeeprom(0);
AlertDate[0]=value/10+48;
AlertDate[1]=value%10+48;
value = rdeeprom(1);
AlertDate[3]=value/10+48;
AlertDate[4]=value%10+48;
value = rdeeprom(2);
AlertDate[6]=value/10+48;
AlertDate[7]=value%10+48;
value = rdeeprom(3);
AlertTime[0]=value/10+48;
AlertTime[1]=value%10+48;
value = rdeeprom(4);
AlertTime[3]=value/10+48;
AlertTime[4]=value%10+48;
value = rdeeprom(5);
AlertTime[6]=value/10+48;
AlertTime[7]=value%10+48;
}
void KeyProcess(uint num)
{
switch (num)
{
case 1: //Up 键被按下
switch (FlagSet)
{
case 0:
case 1:
break;
case 2: //年
if (year<99) year++;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_YEAR,year);
Write1302(0x8e,0x80); //禁止写入
break;
case 3: //月
if (month<12) month++;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_MONTH,month);
Write1302(0x8e,0x80); //禁止写入
break;
case 4: //日
if (day<31) day++;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_DAY,day);
Write1302(0x8e,0x80); //禁止写入
break;
case 5: //时
if (hour<23) hour++;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_HOUR,hour);
Write1302(0x8e,0x80); //禁止写入
break;
case 6: //分
if (minute<60) minute++;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_MINUTE,minute);
Write1302(0x8e,0x80); //禁止写入
break;
case 7: //秒
if (second<60) second++;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_SECOND,second);
Write1302(0x8e,0x80); //禁止写入
break;
}
break;
case 2: //Down 键被按下
switch (FlagSet)
{
case 0:
case 1:
break;
case 2: //年
if (year>0) year--;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_YEAR,year);
Write1302(0x8e,0x80); //禁止写入
break;
case 3: //月
if (month>0) month--;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_MONTH,month);
Write1302(0x8e,0x80); //禁止写入
break;
case 4: //日
if (day>0) day--;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_DAY,day);
Write1302(0x8e,0x80); //禁止写入
break;
case 5: //时
if (hour>0) hour--;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_HOUR,hour);
Write1302(0x8e,0x80); //禁止写入
break;
case 6: //分
if (minute>0) minute--;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_MINUTE,minute);
Write1302(0x8e,0x80); //禁止写入
break;
case 7: //秒
if (second>0) second--;
Write1302(0x8e,0x00); //写入允许
DS1302_SetTime(DS1302_SECOND,second);
Write1302(0x8e,0x80); //禁止写入
break;
}
break;
case 3: //Set 键被按下。FlagSet 0-报警;1-关报警;2-设置年;3-月;4-日;5-时;6-分;7-秒 if (FlagReview==0) //只有不查询时才能设定
{
FlagSet ++;
if (FlagSet==1)
{
L1602_string(2,10,"A");
}
else
{
L1602_string(2,10," ");
}
if (FlagSet>=8)
{
FlagSet = 0;
}
}
break;
case 4: //Review 键被按下
if (FlagReview == 0)
{
FlagReview = 1;
LoadAlert();
L1602_string(1,1," ");
L1602_string(2,1," ");
L1602_string(1,1,AlertDate);
L1602_string(1,9," Alert ");
L1602_string(2,1,AlertTime);
L1602_string(2,9," ");
}
else
{
FlagReview = 0;
}
break;
default:
break;
}
}
/********************************************************************
*名称 : Main()
*功能 : 主函数
***********************************************************************/
void main()
U16 i, j, testnum;
EA = 0;
Timer0_Init(); //定时器 0 初始化
Data_Init();
Initial_DS1302();
EA = 1;
L1602_init();
L1602_string(1,1," Welcome to My ");
L1602_string(2,1,"Infrared Monitor");
//延时
for (i=0;i<1000;i++)
for (j=0;j<1000;j++)
{;}
//清屏
L1602_string(1,1," T C");
L1602_string(2,1," H %");
while(1)
{
//查询报警信号
//FlagSet=0 为报警状态,
//FlagSet=1 为关报警状态,
//FlagSet=2,3,4,5,6,7 依次为设置年,月,日,时,分,秒状态
if ((FlagSet==1)&&(In_Alert==0)) //首次触发报警则存入报警时间
{
SaveAlert();
FlagAlert=1;
Beep=0;
Led_Alert = 0;
}
else //报警未打开或者无警可报
{
FlagAlert=0;
Beep=1;
Led_Alert = 1;
}
if (FlagStartRH == 1)
{
//温湿度转换标志检查
TR0 = 0;
testnum = RH();
FlagStartRH = 0;
TR0 = 1;
//读出温湿度,只取整数部分
humidity = U8RH_data_H;
temperature = U8T_data_H;
//读出日期时间值
DS1302_GetTime(&CurrentTime);
year = CurrentTime.Year;
month = CurrentTime.Month;
day = CurrentTime.Day;
hour = CurrentTime.Hour;
minute = CurrentTime.Minute;
second = CurrentTime.Second;
DateToStr(&CurrentTime);
TimeToStr(&CurrentTime);
//如果不处于查询状态则显示当前日期时间温度湿度
if (FlagReview==0)
{
//清屏
L1602_string(1,1," T C");
L1602_string(2,1," ");
L1602_string(2,12,"H %");
//显示温湿度
if (temperature<0)
{
L1602_string(2,7,"-");
}
temperature = abs(temperature);
int2str(temperature,str1);
L1602_string(1,14,str1);
int2str(humidity,str1);
L1602_string(2,14,str1);
L1602_string(1,1,CurrentTime.DateString);
L1602_string(2,1,CurrentTime.TimeString);
//产生时间设定时的闪烁效果,只在未查询且闪烁标志置位时运行
if (hide==1)
{
switch (FlagSet)
{
case 0:
case 1:
break;
case 2: //年
L1602_string(1,1," ");
break;
case 3: //月
L1602_string(1,4," ");
break;
case 4: //日
L1602_string(1,7," ");
break;
case 5: //时
L1602_string(2,1," ");
break;
case 6: //分
L1602_string(2,4," ");
break;
case 7: //秒
L1602_string(2,7," ");
break;
default:
break;
}
}
}
}
//以下为键盘查询,当有按键从按下到弹起时,该按键被响应。
if ((Key_Up)&&(keyUp==0)) {FlagKeyPress = 1; keyvalue = 1;}
else if ((Key_Down)&&(keyDown==0)) {FlagKeyPress = 1; keyvalue = 2;} else if ((Key_Set)&&(keySet==0)) {FlagKeyPress = 1; keyvalue = 3;}
else if ((Key_Review)&&(keyReview==0)) {FlagKeyPress = 1; keyvalue = 4;} if (FlagKeyPress == 1)
{
KeyProcess(keyvalue);
FlagKeyPress = 0;
}
if (!Key_Up) keyUp = 0;
else keyUp = 1;
if (!Key_Down) keyDown = 0;
else keyDown = 1;
if (!Key_Set) keySet = 0;
else keySet = 1;
if (!Key_Review) keyReview = 0;
else keyReview = 1;
}
|
|