找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2846|回复: 0
收起左侧

基于pcf8591+tlc2543的单片机双路温度检测报警系统 带串口上位机控制

[复制链接]
ID:296972 发表于 2018-5-12 21:37 | 显示全部楼层 |阅读模式
基于pcf8591 tlc2543的双路温度检测报警系统 带串口上位机控制带仿真 源程序
温度传感器是 LM35
两路测温通道所用的ad芯片分别是pcf8591 和 tlc2543
仿真开始运行后  串口助手发a 启动pcf那路的测量 并显示在6位一体数码管
串口助手发b 启动tlc那路的测量 并显示在6位一体数码管
当tlc那路温度超过100摄氏度 蜂鸣器报警 并且上位机收到error!字符串
pcf那路测温范围0-150摄氏度
tlc那路测温0-120摄氏度 数码管显示到小数点后一位

注意 运行仿真前要把两个lm35的初始温度设置为150摄氏度和30摄氏度 否则会抱错 什么real time simulation failed
上面的lm35初始温度设置为150摄氏度 下面的设置为30摄氏度 如下图所示

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
s.png e.png b.png a.png begin.png


单片机源程序如下:
  1. #include "tlc2543.h"
  2. #include "uart.h"

  3. #define TIME_PERIOD 300
  4. unsigned char DSY_BUFF_CODE[16] = {0xc0,0xf9,0xa4,0xb0,
  5.                                         0x99,0x92,0x82,0xf8,
  6.                                         0x80,0x90,0x88,0x83,
  7.                                         0xc6,0xa1,0x86,0x8e};
  8. unsigned char txt[] = "Error!";
  9. sbit seg1 = P2^2;
  10. sbit seg2 = P2^3;
  11. sbit seg3 = P2^4;
  12. sbit seg4 = P2^5;
  13. sbit seg5 = P2^6;

  14. sbit bell = P3^7;  //pcf8591那路温度超过100摄氏度 报警
  15. sbit led = P3^6;   //pcf8591那路温度超过100摄氏度 闪灯
  16. void timer_init();
  17. unsigned int read_tmp();

  18. unsigned int temp_pcf8591,temp_tlc2543;
  19. bit flag;





  20. void main()
  21. {         

  22.         timer_init();
  23.         UART_int();       
  24. //        send_dc(0xff);                               
  25.         bell = 0;
  26.     led = 0;               
  27.     while(1)
  28.         {
  29.                  temp_pcf8591 = read_tmp();
  30.                 temp_tlc2543 = get_data();
  31.        
  32.                 if(temp_pcf8591>=10000) {bell = 1;        led = 1;        send_string(txt);}
  33.                 else {        bell = 0; led = 0;}
  34.                          
  35.         }
  36. }

  37. void timer_init()
  38. {
  39.         TMOD=0x01;
  40.         TH0=(65536-TIME_PERIOD)/256;
  41.         TL0=(65536-TIME_PERIOD)%256;  
  42.         EA=1;
  43.         ET0=1;  
  44. //        TR0=1;                                                            //先不开启定时器0  后面通过上位机发特定字符来开启定时器从而显示温度
  45. }


  46. void timer0_int ()interrupt 1
  47. {        static unsigned char num = 0;
  48.         static unsigned int temp;
  49.         num++;

  50.         TH0=(65536-TIME_PERIOD)/256;
  51.         TL0=(65536-TIME_PERIOD)%256;

  52.         if(flag) temp = temp_pcf8591;        //flag标志位控制要显示的温度值(pcf8591所测的温度还是tlc2543测的温度)
  53.         else temp = temp_tlc2543;


  54.         switch(num)                                           //动态显示
  55.         {
  56.                 case 1:
  57.                 P2 &= 0x03;
  58.                 P0 = (DSY_BUFF_CODE[temp/10000]);
  59.                 seg1 = 1;
  60.                 break;

  61.                 case 2:
  62.                 P2 &= 0x03;
  63.                 P0 = DSY_BUFF_CODE[temp%10000/1000];
  64.                 seg2 = 1;
  65.                 break;               

  66.                  case 3:
  67.                 P2 &= 0x03;
  68.                 P0 = (DSY_BUFF_CODE[temp%1000/100])&(0x7f);
  69.                 seg3 = 1;
  70.                 break;

  71.                  case 4:
  72.                 P2 &= 0x03;
  73.                 P0 = DSY_BUFF_CODE[temp%100/10];
  74.                 seg4 = 1;
  75.                 break;

  76.                 default:
  77.                 break;
  78.                        

  79.         }
  80.          if(num==4) num =0;
  81.        

  82. }


  83. void UART_ISR() interrupt 4
  84. {

  85.         if(RI)
  86.         {
  87.          P2 = ~P2;       
  88.                  RI=0;
  89.            if(SBUF == 'a')
  90.                 {
  91.                         TR0 = 1;                        //发a  开启定时器0
  92.                         flag = 1;                        //并且显示pcf8591的温度
  93.                
  94.                 }

  95. ……………………

  96. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.jpg

所有资料51hei提供下载:
新建文件夹.rar (110.87 KB, 下载次数: 39)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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