链接:https://pan.baidu.com/s/1QAGHPYayD6Lasj6_JIuOYA
提取码:fqsv
硬件设计
- MCU基于51单片机
- ADC采用TLC2543,芯片简介如下:
(1)12位分辩率A/D转换器;+(2)在工作温度范围内10μs转换时间;+(3)11个模拟输入通道;+(4)3路内置自测试方式;+(5)采样率为66kbps;+(6)线性误差±1LSBmax;+(7)有转换结束输出EOC;+(8)具有单、双极性输出;+(9)可编程的MSB或LSB前导;+(10)可编程输出数据长度。+3TLC2543的引脚排列及说明 - 四位数码管作为显示
- 具有多个按键控制,功能选择按键,时间设置按键
- LED指示
仿真图如下:
程序设计
#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();
}
}