找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2717|回复: 3
收起左侧

单片机PCF8591热敏电阻测试数码管显示的源码等资料

[复制链接]
ID:343624 发表于 2018-7-13 22:44 | 显示全部楼层 |阅读模式
这里面有我搜集的一些资料,特地分享给大家。
0.png

单片机源程序如下:
  1. /*----------------------------------------------------------------------------
  2.   名称:IIC协议 PCF8591 AD/DA转换 测试热敏电阻

  3.   内容:使用1路ad测试热敏电阻阻值,并查表得到温度值,

  4.                 温度精度和多种参数有关,在这里只是简单应用演示,存在误差是正常的。
  5. ------------------------------------------------------------------------------*/  
  6. #include <reg52.h>               
  7. #include "i2c.h"
  8. #include "delay.h"
  9. #include "display.h"


  10. code unsigned int  vt_table[]=        // 电压温度对照表
  11.         {
  12.                 4132,4098,4063,4026,3988,3949,3908,3866,3823,3779,
  13.                 3733,3686,3639,3590,3540,3489,3437,3385,3331,3277,
  14.                 3222,3166,3110,3054,2997,2940,2882,2824,2767,2709,
  15.                 2651,2593,2536,2478,2421,2365,2309,2253,2198,2143,
  16.                 2089,2036,1984,1932,1881,1831,1782,1734,1686,1640,
  17.                 1594,1550,1506,1464,1422,1381,1341,1303,1265,1228,
  18.                 1192
  19.         
  20.         };

  21. #define AddWr 0x90   //写数据地址 PCF8591
  22. #define AddRd 0x91   //读数据地址 PCF8591

  23. extern bit ack;
  24. unsigned char ReadADC(unsigned char Chl);
  25. /*------------------------------------------------
  26.               主程序
  27. ------------------------------------------------*/
  28. main()
  29. {
  30. unsigned int num=0;
  31. unsigned char i,temp;
  32. Init_Timer0();

  33. while (1)         //主循环
  34.   {
  35.   
  36. num=ReadADC(0);
  37. //变成mv 最大值255 。255x19=4845mv,如果增加精度可以使用浮点计算
  38. num=num*19;   
  39. for(i=0;i<61;i++)
  40.    {
  41. //判断采集电压值大于或者等于表格电压时,停下来并记录当前i值
  42.     if(num >= vt_table[i])
  43.        {
  44.         temp=i;
  45. //如果是前10个数据表明是负温度,需要把温度符号显示出来,并且前10位温度递增
  46.         if(i<10)
  47.           {
  48.           temp=10-temp;    //如果i=0,表示-10
  49.           TempData[0]=0x40;//'-'号
  50.           }
  51.         else
  52.           {
  53.           temp-=10; //如果大于等于10表明正温度,把前10个表格负温度去掉
  54.           TempData[0]=0x00;//符号位显示空
  55.           }
  56.                 break;             //检测到即跳出循环,否则继续循环
  57.         }
  58.          
  59.       }
  60. TempData[3]=dofly_DuanMa[temp/10];//显示2位数温度值
  61. TempData[4]=dofly_DuanMa[temp%10];
  62. DelayMs(200);                    //延时防止采集频率过快
  63.   }
  64. }
  65. /*------------------------------------------------
  66.              读AD转值程序
  67. 输入参数 Chl 表示需要转换的通道,范围从0-3
  68. 返回值范围0-255
  69. ------------------------------------------------*/
  70. unsigned char ReadADC(unsigned char Chl)
  71. {
  72.    unsigned char Val;
  73.    Start_I2c();               //启动总线
  74.    SendByte(AddWr);             //发送器件地址
  75.      if(ack==0)return(0);
  76.    SendByte(0x40|Chl);            //发送器件子地址
  77.      if(ack==0)return(0);
  78.    Start_I2c();
  79.    SendByte(AddWr+1);
  80.       if(ack==0)return(0);
  81.    Val=RcvByte();
  82.    NoAck_I2c();                 //发送非应位
  83.    Stop_I2c();                  //结束总线
  84.   return(Val);
  85. }

复制代码

所有资料51hei提供下载:
部分参考例程.rar (1.06 MB, 下载次数: 58)
回复

使用道具 举报

ID:343624 发表于 2018-7-13 22:45 | 显示全部楼层
大家一起努力
回复

使用道具 举报

ID:468227 发表于 2019-3-14 11:55 | 显示全部楼层
负温度系数热敏电阻
吗?
回复

使用道具 举报

ID:328914 发表于 2019-5-30 17:32 | 显示全部楼层
看不懂 为什么要乘以19????!!!!
回复

使用道具 举报

ID:406078 发表于 2019-11-7 14:06
有朋友要一起交流吗?有几个地方有点晕 微信:13538636746

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

本版积分规则

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

Powered by 单片机教程网

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