任务: 采用温度传感器和单片机等电路独立设计并制作一个简易数字式温度控制装置。

资源下载地址:

https://download.csdn.net/download/qq_40707685/10764080

单路温度

双路温度

部分代码:

#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[]="000000000 ";
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;}
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;}}
}

完整资源截图:

资源下载地址:https://download.csdn.net/download/qq_40707685/10764080

南理工紫金单片机课程设计相关推荐

  1. Linux课程设计八音盒,单片机课程设计——八音盒精要.doc

    单片机课程设计--八音盒精要 <单片机原理及应用>课程设计 ---八音盒设计--- 院 系: 机电汽车工程学院 姓 名: 班 级: 机101-4班 组 长: 组 员: 指导教师: 姜风国 ...

  2. 单片机彩灯移动实验_单片机课程设计彩灯实验.doc

    单片机课程设计彩灯实验 彩灯控制器设计 1.项目要求及参数 1.1用指令语句实现对C51的控制,从而实现对彩灯变化的控制. 1.2用定时器控制彩灯变化,用语句查询方式实现程序设计. 1.3用定时器控制 ...

  3. 检测噪声大小的c语言程序,单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计.doc...

    单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计 摘 要 本文以AT89S52 单片机为控制核心,通过播音判断电路寻找广播间歇时段,实时采集噪声环境内的噪音信 号,根据A/ D 转换 ...

  4. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》...

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

  5. 单片机实现水位控制C语言,单片机课程设计 水位自动控制.doc

    单片机课程设计 水位自动控制 河南机电高等专科学校电气工程系 电子课程设计报告 设计题目:水位自动控制 专业: 电机与电器 班级: 101 班 学号: 姓名: 指导教师: 设计时间: 2012-6-2 ...

  6. 单片机模拟计算机课设,单片机课程设计题目汇总(全)

    单片机原理与接口技术课程设计题目汇总,说明:为便于同学提前探讨开发思路,要求:课程设计考核内容包括:源程序,一.基于单片机的电子时钟设计,设计内容:1.用LCD液晶作为显示设备(30分),2.可以分别 ...

  7. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》... 1

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

  8. 51单片机课程设计《三路步进电机控制》

    说明:最近抽出了几天时间完成了单片机的课程设计,用了51单片机做了三路步进电机控制器,美名其曰3d打印机控制器(其实是瞎搞的,与3D打印机毫无关系),因为单片机课程设计是在大四上学期,与考研复习时间冲 ...

  9. c语言c51单片机点亮8个灯,单片机课程设计-8个LED灯来回点亮

    <单片机课程设计-8个LED灯来回点亮>由会员分享,可在线阅读,更多相关<单片机课程设计-8个LED灯来回点亮(20页珍藏版)>请在人人文库网上搜索. 1.目录第一章 绪论-3 ...

最新文章

  1. Ubuntu文件的复制、移动和删除命令
  2. java jxl 写 excel_Java 操作Excel(jxl读和写)
  3. 中国的程序员为什么这么辛苦?
  4. 自动备份SQL Server数据库中用户创建的Stored Procedures
  5. 玩转 SpringBoot 2 之整合定时任务篇
  6. php xml解析为数组,PHP如何将XML转成数组
  7. python fromarray_python --- 之pil image.fromarray
  8. java设计汽车为父类_JAVA设计一个汽车类作为父类,包含汽车的相关属性和方法。电动汽车,普通汽车,混合汽车,...
  9. Spring Boot 消息
  10. java实现分布式项目搭建
  11. 通达OA2008从windows环境移植到linux部署手册
  12. swotppt模板_swot分析ppt(最好swot模板)20285.ppt
  13. 物联网平台类型有哪些
  14. mysql用户标签表设计_「用户标签」在数据库设计时应该如何存储?
  15. Average (区间最大均值,二分)
  16. springboot集成阿里云直播,低延时直播
  17. Excel根据名字批量插入图片
  18. 程序化那么神秘,究竟在做什么事情
  19. 【已解决】Java保存数据超时失败 ClickHouse exception, code 1002, 8123 failed to respon,keep_alive_timeout参数
  20. 新改版代shua网源码 已对接艾K支付 附25套模板

热门文章

  1. 周志华教授《机器学习》中PCA求解错了?
  2. 已解决[W:11:55:47.235 NotebookApp] Cannot bind to localhostusing 127.0:0.1 as defaultip[winError 10055]
  3. 求数列中的第1~k小元素
  4. Excel VBA工程密码破解程序 (绝对可以破解)
  5. 25 参数估计——样本量的确定
  6. ZOJ 4062 Plants vs. Zombies(二分答案)
  7. fulltext全文索引的使用
  8. APP推广的十大法宝,快速提升APP的转化率
  9. python爬虫笔记(学习T)
  10. Android 10 Settings应用如何去掉一级菜单定时开关机