/****************************************************************
南京理工大学紫金学院电子系统综合设计
温度控制仪设计程序
作者:
地点:
时间:
**********************************************************************/
#include<reg51.h>
#include<intrins.h>
#include <stdio.h>
#include<absacc.h>
#include<math.h>
#define PIN0 XBYTE[0X7FF8] //ADC0809的绝对地址
typedef unsigned char byte;
typedef unsigned int word;
unsigned char xuehao[]="160210459 ";
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //数码管熄灭
sbit int0=P3^2; //调整设定温度和显示当前温度转换
sbit green=P3^4; //加热电阻丝
sbit red=P3^5; //风扇
sbit ck=P2^4; //串口发送开关
sbit jia=P2^5;
sbit jian=P2^6;
byte l,m,flag1,flag2=0;
byte T,sdH=60,sdL=40; //设定温度
float result=0;
float result_reg;
byte i;
/*****************************************************
函数名:延时子函数
调 用:delay(?)
参 数:延时时长
返回值:无
结 果:延时
备 注:无
******************************************************/
void delay(int n)
{
while(n--);
}
/*****************************************************
函数名:初始化子函数
调 用:init()
参 数:无
返回值:无
结 果:对外部中断0,外部中断1,定时器中断0和串口寄存器进行初始化
备 注:无
*******************************************************/
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256; //定时器0计数初值设置,0.5秒定时
TL0=(65536-50000)%256;
EX0=1;
EX1=1;
ET0=1;
PX0=0;
PX1=0;
PT0=1;
PT1=1;
EA=1;
TR0=1;
IT1=1;
IT0=1;
}
/*****************************************************
函数名:AD采集电压子程序
调 用:samp()
参 数:无
返回值:采集到的电压值模拟量
结 果:采集电压
备 注:无
*******************************************************/
float samp()
{
PIN0=0xFF;
for(i=0;i<0x9f;i++);
result_reg=PIN0;
result=result_reg*5/255;
return result;
}
/*****************************************************
函数名:电压转换为温度子函数
调 用:jisuan(?)
参 数:采集的电压值
返回值:无
结 果:得到当前温度的十位和个位,以及设定温度的十位和个位
备 注:无
*******************************************************/
void jisuan(float result)
{
float T1,T2,T3=0.0;
// if(result>0.00&&result<1.416)
// {
// T=48.78*result-39.07;
// }
// else if(result>1.416&&result<2.968)
// {
// T=19.33*result+2.629;
// }
// else if(result>2.968&&result<3.418)
// {
// T=31.11*result-32.338;
// }
// else if(result>3.418&&result<5.00)
// {
// T=105.26*result-285.79;
// } //把电压转换为温度
T1 = 11.247*result*result;
T2 = 13.168*result;
T3 = T1+T2+25.689;
if(T3>100)
{T3 -= 59;}
else if(T3>80)
{T3 -= 40;}
else if(T3>60)
{T3 -= 20;}
else if(T3>50)
{T3 -= 10;}
else
{T3 -= 6;}
T=(char)T3;
}
/*****************************************************
函数名:继电器驱动发光二极管子函数
调 用:jidianqi()
参 数:无
返回值:无
结 果:当前温度>设定温度,红灯亮;当前温度<设定温度,绿灯亮
备 注:无
*******************************************************/
void jidianqi()
{ if(T>sdH){red=1;green=0;}
else if(T<sdL){red=0;green=1;}
else {red=0;green=0;}
}
/******************************************************
函数名:动态显示
调 用:display(?,?,?)
参 数:当前温度的十位,个位和大写C
返回值:无
结 果:数码管动态显示温度
备 注:无
*******************************************************/
void display(byte wendu)
{
unsigned char a,b;
a=wendu/10;
b=wendu%10;
P1=0xff;
P2=0xf7;
P1=tab[12];//显示大写'C'
delay(100);
P1=0xff;
P2=0xfb;
P1=0x9c;//显示'o'
delay(100);
P1=0xff;
P2=0xfd;
P1=tab[b];
delay(100);
P1=0xff;
P2=0xfe;
P1=tab[a];
delay(100);
P1=0xff;
}
void displayH(byte wendu)
{
unsigned char a,b;
a=wendu/10;
b=wendu%10;
P1=0xff;
P2=0xf7;
P1=0x89;//显示大写'H'
delay(100);
P1=0xff;
P2=0xfb;
P1=0xbf;//显示大写'-'
delay(100);
P1=0xff;
P2=0xfd;
P1=tab[b];
delay(100);
P1=0xff;
P2=0xfe;
P1=tab[a];
delay(100);
P1=0xff;
}
void displayL(byte wendu)
{
unsigned char a,b;
a=wendu/10;
b=wendu%10;
P1=0xff;
P2=0xf7;
P1=0xc7;//显示大写'L'
delay(100);
P1=0xff;
P2=0xfb;
P1=0xbf;//显示大写'-'
delay(100);
P1=0xff;
P2=0xfd;
P1=tab[b];
delay(100);
P1=0xff;
P2=0xfe;
P1=tab[a];
delay(100);
P1=0xff;
}
byte anjian(byte wendu)
{
if(jia==0)
{
delay(100);
if(jia==0)
{
wendu++;
if(wendu>90)
wendu=90;
}
}
while(!jia);
if(jian==0)
{
delay(100);
if(jian==0)
{
wendu--;
if(wendu<0)wendu=0;
}
}
while(!jian);
return wendu;
}
/******************************************************
函数名:串口发送函数
调 用:chuankou (?,?)
参 数:发送当前温度的十位和个位
返回值:无
结 果:向PC机发送当前温度
备 注:无
*******************************************************/
void chuankou(float wendu)
{
char t=0;
byte a,b;
if(ck==0)
{
delay(100);
if(ck==0)
{
TMOD=0x21;
SCON=0x40;
PCON=0;
TH1=0xFD;
TL1=0xFD;
TR1=1;
for(t=0;t<9;t++)
{SBUF=xuehao[t];while(!TI);TI=0;}
SBUF=':';while(!TI);TI=0;
a=(byte)wendu/10;
b=(byte)wendu%10;
SBUF=0x30+a;while(!TI);TI=0;
SBUF=0x30+b;while(!TI);TI=0;
SBUF='C';while(!TI);TI=0;
SBUF=' ';while(!TI);TI=0;
TR1=0;
}
while(!ck);
}
}
/******************************************************
函数名:主函数
调 用:main()
参 数:无
返回值:无
结 果:0.5秒采集电压,并显示,可调设定温度,按键发送当前温度给PC机
备 注:无
*******************************************************/
void main(void)
{
byte temp;
red=0;green=0;
l=10;
init();
while(1)
{
if(flag1==1)
{
flag1=0;
result=samp();
jisuan(result);
}
switch(flag2)
{
case 0: display(T);break;
case 1: displayH(sdH);
sdH=anjian(sdH);
break;
case 2: temp=sdL;
temp=anjian(temp);
if(temp>sdH)
{
displayL(temp);
sdL=sdH;
}
else
{
displayL(temp);
sdL=temp;
}
break;
}
jidianqi();
chuankou(T);
}
}
/******************************************************
函数名:t0定时器中断函数
参 数:无
返回值:无
结 果:0.5秒定时
备 注:无
*******************************************************/
void t0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
l--;
if(l==0)
{flag1=1;l=10;}
}
/******************************************************
函数名:外部中断0中断函数
参 数:无
返回值:无
结 果:模式选择
备 注:无
*******************************************************/
void int00() interrupt 0
{
if(int0==0)
{
delay(30);
if(int0==0)
{
flag2++;
if(flag2==3)
flag2=0;
没有合适的资源?快使用搜索试试~ 我知道了~
南理工紫金单片机课程设计
共34个文件
lst:3个
obj:3个
lnp:3个
需积分: 37 17 下载量 147 浏览量
2018-11-04
19:43:30
上传
评论 4
收藏 719KB ZIP 举报
温馨提示
南理工紫金单片机课程设计代码和文档 采用温度传感器和单片机等电路独立设计并制作一个简易数字式温度控制装置。
资源推荐
资源详情
资源评论
收起资源包目录
单片机综合系统设计.zip (34个子文件)
单片机综合系统设计
单路温度测量
1.uvproj 13KB
1.c 8KB
1.LST 17KB
最新.pdsprj 25KB
最新.pdsprj.LAPTOP-LB2ODEVV.维他爱柠檬.workspace 2KB
1.OBJ 17KB
1a.hex 6KB
1a.lnp 20B
1a.M51 19KB
1.uvopt 54KB
温度图表.xlsx 16KB
1a.plg 532B
1.lnp 19B
1.hex 6KB
单片机系统综合设计.doc 541KB
双路截图.png 35KB
双路温度测量
finally_uvproj.bak 0B
celiang.c 4KB
STARTUP.OBJ 749B
finally.uvproj 13KB
STARTUP.A51 6KB
finally.plg 985B
finally.uvopt 55KB
celiang.OBJ 20KB
finally.lnp 47B
finally.hex 7KB
新工程.pdsprj 29KB
finally.M51 22KB
STARTUP.LST 14KB
celiang.LST 8KB
ds18b20.h 3KB
finally 18KB
16物联网单片机系统综合设计说明 .doc 78KB
单路截图.png 109KB
共 34 条
- 1
资源评论
最爱不过土豆泥
- 粉丝: 22
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功