这个是主函数的代码
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <absacc.h>
#include <math.h>
#define U8INT unsigned char
#define U16INT unsigned int
#define U32INT unsigned long int
sbit Key_SET = P2^0; //定义三个设置按键
sbit Key_ADD = P2^1;
sbit Key_SUB = P2^2;
sbit Key_OK = P2^3;
sbit Led_jiashi=P3^4;//定义湿度控制功能
sbit Led_qushi=P3^3;
extern Mode;
extern humidity;
char HH,HL;
extern U8RH_data_H; //高8位湿度整数
extern U8RH_data_L; //低8位湿度小数
extern void L1602_string(U8INT hang,U8INT lie,U8INT *p);
extern void L1602_char(U8INT hang,U8INT lie,U8INT sign);
extern void L1602_int(U8INT hang, U8INT lie, int num);
extern void LCD_Write_Data(U8INT dat);
extern void LCD_Write_CMD(U8INT cmd);
extern void LCD_Init();
extern void display();
extern void wrteeprom(U8INT addr,U8INT dat);
extern void IICStart(void);
extern void IICStop(void);
extern void Timer0_Init();
extern void Timer0_ISR (void) ; // interrupt 1 using 0
extern void SEND0(void);
extern void SEND1(void);
extern void Delay_10us(void) ;
extern void Delay1(U16INT j);
extern void Write_byte(unsigned char dat) ;
extern void Data_Init();
extern void COM(void) ;
extern bit Check_Ack(void);
extern void Delay1(U16INT j);
extern void Data_Init() ;
U8INT Read_byte(void) ;
U8INT RH(void) ;
U8INT rdeeprom(U8INT addr);
extern bit FlagStartRH,humid,dry,BJ;
void KEY() //设置按键
{
if(Key_SET==0)
{
Delay1(200);
//解决不了问题LCD_Write_CMD(0x01);
if(Key_SET==0) //一开始是0
{
Mode++;
if(Mode==1) //后加一
{
L1602_string(1,1," HH: % HL: %"); //初始显示
L1602_int(1,4,HH);
L1602_int(1,12,HL);
LCD_Write_CMD(0x80+6);
LCD_Write_CMD(0x0f); //闪烁
}
else if(Mode>=2)
{ //2
LCD_Write_CMD(0x80+14);
LCD_Write_CMD(0x0f);
}
else if(Mode>=3)
{ //循环条件
Mode=1;
LCD_Write_CMD(0x80+6);
LCD_Write_CMD(0x0f);
}
while(!Key_SET);
}
}
else if(Key_ADD==0) //增加
{
Delay1(100);
if(Key_ADD==0)
{
if(Mode==1)
{
HH++;
if(HH>=100)
HH=99;
L1602_int(1,4,HH);
LCD_Write_CMD(0x80+6);
}
else if(Mode==2)
{
HL++;
if(HL>=HH)
HL=HH-1;
L1602_int(1,12,HL);
LCD_Write_CMD(0x80+14);
}
while(!Key_ADD);
}
}
else if(Key_SUB==0)
{
Delay1(100);
if(Key_SUB==0)
{
if(Mode==1)
{
HH--;
if(HH<=HL)
HH=HL+1;
L1602_int(1,4,HH);
LCD_Write_CMD(0x80+6);
}
else if(Mode==2)
{
HL--;
if(HL<=0)
HL=0;
L1602_int(1,12,HL);
LCD_Write_CMD(0x80+14);
}
while(!Key_SUB);
}
}
if(Key_OK==0&&Mode!=0)
{
Delay1(100);
if(Key_OK==0)
{
L1602_string(1,1,"Hum: % ");
L1602_string(2,1,"Good environment");
Mode=0;
wrteeprom(0,HH);
Delay1(20);
wrteeprom(1,HL);
Delay1(20);
LCD_Write_CMD(0x0c); //xia
while(Key_OK==0);
}
}
}
void main()
{
U16INT i, j, testnum;
EA = 0; //di wai gao nei
Timer0_Init();
Data_Init();
EA = 1;
LCD_Init();
L1602_string(1,1,"Welcome Humidity");
L1602_string(2,1,"Control System! ");
for (i=0;i<500;i++)
for (j=0;j<500;j++)
{;}
L1602_string(1,1," ");
L1602_string(2,1," ");
L1602_string(1,1,"Hum: % ");
L1602_string(2,1,"Good environment");
HH=rdeeprom(0);
Delay1(20);
HL=rdeeprom(1);
Delay1(20);
while(1)
{
if (FlagStartRH == 1) //湿度转换标志检查
{
TR0 = 0;
testnum = RH();
FlagStartRH = 0;
TR0 = 1;
humidity = U8RH_data_H; //读出湿度,只取整数部分
if(Mode==0) //湿度控制
{
if (humidity > HH)
{
Led_qushi = 0;
humid=1;
Led_jiashi = 1;
dry=0;
}
else if(humidity<HL)
{
Led_jiashi = 0;
dry=1;
Led_qushi = 1;
humid=0;
}
else
{
Led_qushi=1;
Led_jiashi=1;
humid=0;
dry=0;
}
}
}
display();
KEY();
}
} |