/***************************************************************
主机程序
==========基于51单片机的远程上下限温度控制=========
程序描述:系统初始化默认温度上限为30.0℃、下限为10.0℃
上限温度可设置范围20~100℃
下限温度可设置范围0~20℃
***************************************************************/
#include <AT89X52.H>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
uchar S_temp=30;
uchar D_temp=20;
uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc7,0x89};//0-9 全亮 H L 共阳数码管段选数据
uchar dispbuf[4]={0,0,0,0};// 0x76,0x3f,0x3f,0x4f
uchar temp[4]={0,0,0,0};
uchar dispcount;
//uchar data display[]={0x00,0x00,0x00,0x00};
sbit PIN=P0^7; //小数点
sbit K1=P3^5; //上下限温度设定键
sbit K2=P3^6; //温度设定加
sbit K3=P3^7; //温度设定减
sbit BEEP=P1^4; //蜂鸣器
sbit LED1=P1^0;
sbit LED2=P1^1;
uchar flag=0; //设定模式选择
uchar flag1=0;
uchar temp_sum;
/*数码管控制*/
sbit W0=P2^0; // 定义数码管显示第一位
sbit W1=P2^1; // 定义数码管显示第二位
sbit W2=P2^2; // 定义数码管显示第三位
sbit W3=P2^3; // 定义数码管显示第四位
void uart_init() //设置串口工作方式
{
TMOD=0x20;
T2MOD=0x00; /*定时器2为工作模式) */
T2CON=0x04; /*定时器2为自动重装定时工作模式) TR2=1 */
RCAP2L=(65536-4000)%256; //给定时器T2装初值
RCAP2H=(65536-4000)/256;
TH1=0xFD;
TL1=0xFD;
PCON=0x00;
TR1=1;
TR2=1; //打开定时器中断1,2
ET2=1;
SCON=0x50; //串口1允许接受
EA=1;
}
void delayms(uint xms) //延时程序
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
/*************按键控制子程序**************************************/
void key()
{
if(K1==0) //上下限温度设定键
{
delayms(5);
if(K1==0)
{
flag++;
if(flag==3)
flag=0;
while(!K1);
}
}
if(flag==1) //上限温度设置
{
if(K2==0) //温度设定加键
{
delayms(5);
if(K2==0)
{
// if(S_temp<100) //上限温度最高可设定到100摄氏度
S_temp++;
while(!K2);
}
}
if(K3==0) //温度设定加键
{
delayms(5);
if(K3==0)
{
// if(S_temp>20) //上限温度最低可设定到20摄氏度
S_temp--;
while(!K3);
}
}
}
if(flag==2) //下限温度设置
{
if(K2==0) //温度设定加键
{
delayms(5);
if(K2==0)
{
// if(D_temp<20) //下限温度最高可设定到20摄氏度
D_temp++;
while(!K2);
}
}
if(K3==0) //温度设定减键
{
delayms(5);
if(K3==0)
{
// if(D_temp>0) //上限温度最低可设定到0摄氏度
D_temp--;
while(!K3);
}
}
}
}
/***************************************************************/
void shakeHand() //握手信号
{
do
{
SBUF=0x01;
while(TI==0);
TI=0;
while(RI==0);
RI=0;
}
while(SBUF!=0x02) ;
}
void send(uchar SendData) //发送数据程序
{
SBUF=SendData;
while(TI==0);
TI=0;
}
uchar receive()
{
while(RI==0);
RI=0;
return (SBUF);
}
/****************发送电机控制命令***************************/
void send_com(uchar com)
{
shakeHand();
send(com);
}
/***********************************************************/
/**************接收温度数据子函数******************************/
void receive_temp()
{
uchar i;
shakeHand();
for(i=0;i<4;i++)
{
temp[i]=receive();
}
}
/******************************************************/
/***********显示子函数***********************************/
void display2()
{
if(flag==0)
{
dispbuf[0]=dispcode[10]; //什么也不显示
dispbuf[1]=dispcode[temp[2]]; //显示温度十位
dispbuf[2]=dispcode[temp[1]]; //显示温度个位
dispbuf[3]=dispcode[temp[0]]; //显示小数点后一位
}
if(flag==1)
{
dispbuf[0]=dispcode[12]; //第一位数码管第一位显示L
dispbuf[1]=dispcode[S_temp%100/10]; //第二位数码管显示低温温度十位
dispbuf[2]=dispcode[S_temp%10]; //第三位数码管显示低温温度个位
dispbuf[3]=dispcode[0]; //第四位数码管显示0
}
if(flag==2)
{
dispbuf[0]=dispcode[11]; //第一位数码管显示H
dispbuf[1]=dispcode[D_temp%100/10];//第二位数码管显示高温温度十位
dispbuf[2]=dispcode[D_temp%10]; //第三位数码管显示高温温度个位
dispbuf[3]=dispcode[0]; //第四位数码管显示0
}
}
/**************报警子程序****************************************/
void beep()
{
if(flag1==1)
{
BEEP=0; //蜂鸣器等于0报警
delayms(50); //延时
BEEP=1; //关闭蜂鸣器
delayms(50); //延时
}
else
BEEP=1;
}
/*************************************************************/
/**************超限检测子函数********************************/
void chaoxian()
{
temp_sum=temp[3]*100+temp[2]*10+temp[1];
if(temp_sum>=S_temp) //如果实时温度>=上限温度
{
send_com(0xf4);
LED2=1; //低温报警灯灭
LED1=0; //高温报警灯亮
flag1=1;
}
else if(temp_sum<=D_temp)//如果实时温度<=下限温度
{
send_com(0xf0);
LED1=1; //高温灯灭
LED2=0; //低温温度报警灯亮
flag1=1;
}
else
{ //如果实时温度在上限温度和下限温度之间
flag1=0;
send_com(0xf5);
LED1=1; //高温低温灯都灭
LED2=1;
}
}
/*******************************************************/
/******************************************************/
void main()
{
uart_init();
shakeHand();
while(1)
{
display2();
receive_temp();
key();
chaoxian();
beep();
}
}
void t1(void) interrupt 5 using 0
{
TF2=0; //T2定时器必须用软件清0
P0=dispbuf[dispcount]; //控制数码管 显示
if (dispcount==0)
{
W0=0;
W1=1;
W2=1;
W3=1;
}
if(dispcount==1)
{
W0=1;
W1=0;
W2=1;
W3=1;
}
if(dispcount==2)
{
PIN=0;
W0=1;
W1=1;
W2=0;
W3=1;
}
if(dispcount==3)
{
PIN=1;
W0=1;
W1=1;
W2=1;
W3=0;
}
dispcount++;
if(dispcount==4)
dispcount=0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
112、基于51单片机无线温度传输控制电路图及程序元件清单
共45个文件
bak:4个
schdocpreview:3个
opt:2个
2 下载量 177 浏览量
2023-09-30
23:36:37
上传
评论 1
收藏 681KB RAR 举报
温馨提示
本资源内容概要: 这是基于51单片机的无线温度传输控制设计,包含了电路图源文件(Altiumdesigner软件打开)、C语言程序源代码(keil软件打开)、元件清单(excel表格打开)。 本资源适合人群: 单片机爱好者、电子类专业学生、电子diy爱好者。 本资源能学到什么: 可以通过查看电路学习电路设计原理,查看代码学习代码编写原理。 本资源使用建议: 建议使用者需要具备一定电子技术基础,掌握一些常用元器件原理,例如三极管、二极管、数码管、电容、稳压器等。了解C语言基础设计原理,能看懂基础的电路图,具备一定的电路图软件使用能力。
资源推荐
资源详情
资源评论
收起资源包目录
112、基于51单片机无线温度传输控制电路图及程序元件清单.rar (45个子文件)
112、基于51单片机无线温度传输控制电路图及程序元件清单
无线温度计程序
无线温控元件清单.xls 14KB
从机电路图
从机.pcbdoc_viewstate 2KB
从机.PcbDoc.htm 7KB
__Previews
从机.SchDocPreview 54KB
History
从机.PrjPcb 31KB
从机.PcbDoc 368KB
18B20.SchDocPreview 64KB
从机.PrjPcbStructure 46B
从机.PcbDocPreview 52KB
从机.SchDoc 133KB
从机.OutJob 3KB
主机程序
无线温度计主机.lnp 50B
无线温度计主机.M51 15KB
主机.LST 14KB
无线温度计主机.plg 229B
无线温度计主机.Opt 974B
无线温度计主机.hex 2KB
无线温度计主机 13KB
无线温度计主机_Opt.Bak 972B
无线温度计主机_Uv2.Bak 0B
主机.OBJ 14KB
无线温度计主机.Uv2 2KB
主机.c 6KB
从机程序
从机.OBJ 11KB
无线温度计从机.Opt 974B
从机.c 3KB
从机.LST 9KB
无线温度计从机.hex 2KB
无线温度计从机.lnp 50B
无线温度计从机.plg 229B
无线温度计从机.M51 13KB
无线温度计从机_Uv2.Bak 0B
无线温度计从机 10KB
无线温度计从机_Opt.Bak 972B
无线温度计从机.Uv2 2KB
主机电路图
主机.pcbdoc_viewstate 2KB
主机.PrjPcbStructure 46B
主机.PcbDoc 402KB
主机.PcbDocPreview 62KB
主机.sch 46KB
主机.SchDoc 170KB
主机.OutJob 3KB
主机.PrjPcb 31KB
主机.SchDocPreview 57KB
主机.PcbDoc.htm 7KB
共 45 条
- 1
资源评论
>行者<
- 粉丝: 209
- 资源: 135
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 猫咪和汤58.apk
- 浏览器.apk
- 基于matlab实现是一个matlab中的power system 中搭建的一个模型
- 基于JSP毕业设计-教学管理系统(源代码+论文).zip
- 基于JSP毕业设计-家政管理系统-毕业设计.zip
- 基于Python实现淘宝商品评论采集(含逆向)源代码
- 基于matlab实现多目标进化算法NSGAⅡ&Matlab讲解.rar
- 基于matlab实现多车辆车辆路径问题,用遗传算法编程,保证可用.rar
- 基于matlab实现多层极限学习机实现手写体识别,准确率超过99%.rar
- 基于matlab实现电力系统最优潮流程序,可以应用于电力市场下的最优潮流计算 适合电力系统专业的同仁使用.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功