📄 usermain.c
字号:
//包含文件如下
#include "c51base.h"
uchar password[4];
uchar *I2c_pw =(uchar xdata *)0x8130;
struct SlineTable *I2c_humtable = (struct SlineTable xdata *)0x8100;
struct Scheck *I2c_mhumtable = (struct Scheck xdata *)0x8110;
struct Scheck *I2c_mtemptable = (struct Scheck xdata *)0x8120;
struct Scheck *I2c_yalitable = (struct Scheck xdata *)0x8140;
struct Stimer *I2c_timertable = (struct Stimer xdata *)0x8200;
/*************************
初始化函数。
*************************/
void DeviceInit()
{
InitSFR_SM89516();
CommInit();
TimerInit();
InitEPROM();
EA = 1;
}
void GetData(uchar *Data_buf)
{
uchar idata time[7],i,temp;
static uint temp_count=0,temp_buf[5];
WDTReset_SM89516();
GetTime(7,time);
Data_buf[0] = time[4];
Data_buf[1] = time[5];
Data_buf[2] = time[6];
Data_buf[3] = time[0];
Data_buf[4] = time[1];
Data_buf[5] = time[2];
Data_buf[6] = time[3];
// printf("电压= %d伏特",(int)Data_buf[8]);
temp_buf[temp_count++] = GetTemper(10);
if(temp_count>4)
temp_count = 0;
temp = temp_buf[i];
for(i=0;i<3;i++)
{
if(temp <= temp_buf[i+1])
temp = temp_buf[i+1];
}
Data_buf[7] = (temp_buf[0]+temp_buf[1]+temp_buf[2]+temp_buf[3]+temp_buf[4])/5;
}
void ProcessData(uchar *Data_buf)
{
uchar temp;
temp = Data_buf[0];
}
/*******************************************
主界面显示函数,主要显示为:
1,时间显示,在液晶最上面一行显示当前的时间
2,温度显示,在液晶的第二行显示当前的温度
3,湿度显示,在液晶的第二行显示当前的湿度
4,下一个启动的定时器编号和时间
*******************************************/
void MainDisplay(uchar *Data_buf)
{
uint value;
uchar vol[4];
DisplayStr(6,2,":");
DisplayStr(9,2,":"); //时间显示
DisplayType(4,2,(Data_buf[0]%100)/10+'0');
DisplayType(5,2,Data_buf[0]%10+'0');
DisplayType(7,2,(Data_buf[1]%100)/10+'0');
DisplayType(8,2,Data_buf[1]%10+'0');
DisplayType(10,2,(Data_buf[2]%100)/10+'0');
DisplayType(11,2,Data_buf[2]%10+'0');
// printf("value = %d\n",(int)Data_buf[6]);
DisplayStr(0,0,"20");
DisplayStr(4,0,"年");
DisplayStr(8,0,"月");
DisplayStr(12,0,"日");
DisplayStr(0,1,"星期");
DisplayStr(0,2,"时间");
DisplayStr(6,2,":");
DisplayStr(9,2,":");
DisplayType(2,0,(Data_buf[3]%100)/10+'0');
DisplayType(3,0,Data_buf[3]%10+'0');
DisplayType(6,0,(Data_buf[4]%100)/10+'0');
DisplayType(7,0,Data_buf[4]%10+'0');
DisplayType(10,0,(Data_buf[5]%100)/10+'0');
DisplayType(11,0,Data_buf[5]%10+'0');
switch(Data_buf[6])
{
case 0:DisplayStr(4,1,"一");
break;
case 1:DisplayStr(4,1,"二");
break;
case 2:DisplayStr(4,1,"叁");
break;
case 3:DisplayStr(4,1,"四");
break;
case 4:DisplayStr(4,1,"五");
break;
case 5:DisplayStr(4,1,"六");
break;
case 6:DisplayStr(4,1,"日");
break;
default:
break;
}
DisplayStr(0,3,"室内温度 ");
DisplayStr(10,3,"~ ");
// printf("温度通道 %d\n",(int)Data_buf[7]);
if(Data_buf[7]<=90 && Data_buf[7]>=0)
{
if(Data_buf[7]>=10)
DisplayType(8,3,(Data_buf[7]%100)/10+'0');
else
DisplayStr(8,3," ");
DisplayType(9,3,Data_buf[7]%10+'0');
}
value = ADCRead(1);
value = value/6;
vol[0] = ((int)value)%100/10+'0';
// printf("vol[0]=%d\n",(int)vol[0]);
vol[1] = ((int)value)%100%10+'0';
DisplayStr(7,1,"湿度");
DisplayStr(12,1,vol);
DisplayStr(14,1,"%");
}
void SendData()
{
uchar key_value,temper;
CLEAR_SCREEN();
DisplayStr(3,0,"DATA CHECK");
while(1)
{
key_value = WaitKey(1000);
if(key_value == 'x' || key_value == 0xff)
return;
if(key_value == 'e')
{
temper = GetTemper(10);
putchar(0x01);
putchar(0x0f);
printf("2003年12月1日星期一");
printf("现在房间温度");
putchar(0x11);
printf("%d",(int)temper);
putchar(0x0f);
printf("摄氏度");
putchar(0x04);
DisplayStr(0,1,"Data Send success");
WaitKey(30);
CLEAR_SCREEN();
DisplayStr(3,0,"DATA CHECK");
}
}
}
void MenuSec()
{
uchar key_value,i;
i = 0;
CLEAR_SCREEN();
while(1)
{
if(i<=3)
{
DisplayStr(0,i,">");
DisplayStr(2,0,"时间日期设定 ");
DisplayStr(2,1,"密码设定 ");
DisplayStr(2,2,"Send Data ");
DisplayStr(2,3," ");
}
key_value = WaitKey(1000);
if(key_value == 'x' || key_value == 0xff)
return;
if(key_value == 'e')
{
switch(i)
{
case 0:TimeSetup();CLEAR_SCREEN();
break;
case 1:PWSeting();CLEAR_SCREEN();
break;
case 2:SendData();CLEAR_SCREEN();
break;
default:
break;
}
}else if(key_value == 'd')
{
if(i<2)
{
if(i<=3)
DisplayStr(0,i," ");
else if(i>=4 && i<=7)
DisplayStr(0,i-4," ");
else if(i>=8)
DisplayStr(0,i-8," ");
i++;
}
}else if(key_value == 'u')
{
if(i>0)
{
if(i<=3)
DisplayStr(0,i," ");
else if(i>=4 && i<=7)
DisplayStr(0,i-4," ");
else if(i>=8)
DisplayStr(0,i-8," ");
i--;
}
}
}
}
/****************************************************************
主函数
****************************************************************/
uchar xdata ad_value[] ={"24"};
code uint *table[]=
{
ad_value,
};
void main()
{
uchar key_value,temper;
uchar Data_buf[9];
DeviceInit();
printf("51测试板, %s\n",__DATE__);
LcdInit();
CLEAR_SCREEN();
I2CDataCheck();
// while(1);
CLEAR_SCREEN();
printf("测试%s\n",table[0]);
while(1)
{
LcdRs();
GetData(Data_buf); //取读取显示的数据
ProcessData(Data_buf);
MainDisplay(Data_buf);
if(IsKeyCheck())// if(SerialCheck())
{
key_value = WaitKey(10);//ReadSerialBuf(10);
// printf("key_value = %c\n",key_value);
switch(key_value)
{
case 'e':if(PWcompare())
MenuSec();
CLEAR_SCREEN();
break;
case 'x':TimeDisplay();CLEAR_SCREEN();
break;
case 'u':
temper = GetTemper(10);
putchar(0x01);
putchar(0x0f);
printf("现在时间是");
printf("%d",(int)Data_buf[0]);
printf("点");
printf("%d",(int)Data_buf[1]);
printf("分");
printf("%d",(int)Data_buf[2]);
printf("秒");
printf("房间温度");
printf("%d",(int)temper);
printf("摄氏度");
putchar(0x04);
WaitKey(30);
CLEAR_SCREEN();
DisplayStr(3,0,"DATA CHECK");
break;
default:
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -