📄 7219.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
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^1; //= 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 = P0^6;
sbit Precontract_lamp = P2^7; //= P0^7;
sbit set_key = P0^2; //= 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 M7219_in = P0^5;
sbit M7219_cs = P0^6;
sbit M7219_clock = P0^7;
/*********************************************/
sbit Speak = P1^3; //= P1^0;
sbit Precontract = P2^0; //= P1^1;
sbit Open_power = P0^0; //= P1^2;
sbit LED = P3^7; //= P1^3;
sbit Power_led = P3^0;
/* 定义调用子程序 */
void Max7219_send(uchar add, uchar dat);
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 Max7219_int(void);
void disp(uchar y3,bit id);
void sound(bit f,uchar i);
void delay(uchar i);
void Watch(void);
void shift8(uchar a);
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;
uchar now_temper = 20;
uchar sys_1 ;
uchar sys_2 ;
uchar sys_3 ;
/*********************/
/* 演示主程序 */
/*********************/
void main()
{ uchar now_time , now_time2,count,Led_count;
uchar system_count,top,bottom,Over_count;
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;
top = Ctop_temper;
bottom = Cbottom_temper;
V_ml = 0;
TH1 = 0xFA;
TL1 = 0xFa;
TH0_T = 0;
TL0_T = 0;
CF = False;
delay(1);
Max7219_int();
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;
Watch();
if (sys_1==0x33 && sys_2==0x51 && sys_3==0x90) goto Power;
sys_1 = 0x33;
sys_2 = 0x51;
sys_3 = 0x90;
Max7219_send(0x0c, 0x00);
/*****************************/
while (Open_power)
{
Watch();
V_ml = 0;
TR0 = 0;
delay3(10);
}
do { Watch(); }
while (!Open_power);
Power: Max7219_send(0x0c,0x01);
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;
Lamp = True;
do { Watch(); }
while (!Off_power);
sound(False,1);
Max7219_send(0x0c, 0x00);
delay3(10);
Max7219_send(0x0c, 0x00);
while (Open_power)
{
V_ml = 0;
TR0 = 0;
delay3(10);
Watch();
}
do { Watch(); }
while (!Open_power);
Max7219_send(0x0c,0x01);
delay3(10);
Max7219_send(0x0c,0x01);
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 (Time_add == False) {set_time = 240;}
if (set_time == 0) continue;
set_time--;
}
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(80);
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(80);
if (Time_add == False)
{
Led_count = 0;
LED = True;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -