找回密码
 立即注册

QQ登录

只需一步,快速开始

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

温控系统

[复制链接]
跳转到指定楼层
楼主
ID:124161 发表于 2016-6-4 18:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原代码:
  1. #include<reg51.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  2. #include<stdio.h>
  3. #include "LCD12864.h"
  4. #include "18b20.h"
  5. #include "delay.h"

  6. uint count1=70,count2=35;
  7. unsigned char moshicount=1;
  8. unsigned char GNcount=0;
  9. sbit moshi=P1^4;
  10. sbit INC=P1^5;
  11. sbit DEC=P1^6;
  12. sbit gongneng=P1^7;
  13. sbit K1=P1^1;
  14. //阀值设置函数   
  15. void shezhi()
  16. {

  17.    
  18.     moshi=1;
  19.     gongneng=1;
  20.     if(moshi==0)
  21.     {
  22.         DelayMs(10);
  23.         while(moshi==0);
  24.         moshicount++;
  25.     }
  26.     if(gongneng==0)
  27.     {
  28.         DelayMs(10);
  29.         while(gongneng==0);
  30.         GNcount++;
  31.         if(GNcount==3)
  32.             GNcount=0;
  33.     }
  34.     switch(moshicount)
  35.     {
  36.         case 1:
  37.         {
  38.             INC=1;DEC=1;
  39.             if(INC==0)
  40.             {
  41.                 DelayMs(10);
  42.                 while(INC==0);
  43.                 count1++;
  44.             }
  45.             else if(DEC==0)
  46.             {
  47.                 DelayMs(10);
  48.                 while(DEC==0);
  49.                 count1--;
  50.             }
  51.          
  52.         }break;
  53.         case 2:
  54.         {
  55.             
  56.             INC=1;DEC=1;
  57.             if(INC==0)
  58.             {
  59.                 DelayMs(10);
  60.                 while(INC==0);
  61.                 count2++;
  62.             }
  63.             else if(DEC==0)
  64.             {
  65.                 DelayMs(10);
  66.                 while(DEC==0);
  67.                 count2--;
  68.             }
  69.          
  70.         }break;
  71.         case 3:
  72.         {
  73.             moshicount=0;
  74.             
  75.         }break;
  76.     default :break;
  77.     }
  78.    
  79. }



  80. void InitTimer0(void)//定时计数器0初始化
  81. {
  82.     TMOD = 0x01;
  83.     TH0 = 0x0D8;
  84.     TL0 = 0x0F0;
  85.     EA = 1;
  86.     ET0 = 1;
  87.     TR0 = 1;
  88. }



  89. void Timer0Interrupt(void) interrupt 1//定时计数器0中断服务
  90. {
  91.     TH0 = 0x0D8;
  92.     TL0 = 0x0F0;
  93.     shezhi();
  94.    
  95. }

  96. /*------------------------------------------------
  97.               串口通讯初始化
  98. ------------------------------------------------*/
  99. void UART_Init(void)
  100. {
  101.     SCON  = 0x50;               // SCON: 模式 1, 8-bit UART, 使能接收  
  102.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
  103.     TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
  104.     TR1   = 1;                  // TR1:  timer 1 打开                        
  105.     //EA    = 1;                  //打开总中断
  106.     //ES    = 1;                  //打开串口中断
  107.     TI =1;
  108. }

  109. void main(void)
  110. {
  111. unsigned int TempH,TempL,temp;
  112. double temperature;
  113. uchar displaytemp[16];//定义显示区域临时存储数组
  114. InitTimer0();
  115. lcd_init();
  116. UART_Init();
  117. DelayMs(10);          //延时有助于稳定
  118. while(1)
  119. {
  120.   temp=ReadTemperature();
  121.   temperature=(double)temp*0.0625;
  122.   if(temp&0x8000)
  123.      {
  124.      temp=~temp;  // 取反加1
  125.      temp +=1;
  126.      }
  127.   else
  128.      TempH=temp>>4;
  129.      TempL=temp&0x0F;
  130.      TempL=TempL*6/10;//小数近似处理
  131.      printf("%d.%d\n",TempH,TempL);
  132.   
  133.   sprintf(displaytemp,"温度: %7.3f *C",temperature);//打印温度值(%7.3fbiaoshi)
  134.   lcd_char(1,0,16,displaytemp);
  135.   if(moshicount!=0)
  136.     {
  137.     sprintf(displaytemp,"最高温度:%3d  *C",count1);
  138.     lcd_char(2,0,16,displaytemp);
  139.     sprintf(displaytemp,"最低温度:%3d  *C",count2);
  140.     lcd_char(3,0,16,displaytemp);   
  141.    }
  142.    
  143.     if(GNcount==0)
  144.         {   
  145.             uchar c[16]="功能选择: 关闭  ";
  146.             lcd_char(4,0,16,c);
  147.         }
  148.     if(GNcount==1)  
  149.         {
  150.             uchar c[16]="功能选择: 保温  ";
  151.             lcd_char(4,0,16,c);
  152.             K1=1;
  153.         
  154.         }
  155.     if(GNcount==2)  
  156.         {
  157.             uchar c[16]="功能选择: 加热  ";
  158.             lcd_char(4,0,16,c);
  159.             K1=1;
  160.         }

  161. }
  162. }
复制代码



全部资料(压缩包)下载
温控系统.rar (175.67 KB, 下载次数: 46)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:67678 发表于 2016-6-5 02:17 | 只看该作者
共享资料的黑币奖励!
回复

使用道具 举报

板凳
ID:79544 发表于 2016-6-6 10:49 | 只看该作者
楼主12864显示用的是串口显示啊!
回复

使用道具 举报

地板
ID:124699 发表于 2016-6-16 16:16 | 只看该作者
看看  正需要
回复

使用道具 举报

5#
ID:124699 发表于 2016-6-16 16:17 | 只看该作者
打不开仿真软件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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