#include <reg52.h>
#include <intrins.h>
#define RdCommand 0x01 //定义ISP的操作命令
#define PrgCommand 0x02
#define EraseCommand 0x03
#define WaitTime 0x01 //定义CPU的等待时间
sfr ISP_DATA=0xe2; //寄存器申明
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
sfr ISP_CMD=0xe5;
sfr ISP_TRIG=0xe6;
sfr ISP_CONTR=0xe7;
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
#define num_ok 0x15 //键ok
#define num_0 0x0D //键0
#define num_1 0x00 //键1
#define num_2 0x01 //键2
#define num_3 0x02 //键3
#define num_4 0x04 //键4
#define num_5 0x05 //键5
#define num_6 0x06 //键6
#define num_7 0x08 //键7
#define num_9 0x0A //键9
void bujinw();
void bujinz();
void delay(uchar x); //x*0.14MS
void delay1(int ms);
void delay2(uint x);
void beep();
void day();
void out();
void night();
void reshi();
void air_off();
void air_on();
unsigned char byte_read(unsigned int byte_addr);
void SectorErase(unsigned int sector_addr);
void byte_write(unsigned int byte_addr, unsigned char original_data);
void ISP_IAP_enable(void);
extern void initLCM( void); //LCD初始化子程序
extern void DisplayListChar(uchar X,uchar Y, unsigned char *DData);
extern void delay_LCM(uint k); //显示指定坐标的一串字符子函数
sbit F1 = P1^0; //步进电机控制
sbit F2 = P1^1; //步进电机控制
sbit F3 = P1^2; //步进电机控制
sbit F4 = P1^3; //步进电机控制
sbit SHWA= P1^4; //水位引脚
sbit SHWB= P1^5; //水位引脚
sbit SHWC= P1^6; //水位引脚
sbit ZID = P2^7; //光敏传感器
sbit RSD = P1^7; //热释电
sbit BEEP= P2^6; //蜂鸣器
sbit LED1= P2^5;
sbit LED2= P2^4;
sbit LED3= P2^3;
sbit IRIN= P3^2; //红外接收器
sbit K0 = P3^3; //单片机间通讯引脚
sbit K1 = P3^4; //单片机间通讯引脚
sbit K2 = P3^5; //单片机间通讯引脚
sbit YJL = P3^6; //单片机间通讯引脚
sbit CBH = P3^7; //单片机间通讯引脚
bit ir_year;
uchar IRCOM[7];
uchar ir_data;
uint i,j,a,b,ir_flag,ir_bao,ir_ji,ir_zm,ir_day; // 标志位
uchar y;
uchar l;
uchar code FFZ[8]={0x0E,0x0C,0x0D,0x09,0x0B,0x03,0x07,0x06}; //反转
uchar code FFW[8]={0x06,0x07,0x03,0x0B,0x09,0x0D,0x0C,0x0E}; //正转
/*******************************************************************/
void main() //主函数
{
IT0=1;
EX0=1;
EA=1;
IE = 0x81; //允许总中断中断,使能 INT0 外部中断
TCON = 0x01; //触发方式为脉冲负边沿触发
IRIN=1; //I/O口初始化
BEEP=1; //蜂鸣器初始化
initLCM();
ir_year=0;
ir_flag=1;
ir_day=1;
if(byte_read(0x2400)==0x11)
{
ir_data=byte_read(0x2200);
ir_bao =byte_read(0x2000);
y=byte_read(0x2600);
l=byte_read(0x2601);
LED1=byte_read(0x2800);
ir_ji=byte_read(0x2A00);
ir_zm=byte_read(0x2C00);
}
else //初始化状态
{
SectorErase(0x2200); //擦除扇区
byte_write(0x2200,num_1); //工作模式
SectorErase(0x2000); //擦除扇区
byte_write(0x2000,1);
SectorErase(0x2600); //擦除扇区
byte_write(0x2600,20);
byte_write(0x2601,0);
byte_write(0x2E00,0);
ir_data=byte_read(0x2200);
ir_bao=byte_read(0x2000); //关窗标志位初始化
y=byte_read(0x2600);
l=byte_read(0x2601);
}
SectorErase(0x2400); //擦除扇区
delay1(5);
byte_write(0x2400,0x11);
for(;;)
{
if(SHWA==1&&SHWB==1&&SHWC==1) {BEEP=0;delay1(652);BEEP=1;DisplayListChar(0,0," > 50mm");} //水位太高,报警
if(SHWA==1&&SHWB==0&&SHWC==0) {LED3=1;DisplayListChar(0,0," 20~50mm");} //水位高 排水
if(SHWA==0&&SHWB==0&&SHWC==0) {LED3=0;DisplayListChar(0,0," < 20mm ");} //水位低 加水
if(RSD==1&&ir_flag==0) {BEEP=0;delay1(1600);BEEP=1;}
if(RSD==1&&YJL==1&&CBH==0&&ir_day==1) {YJL=0;CBH=1;ir_day=0;delay1(2600);YJL=1;CBH=0;}
if(K0==0&&K1==0&&K2==0) {bujinz();} //远程开窗
if(K0==0&&K1==0&&K2==1) {bujinw();} //远程关窗
if(K0==0&&K1==1&&K2==0) {air_on();} // 远程开空调
if(K0==0&&K1==1&&K2==1) {air_off();} // 远程关空调
if(ir_year==1&&ir_flag!=3)
{
if(ZID==0) {day();} // 白天模式
if(ZID==1) {night();} // 晚上模式
}
else if(ir_year==0&&ir_data==num_1) //白天模式
{
DisplayListChar(7,0," DAY ");
day();
ir_data=num_9;
SectorErase(0x2200); //擦除扇区
byte_write(0x2200,0x24);
ir_flag=1;
}
else if(ir_year==0&&ir_data==num_2) //离家模式
{
SectorErase(0x2200);
byte_write(0x2200,0x25);
ir_flag=3;
out();
ir_data=num_9;
}
else if(ir_year==0&&ir_data==num_3) //晚上模式
{
DisplayListChar(7,0," NIGHT ");
night();
ir_data=num_9;
SectorErase(0x2200);
byte_write(0x2200,0x26);
ir_flag=0;
}
else if(ir_data==num_4&&ir_flag==1) //开窗
{
bujinz();
YJL=0;CBH=0;
ir_data=num_9;
}
else if(ir_data==num_5&&ir_flag==1) //关窗
{
bujinw();
ir_data=num_9;
YJL=0;CBH=0;
}
else if(ir_data==num_6&&ir_flag==1) //开空调
{
air_on();
ir_data=num_9;
YJL=0;CBH=0;
}
else if(ir_data==num_7&&ir_flag==1) //关空调
{
air_off();
ir_data=num_9;
YJL=0;CBH=0;
}
}
}//end main
void day() //白天模式
{
YJL=0;CBH=0;
bujinz();
air_on();
}
void out() //离家模式
{
DisplayListChar(7,0," OUT ");
YJL=1;CBH=0;
bujinw(); //关窗
air_off();
}
void night() //晚上模式
{
YJL=0;CBH=0;
bujinw(); //关窗
air_on();
}
void air_on()
{
DisplayListChar(0,1,"AIR ON ");
LED1=0; //开空调
LED2=1;
SectorErase(0x2800); //擦除扇区
byte_write(0x2800,0x00);
}
void air_off()
{
DisplayListChar(0,1,"AIR OFF ");
SectorErase(0x2800); //擦除扇区
byte_write(0x2800,0x01);
LED1=1; //关空调
LED2=0;
}
void bujinz() //正转 开窗
{
DisplayListChar(7,1," WIN ON ");
if(ir_bao==1||ir_ji==1)
{ ir_bao=0;
SectorErase(0x2000); //擦除扇区
byte_write(0x2000,0x00);
for (j=0; j<y; j++) //转1*n圈
{
for (i=0; i<8; i++) //一个周期转30度
{
P1 = P1&0xF0|FFZ[i]; //取数据
delay2(15); //调节转速
}
l++;
if(ir_data==num_ok)
{ir_ji=1;DisplayListChar(7,1," KEEP ");
SectorErase(0x2A00);
byte_write(0x2A00,0x01);break;}
}
y=20-l;
SectorErase(0x2600);
byte_write(0x2600,y);
byte_write(0x2601,l);
if(y==0) {ir_ji=0;}
}
}
void bujinw() //反转 关窗
{
DisplayListChar(7,1," WIN OFF ");
if(ir_bao==0||ir_zm==1)
{ ir_bao=1;
SectorErase(0x2000); //擦除扇区
byte_write(0x2000,0x01);
for (a=0; a<l; a++) //转1*n圈
{
for (b=0; b<8; b++) //一个周期转30度
{
P1 = P1&0xF0|FFW[b]; //取数据
delay2(15); //调节转速
}
y++;
if(ir_data==num_ok)
{ir_zm=1;DisplayListChar(7,1," KEEP ");
SectorErase(0x2C00);
byte_write(0x2C00,0x01);break;}
}
l=20-y;
SectorErase(0x2600); //擦除扇区
byte_write(0x2600,y);
byte_write(0x2601,l);
if(l==0) {ir_zm=0;}
}
}
/* ================ 打开 ISP,IAP 功能 ================= */
void ISP_IAP_enable(void)
{
EA = 0; /* 关中断 */
ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时 */
ISP_CONTR = ISP_CONTR | 0x80;
C51控制sim300短信控制
4星 · 超过85%的资源 需积分: 10 128 浏览量
2011-01-13
23:26:20
上传
评论
收藏 102KB ZIP 举报
cwf1988
- 粉丝: 3
- 资源: 2
最新资源
- VIVADO中UART IP核使用
- 【深度学习实际案例解析】深度学习实际案例解析
- 封装swagger组件,提供全新UI以及无状态登录接口调用解决方案
- 小龙坎支局2024年4月渠道积分核对数据.xlam
- onlyoffice搭建及与alist使用的view.html
- Quadcopter-UAV-attitude-estimation-linux常用命令大全demo
- Quadcopter-UAV-attitude-estimation-based-on-数据库课程设计
- pbdlib-python-master.zip
- 43904245495352013_base.apk
- 基于springboot+vue + redis的工作流审批系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页