📄 总程序1.c
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit mianbao=P3^0;
sbit hongkao=P3^1;
sbit shaokao=P3^2;
sbit jiedong=P3^3; //面包、烘烤、烧烤、解冻功能键
sbit inckey=P0^0;
sbit deckey=P0^1; //增加、减少键
sbit startkey=P0^2;//开始键
sbit tmpkey=P0^3; //温度设定键
sbit timekey=P0^4; //时间设定键
sbit pausekey=P0^5;//暂停键
sbit wela1=P2^0; //扫描端口
sbit wela2=P2^1;
sbit wela3=P2^2;
sbit wela4=P2^3;
sbit out=P2^4; //TLC2543与单片机接口
sbit din=P2^5;
sbit cs=P2^6;
sbit clk=P2^7;
sbit sled=P3^4;
sbit pled=P3^5;
sbit heat1=P3^6; //继电器1、2控制口
sbit heat2=P3^7;
char fen; //分
uchar miao; //秒
uchar ss; //倒计时控制
uchar chuandi; //功能键控制字符
uchar suoding; //温度、时间键控制字符
uchar tcount; //计数
uchar tmp; //温度常数
uchar jian;
uchar numge; //温度个、十、百位
uchar numshi;
uchar numbai;
uint tmpset; //设定温度
uint realtmp; //实际温度
uchar save1;
uchar save2;
uchar pause;
uchar t;
uint ad; //ad转换结果
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6};//数码管显示列表
uchar code table2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//********延时程序********//
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//********时间显示程序********//
void displaytime()
{
wela1=1;
P1=table[miao%10];
delay(10);
wela1=0;
wela2=1;
P1=table[miao/10];
delay(10);
wela2=0;
wela3=1;
P1=table2[fen%10];
delay(10);
wela3=0;
wela4=1;
P1=table[fen/10];
delay(10);
wela4=0;
}
//********温度显示程序********//
void displaytmp()
{
numbai=tmpset/100;
numshi=tmpset%100/10;
numge=tmpset%10;
wela1=1;
P1=table[10];
delay(10);
wela1=0;
wela2=1;
P1=table[numge];
delay(10);
wela2=0;
wela3=1;
P1=table[numshi];
delay(10);
wela3=0;
wela4=1;
P1=table[numbai];
delay(10);
wela4=0;
}
//********时间设定程序********//
void settime()
{
displaytime();
while(!timekey)
{
displaytime();
if(!inckey)
{
delay(10);
if(!inckey)
{
fen+=10;
if(fen>99)
{
fen=99;
}
}
while(!inckey)
{
displaytime();
}
}
else if(!deckey)
{
delay(10);
if(!deckey)
{
fen-=10;
if((fen<1)&&(pause==0))
{
fen=1;
}
if((fen<1)&&(pause==1))
{
fen=0;
}
}
}
while(!deckey)
{
displaytime();
}
}
if(!inckey)
{
t=0;
delay(10);
if(!inckey)
{
fen++;
displaytime();
if(fen>99)
{
fen=99;
}
}
}
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
TR0=1;
while(!inckey)
{
if(t==40)
{
displaytime();
t=37;
fen++;
if(fen>99)
{
fen=99;
}
}
if(TF0==1)
{
t++;
TF0=0;
TH0=15536/256;
TL0=15536%256;
}
displaytime();
}
if(!deckey)
{
t=0;
delay(10);
if(!deckey)
{
if((fen<1)&&(pause==1))
{
fen=1;
}
if((fen<2)&&(pause==0))
fen=2;
fen--;
displaytime();
}
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
TR0=1;
while(!deckey)
{
if(t==40)
{
displaytime();
t=37;
if((fen<1)&&(pause==1))
{
fen=1;
}
if((fen<2)&&(pause==0))
fen=2;
fen--;
}
if(TF0==1)
{
t++;
TF0=0;
TH0=15536/256;
TL0=15536%256;
}
displaytime();
}
}
}
//********温度设定程序********//
void settmp()
{
displaytmp();
if(!inckey)
{
delay(10);
if(!inckey)
{
if(tmpset>tmp)
{
tmpset=55;
}
tmpset=tmpset+15;
}
while(!inckey)
{
displaytmp();
}
}
else if(!deckey)
{
delay(10);
if(!deckey)
{
if(tmpset<85)
{
tmpset=jian;
}
tmpset=tmpset-15;
}
while(!deckey)
{
displaytmp();
}
}
}
//********ad转换程序********//
uint read2543(uchar port)
{
uchar i;
clk=0;
cs=0;
port<<=4;
for(i=0;i<12;i++)
{
if(out) ad|=0x01;
din=(bit)(port&0x80);
clk=1;
delay(1);
clk=0;
delay(1);
port<<=1;
ad<<=1;
}
cs=1;
ad>>=1;
return(ad);
}
//********开始程序********//
void start()
{
tcount=0;
ss=1;
pause=0;
pled=1;
sled=0;
switch(chuandi)
{
case 1:
case 4:
case 5:
case 8:save1=0,save2=0;break;
case 2:
case 6:save1=1,save2=0;break;
case 3:
case 7:save1=0,save2=1;break;
default:break;
}
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
TR0=1;
while(ss==1)
{
ad=read2543(0); //开始进行AD转换
realtmp=ad/16; //换算为实际温度
displaytime();
if(TF0==1)
{
tcount++;
if(tcount==15)
{
tcount=0;
if(miao==0)
{
miao=60;
fen--;
}
miao--;
if((fen==0)&&(miao==0))
{
ss=0;
heat1=1;
heat2=1;
pled=0;
sled=1;
}
}
TF0=0;
TH0=15536/256;
TL0=15536%256;
}
if(realtmp>tmpset)
{
heat1=1;
heat2=1;
}
else
{
heat1=save1;
heat2=save2;
ad=0;
}
if(!pausekey) //暂停
{
delay(10);
if(!pausekey)
{
pause=1;
heat1=1;
heat2=1;
ss=~ss;
sled=1;
pled=0;
ad=0;
}
}
}
}
//********主程序********//
void main()
{
while(P3==0xff)
{
miao=0;
fen=0;
displaytime();
}
while(1)
{
if(!mianbao)
{
delay(10);
if(!mianbao)
{
tmpset=175;
miao=0;
fen=30;
chuandi=1;
tmp=220;
jian=250;
suoding=0;
pause=0;
}
}
if(!hongkao)
{
delay(10);
if(!hongkao)
{
tmpset=175;
chuandi=2;
miao=0;
fen=30;
tmp=160;
jian=190;
suoding=0;
pause=0;
}
}
if(!shaokao)
{
delay(10);
if(!shaokao)
{
tmpset=175;
chuandi=3;
miao=0;
fen=30;
tmp=160;
jian=190;
suoding=0;
pause=0;
}
}
if(!jiedong)
{
delay(10);
if(!jiedong)
{
tmpset=90;
chuandi=4;
miao=0;
fen=30;
suoding=0;
pause=0;
}
}
switch(chuandi)
{
case 1:
case 2:
case 3:
case 4:settime();break;
case 5:
case 6:
case 7:settmp();break;
case 8:displaytmp();break;
default:break;
}
if(suoding==1)
{
if(!tmpkey)
{
delay(10);
if(!tmpkey)
{
chuandi=chuandi;
}
}
}
else
{
if(!tmpkey)
{
delay(10);
if(!tmpkey)
{
suoding=1;
chuandi=chuandi+4;
}
}
}
if(!timekey)
{
delay(10);
if(!timekey)
{
if(suoding==1)
{
suoding=0;
chuandi=chuandi-4;
}
}
}
if(!startkey)
{
delay(10);
if(!startkey)
{
start();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -