找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的温度检测程序

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit din=P3^0;                 
  6. sbit load=P3^1;
  7. sbit clk=P3^2;                  
  8. sbit dq=P3^3;
  9. uchar dig;
  10. bit list_flag = 0;
  11. uchar code tab[]={ 0x7e,  //"0"
  12.                 0x30,  //"1"
  13.                 0x6d,  //"2"
  14.                 0x79,  //"3"
  15.                 0x33,  //"4"
  16.                 0x5b,  //"5"
  17.                 0x5f,  //"6"
  18.                 0x70,  //"7"
  19.                 0x7f,  //"8"
  20.                 0x7b,  //"9"
  21.                                 0x4e,
  22.                                 0x63,
  23.                                 0x01,
  24.                                 0x00  
  25.                                 };   // 共阴极数码管显示0-9  
  26. uchar data temp_data[2] = {0x00,0x00};
  27. uchar data display[] = {0x00,0x00,0x00,0x00,0x00,0x00};
  28. uchar code ditab[] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
  29.                       0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};        
  30. void delay(uint xms)   //定义延时函数
  31. {
  32.         while(xms--);
  33. }
  34. uchar init_ds18b20()
  35. {
  36.   uchar status;
  37.   dq = 1;
  38.   delay(8);
  39.   dq = 0;
  40.   delay(90);
  41.   dq = 1;
  42.   delay(8);
  43.   status = dq;
  44.   delay(100);
  45.   dq = 1;
  46.   return(status);
  47. }
  48. uchar readonebyte()
  49. {
  50.   uchar i = 0;
  51.   uchar dat = 0;
  52.   for(i = 8;i > 0;i--)
  53.   {
  54.           dq = 0;
  55.         dat >>=1;
  56.         dq = 1;
  57.         _nop_();
  58.         _nop_();
  59.         if(dq)
  60.         {
  61.           dat |= 0x80;
  62.         }
  63.         delay(4);
  64.         dq = 1;
  65.   }
  66.   return(dat);
  67. }
  68. void writeonebyte(uchar dat)
  69. {
  70.   uchar i = 0;
  71.   for(i = 8;i > 0;i--)
  72.   {
  73.            dq = 0;
  74.          dq = dat&0x01;
  75.          delay(5);
  76.          dq = 1;
  77.          dat >>=1;
  78.   }
  79. }
  80. void read_temperature()
  81. {
  82. if(init_ds18b20() == 1)
  83. {
  84.    list_flag = 1;
  85. }
  86. else
  87. {
  88.   list_flag = 0;
  89.   writeonebyte(0xcc);
  90.   writeonebyte(0x44);
  91.   init_ds18b20();
  92.   writeonebyte(0xcc);
  93.   writeonebyte(0xbe);
  94.   temp_data[0]=readonebyte();
  95.   temp_data[1]=readonebyte();
  96. }
  97. }
  98. void temperture_trans()
  99. {
  100.   uchar ng = 0;
  101.   if((temp_data[1]&0xf8) == 0xf8)
  102.   {
  103.    temp_data[1]= ~temp_data[1];
  104.    temp_data[0]= ~temp_data[0]+1;
  105.    if(temp_data[0] == 0x00)
  106.    {
  107.     temp_data[1]++;
  108.    }
  109.    ng = 1;
  110.   }
  111.   display[4] = temp_data[0]&0x0f;
  112.   display[0] = ditab[display[4]];
  113.   display[4] = ((temp_data[0]&0xf0) >> 4)|((temp_data[1]&0x0f) << 4);
  114.   display[3] = display[4]/100;
  115.   display[1] = display[4]%100;
  116.   display[2] = display[1]/10;
  117.   display[1] = display[1]%10;
  118.   if(ng == 1)
  119.   {
  120.    display[5] = 12;
  121.   }
  122.   else
  123.   {
  124.           display[5]=13;
  125.         }
  126.         if(!display[3])
  127.         {
  128.                 if(!display[2])
  129.                         display[2]=13;
  130.         }
  131. }

  132. void write_7219(uchar add,uchar date)
  133. {
  134.         uchar i;
  135.         load=0;
  136.         for(i=0;i<8;i++)
  137.         {
  138.                 clk=0;
  139.                 din=add&0x80;
  140.                 add<<=1;
  141.                 clk=1;
  142.         }
  143.         for(i=0;i<8;i++)
  144.         {
  145.                 clk=0;
  146.                 din=date&0x80;
  147.                 date<<=1;
  148.                 clk=1;
  149.         }
  150.         load=1;
  151. }

  152. void init_7219()
  153. {
  154.         write_7219(0x0c,0x01);
  155.         write_7219(0x0a,0x0f);
  156.         write_7219(0x09,0x00);
  157.         write_7219(0x0b,0x07);
  158. }

  159. void disp_max7219(uchar dig,uchar date)
  160. {
  161.         write_7219(dig,date);
  162. }

  163. void main()
  164. {
  165.         init_7219();
  166.         while(1)
  167.         {
  168.                 temperture_trans();
  169.                 read_temperature();
  170.                 if(list_flag==0)
  171.                 {
  172.                         disp_max7219(1,tab[display[5]]);
  173.                         disp_max7219(2,tab[display[3]]);
  174.                         disp_max7219(3,tab[display[2]]);
  175.                         disp_max7219(4,tab[display[1]]|0x80);
  176.                         disp_max7219(5,tab[display[0]]);
  177.                         disp_max7219(7,tab[11]);
  178.                         disp_max7219(8,tab[10]);
  179.                 }
  180.         }
  181. }
复制代码


捕获.PNG (97.38 KB, 下载次数: 34)

捕获.PNG

捕获1.PNG (98.27 KB, 下载次数: 31)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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