找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2027|回复: 0
打印 上一主题 下一主题
收起左侧

基于51单片机的超温报警器程序

[复制链接]
跳转到指定楼层
楼主
ID:109043 发表于 2016-3-15 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*-----------------------------------------------
  2.   名称:DS18b20数码管显示 超温报警
  3. /***********************************************************
  4. 实验名称:DS18b20数码管显示 超温报警
  5. 程序说明:显示格式 符号 xxx.x C ,可以显示负温度 超过设定温度报警
  6. 实验平台:YZ200 V2.0开发箱
  7. 作者:徐锐锋
  8. 日期:2010-11
  9. 广州研展电子科技有限公司 (我爱研发网)  版权所有
  10. ***********************************************************/

  11. #include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  12. #include "18b20.h"

  13. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
  14. #define CtrlPort P1 //定义位选端口

  15. #define OVERTEMP 60 //定义超温报警数值


  16. bit ReadTempFlag;//定义读时间标志


  17. unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9
  18. unsigned char code WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码
  19. unsigned char TempData[8]; //存储显示值的全局变量


  20. void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数
  21. void Init_Timer0(void);//定时器初始化
  22. /*------------------------------------------------
  23.                     主函数
  24. ------------------------------------------------*/
  25. void main (void)
  26. {                  
  27. unsigned int TempH,TempL,temp;
  28. Init_Timer0();
  29. while (1)         //主循环
  30.   {


  31. if(ReadTempFlag==1)
  32. {
  33.   ReadTempFlag=0;
  34.   temp=ReadTemperature();
  35.   if(temp&0x8000)
  36.      {
  37.      TempData[0]=0x40;//负号标志
  38.      temp=~temp;  // 取反加1
  39.          temp +=1;
  40.          }
  41.   else
  42.      TempData[0]=0;

  43.      TempH=temp>>4;
  44.      TempL=temp&0x0F;
  45.      TempL=TempL*6/10;//小数近似处理

  46.         if(TempH>OVERTEMP)//如果超温则提示
  47.        TempData[0]=~0x76;//显示"H"
  48.         else
  49.            TempData[0]=0;


  50.     if(TempH/100==0)
  51.           TempData[6]=0;
  52.         else
  53.       TempData[6]=DuanMa[TempH/100]; //十位温度
  54.     if((TempH/100==0)&&((TempH%100)/10==0))//消隐
  55.           TempData[5]=0;
  56.         else
  57.      TempData[5]=DuanMa[(TempH%100)/10]; //十位温度
  58.      TempData[4]=DuanMa[(TempH%100)%10]&0x7f; //个位温度,带小数点
  59.      TempData[3]=DuanMa[TempL];
  60.          TempData[1]=0x39;         //显示C符号
  61.   }        
  62. }
  63. }

  64. /*------------------------------------------------
  65. 显示函数,用于动态扫描数码管
  66. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
  67. 如输入0表示从第一个显示。
  68. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
  69. ------------------------------------------------*/
  70. void Display(unsigned char FirstBit,unsigned char Num)
  71. {
  72.       static unsigned char i=0;
  73.          

  74.            DataPort=0;   //清空数据,防止有交替重影

  75.        CtrlPort=WeiMa[i+FirstBit]; //取位码

  76.        DataPort=TempData[i]; //取显示数据,段码

  77.            i++;
  78.        if(i==Num)
  79.               i=0;


  80. }
  81. /*------------------------------------------------
  82.                     定时器初始化子程序
  83. ------------------------------------------------*/
  84. void Init_Timer0(void)
  85. {
  86. TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  87. //TH0=0x00;              //给定初值
  88. //TL0=0x00;
  89. EA=1;            //总中断打开
  90. ET0=1;           //定时器中断打开
  91. TR0=1;           //定时器开关打开
  92. }
  93. /*------------------------------------------------
  94.                  定时器中断子程序
  95. ------------------------------------------------*/
  96. void Timer0_isr(void) interrupt 1
  97. {
  98. static unsigned int num;
  99. TH0=(65536-2000)/256;                  //重新赋值 2ms
  100. TL0=(65536-2000)%256;

  101. Display(0,8);       // 调用数码管扫描
  102. num++;
  103. if(num==300)        //
  104.    {
  105.     num=0;
  106.     ReadTempFlag=1; //读标志位置1
  107.         }
  108. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表