📄 7290_2.c
字号:
#include <reg51.h>
#include <math.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include <stdlib.h>
#define True 1
#define False 0
#define Ctop_temper 75
#define Cbottom_temper 18
#define Ftop_temper 167
#define Fbottom_temper 64
#define Hot_time 30
#define Pre_time 10
/**********************************/
#define Slv7290 0x70
#define CmdBuf0 0x07
#define CmdBuf1 0x08
#define Dpram 0x10
/**********************************/
typedef unsigned char uchar;
typedef unsigned int uint;
sfr WDTRST = 0xA6;
sbit Temper_add = P1^0; // P0^0;
sbit Temper_subb = P3^5; // P0^1;
sbit Time_add = P0^3; // P0^2 ;
sbit Time_subb = P2^3; // P0^3;
sbit Lamp_onoff = P3^6; // P0^4;
sbit Lamp = P3^4; // P0^5;
sbit Setup_lamp = P2^6; // P0^6;
sbit setup_led = P2^6; // P0^6;
sbit Precontract_lamp = P2^7; // P0^7;
sbit set_key = P0^4; // P2^0;
sbit Off_power = P2^2; // P2^1;
sbit Choose_cf = P2^1; // P2^2;
sbit Hot_up = P1^1; // P2^3;
/**************** DS18B20 ********************/
sbit TMDAT = P1^2; // P2^4;
/**************** Max7219 ********************/
sbit SCL = P0^0; // P2^5;
sbit SDA = P0^1; // P2^6;
/*********************************************/
sbit Speak = P1^3; // P1^0;
sbit Precontract = P2^0; // P1^1;
sbit Open_power = P0^2; // P1^2;
sbit LED = P3^7; // P1^3;
sbit Power_led = P3^0;
/* 定义调用子程序 */
void temperature(bit C_f);
bit tmreset(void);
uchar readbyte(void);
void delay3(uint Tm_count);
void writebyte(uchar dat);
uchar read_temper(bit C_F);
void tmstart(void);
void disp(uchar y3,bit id);
void sound(bit f,uchar i);
void delay(uchar i);
void Watch(void);
uchar Zlg_read(uchar i);
void Zlg_write(uchar *p);
void Zlg_writebyte(uchar address,uchar i);
void shift8(uchar a);
void start(void);
void stop(void);
void SendByte(uchar c);
void delay_nop(void);
void ack(void);
void no_ack(void);
uchar TH0_T,TL0_T;
bit run;
uint V_ml;
uchar bdata AD;
sbit AD_0=AD^0;
sbit AD_1=AD^1;
sbit AD_7=AD^7;
bit YesNo_ack;
uchar now_temper = 20;
uchar sys_1 ;
uchar sys_2 ;
uchar WriteBuf[3];
/*********************/
/* 演示主程序 */
/*********************/
void main()
{ uchar now_time , now_time2,count,Led_count;
uchar system_count,top,bottom,Over_count;
uchar *p;
uint data1;
bit CF; /* 0=C,1=F */
bit Set_flag,set_flag2,Over;
uchar set_time = 0; /* work 时间 */
uchar set_time2 = 0;/* no work */
uchar set_temper = 42;
YesNo_ack = False ;
top = Ctop_temper;
bottom = Cbottom_temper;
V_ml = 0;
TH1 = 0xFA;
TL1 = 0xFa;
TH0_T = 0;
TL0_T = 0;
CF = False;
delay3(800);
ES = True;
run = True;
Set_flag = False;
set_flag2 = True;
now_time = 0;
now_time2 = 0;
system_count = 0;
count = 0;
Led_count = 0;
Over_count = 0;
LED = False;
Over = False;
Precontract_lamp = True;
Watch();
p = WriteBuf;
WriteBuf[0] = 0x0d;
WriteBuf[1] = 5;
WriteBuf[2] = 0;
Zlg_write(p);
if ( sys_1==0x33 && sys_2==0x51 ) goto Power;
sys_1 = 0x33;
sys_2 = 0x51;
/*****************************/
while (Open_power)
{
Watch();
V_ml = 0;
TR0 = 0;
delay3(10);
};
while (!Open_power) { Watch(); };
Power:
sound(False,1);
set_flag2 = True;
LED = True;
Power_led = False;
/*****************************/
while (1)
{
Watch();
SCON = 0x50;
TMOD = 0x21; //TR1 = 1;
EA = 1;
ET0 = 1;
if (set_flag2)
{
Led_count++;
}
if (Led_count >= 130)
{
LED = False;
Led_count = 0;
set_flag2 = False;
if (Set_flag)
{
Set_flag = 0;
Precontract_lamp = True;
Setup_lamp = True;
system_count = 0;
}
}
if (Lamp_onoff == False) /* 开关灯控制 */
{
Lamp =~ Lamp; delay3(10);
do { Watch(); }
while (!Lamp_onoff);
sound(False,1);
Led_count = 0;
LED = True;
set_flag2 = True;
}
if (Off_power == False) /* 开关控制 */
{
off: delay3(10);
now_time = 0;
now_time2 = 0;
set_time = 0;
set_time2 = 0;
system_count = 0;
count = 0;
Precontract_lamp = True;
Setup_lamp = True;
Hot_up = True;
LED = False;
Power_led = True;
do { Watch(); }
while (!Off_power);
sound(False,1);
p = WriteBuf;
WriteBuf[0] = 0x10;
WriteBuf[1] = 0;
WriteBuf[2] = 0;
Zlg_write(p);
WriteBuf[0] = 0x12;
Zlg_write(p);
WriteBuf[0] = 0x14;
Zlg_write(p);
while (Open_power)
{
V_ml = 0;
TR0 = 0;
delay3(200);
Watch();
}
do { Watch(); }
while (!Open_power);
sound(False,1);
set_flag2 = True;
LED = True;
Power_led = False;
}
if (Choose_cf == False) /* 华氏与温度转换 */
{
CF = ~CF ;
delay3(10);
do { Watch(); }
while (!Choose_cf);
if (CF)
{
top = Ftop_temper; bottom = Fbottom_temper; data1 = set_temper;
set_temper = (data1*9)/5+32;
}
else
{
top = Ctop_temper; bottom = Cbottom_temper; data1 = set_temper;
set_temper = (data1 - 32)*5/9;
}
sound(False,1);
Led_count = 0;
LED = True;
set_flag2 = True;
}
if (set_key == False) /* 设置键处理 */
{
switch (system_count)
{
case 0:
{
Set_flag = 1; Setup_lamp = False; Precontract_lamp = True; system_count++; Led_count++;
if (set_time==0 || set_time>90) set_time = Hot_time;
set_time2 = 0;
} break;
case 1:
{
Set_flag = 0;
Precontract_lamp = True; Setup_lamp = True; system_count = 0;
} break;
default: break;
}
delay3(10);
do { Watch(); }
while (!set_key);
sound(False,1);
Led_count = 0;
LED = True;
set_flag2 = True;
}
if (Time_add == False)
{
delay3(10);
Led_count = 0;
LED = True;
set_flag2 = True;
if (set_time2>0)
{
if (set_time2 >= 90) continue;
set_time2++;
}
else
{
if (Time_subb == False) {set_time = 240;}
if (set_time >= 90) continue;
set_time++;
}
sound(False,1);
count = 0;
}
if (Time_subb == False)
{
delay3(10);
Led_count = 0;
LED = True;
set_flag2 = True;
if (set_time2 > 0)
{
set_time2--;
if (set_time2 == 0) { Precontract_lamp = True; continue;}
}
else
{
if (set_time > 0)
{
set_time--;
if (Time_add == False) {set_time = 240;}
if (set_time == 0) { Setup_lamp = True; continue;}
}
}
sound(False,1);
count = 0;
}
if (Set_flag) /* 设定状态 */
{
V_ml = 0;
Watch();
now_time = set_time - V_ml/60;
if (now_time == 0) {Hot_up = True; TR0 = 0;}
disp(set_temper,1);
disp(set_time,0);
delay3(100);
if (Temper_add == False)
{
Led_count = 0;
LED = True;
set_flag2 = True;
if (set_temper >= top) continue;
delay3(5);
sound(False,1);
set_temper++;
count = 0;
}
if (Temper_subb == False)
{
Led_count = 0;
LED = True;
set_flag2 = True;
if (set_temper <= bottom) continue;
delay3(5);
sound(False,1);
set_temper--;
count = 0;
}
if (Precontract==False) /* 预设状态 */
{
if (set_time2 == 0) set_time2 = Pre_time;
Led_count = 0;
LED = True;
set_flag2 = True;
Precontract_lamp = False;
Setup_lamp = False;
delay3(10);
count = 0;
do { Watch(); }
while (!Precontract);
do
{
Watch();
Led_count++;
if (Led_count >= 130)
{
LED = False;
Led_count = 0;
break;
}
if (Off_power == False) goto off; /* 开关控制 */
now_time = set_time2 - V_ml/60;
if (now_time == 0) { Hot_up = True; TR0 = 0; }
disp(set_temper,1);
disp(set_time2,0);
delay3(100);
if (Time_add == False)
{
Led_count = 0;
LED = True;
set_flag2 = True;
if (set_time2 >= 90) continue;
delay3(5);
sound(False,1);
set_time2++;
count = 0;
}
if (Time_subb == False)
{
Led_count = 0;
LED = True;
set_flag2 = True;
if (set_time2 == 0) continue;
delay3(5);
sound(False,1);
set_time2--;
count = 0;
}
}while (Precontract);
delay3(10);
do { Watch(); }
while (!Precontract);
Set_flag = 0;
Precontract_lamp = True;
Setup_lamp = True;
system_count = 0;
}
continue;
}
if ((set_time2>0) && !Set_flag) /* 预设时间 */
{
Hot_up = True;
Watch();
now_time = set_time2 - V_ml/60;
if (now_time == 0) { TR0 = False; V_ml = 0; set_time2 = 0; Precontract_lamp = True; sound(False,3); continue;}
TR0 = True;
Precontract_lamp = False;
temperature(CF);
disp(now_temper,1);
disp(now_time,0);
delay3(100);
continue;
}
if ((set_time>0) && !Set_flag) /* 加热时间 */
{
Watch();
now_time = set_time - V_ml/60;
if (now_time == 0) { Hot_up = True; TR0 =False; V_ml = 0; set_time = 0; sound(False,3);}
temperature(CF);
if (now_temper < set_temper)
{
Hot_up = False; TR0 = True; Over = False;
}
else
{
Hot_up = True;
TR0 = False;
if (!Over)
{
Over = True;
Over_count = 0;
}
if (Over_count >= 20)
{
_nop_();
}
else {Over_count++; sound(False,1);}
}
disp(now_temper,1);
disp(now_time,0);
delay3(100);
continue;
}
temperature(CF);
now_time = set_time - V_ml/60;
if (now_time == 0) {Hot_up = 1; TR0 = 0;}
disp(now_temper,1);
disp(now_time,0);
delay3(200);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -