找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4088|回复: 1
收起左侧

热敏电阻测温仿真及AD1674单片机程序和pdf中文资料

[复制链接]
ID:137190 发表于 2016-9-3 02:48 | 显示全部楼层 |阅读模式
0.png
下面是热敏电阻的单片机测温度的AD1674程序:(完整代码和仿真工程文件及AD1674pdf中文资料请下载本帖最后的附件)
  1. #include <reg52.h>          
  2. #include <intrins.h>
  3. #include <math.h>

  4. typedef unsigned char uchar;
  5. typedef unsigned int  uint;
  6. code        uint VOL[]={                343,        339,        339,        335,        332,        332,        328,        324,        320,        320,       
  7.                                                         316,        312,        312,        308,        304,        300,        300,        296,        292,        292,
  8.                                                         289,        285,        285,        281,        277,        273,        273,        269,        265,        265,       
  9.                                                         261,        257,        257,        253,        250,        250,        246,        242,        242,        238,
  10.                                                         234,        234,        230,        230,        226,        222,        222,        218,        218,        214,       
  11.                                                         210,        210,        207,        207,        203,        199,        199,        195,        195,        191,
  12.                                                         191,        187,        187,        183,        179,        179,        175,        175,        171,        171,       
  13.                                                         167,        167,        164,        164,        160,        160,        160,        156,        156,        152,
  14.                                                         152,        148,        148,        144,        144,        140,        140,        140,        136,        136,       
  15.                                                         132,        132,        132,        128,        128,        125,        125,        125,        121,        121,
  16.                                                         121,        117,        113,        109,        109,        105,        101,        101,        97,                97,
  17.                                                         93,                89,                89,                85,                85,                82,                82,                78,                78,                74,       
  18.                                                         74,                70,                70,                66,                66,                66,                62,                62,                58,                58,       
  19.                                                         58,                54,                54,                54,                50,                50,                50,                46,                46,                46,       
  20.                                                         42,                42,                42,                42,                39,                39,                39,                39,                35,                35};

  21. code        uint Temper[]={                100,        150,        200,        250,        300,        350,        400,        450,        500,        550,       
  22.                                                         600,        650,        700,        750,        800,        850,        900,        950,        1000,        1050,
  23.                                                         1100,        1150,        1200,        1250,        1300,        1350,        1400,        1450,        1500,        1550       
  24.                                                         1600,        1650,        1700,        1750,        1800,        1850,        1900,        1950,        2000,        2050,
  25.                                                         2100,        2150,        2200,        2250,        2300,        2350,        2400,        2450,        2500,        2550,       
  26.                                                         2600,        2650,        2700,        2750,        2800,        2850,        2900,        2950,        3000,        3050,
  27.                                                         3100,        3150,        3200,        3250,        3300,        3350,        3400,        3450,        3500,        3550,       
  28.                                                         3600,        3650,        3700,        3750,        3800,        3850,        3900,        3950,        4000,        4050,
  29.                                                         4100,        4150,        4200,        4250,        4300,        4350,        4400,        4450,        4500,        4550,       
  30.                                                         4600,        4650,        4700,        4750,        4800,        4850,        4900,        4950,        5000,        5050,
  31.                                                         5100,        5200,        5300,        5400,        5500,        5600,        5700,        5800,        5900,        6000,
  32.                                                         6100,        6200,        6300,        6400,        6500,        6600,        6700,        6800,        6900,        7000,       
  33.                                                         7100,        7200,        7300,        7400,        7500,        7600,        7700,        7800,        7900,        8000,       
  34.                                                         8100,        8200,        8300,        8400,        8500,        8600,        8700,        8800,        8900,        9000,       
  35.                                                         9100,        9200,        9300,        9400,        9500,        9600,        9700,        9800,        9900,        10000};
  36. sbit STS=P1^0;                          
  37. sbit CE = P1^1;
  38. sbit CS=P1^2;
  39. sbit A0=P1^3;
  40. sbit RC=P1^4;

  41. sbit RS=P1^5 ;
  42. sbit RW=P1^6 ;
  43. sbit EN=P1^7 ;           

  44. void delay_ms(uint z)
  45. {
  46.         uint x,y;
  47.         for(x=z;x>0;x--)
  48.                 for(y=110;y>0;y--);
  49. }
  50. uint AD1674_Read(void)
  51. {
  52.         uint temp;
  53.         uchar temp1,temp2;
  54.         CS=1;        //片选信号
  55.         CE=0;        //初始化,关闭数据采集
  56.         CS=0;
  57.         A0=0;
  58.         RC=0;
  59.         CE=1;//CE=1,CS=0,RC=0,A0=0启动12位温度转换
  60.         _nop_();
  61.         while(STS==1);         //等待数据采集结束
  62.         CE=0;         //芯片使能关闭
  63.         RC=1;
  64.         A0=0;
  65.         CE=1;//CE=1,CS=0,RC=1,12/8=1,A0=0 允许高八位数据并行输出
  66.         _nop_();
  67.         temp1=P0; //读取转换结果的高八位
  68.         CE=0;  //芯片使能关闭
  69.         RC=1;
  70.         A0=1;
  71.         CE=1;//CE=1,CS=0,RC=1,12/8=0,A0=1 允许低四位数据 并行输出
  72.         _nop_();
  73.         temp2=P0;         //读取转换结果的第四位
  74.         temp=((temp1<<4)|(temp2&0X0F));          //高位和低位合成实际温度,temp2为PO口的高四位
  75.         return (temp);           //还回转换结果,右移四位是因为temp2为P0口的高四位
  76. }
  77. /*** 写数据***/
  78. void w_dat(unsigned char dat)
  79. {
  80.         RS = 1;
  81.         //EN = 0;
  82.         P2 = dat;
  83.         delay_ms(5);
  84.         RW = 0;
  85.         EN = 1;
  86.         EN = 0;
  87. }
  88. /*** 写命令***/
  89. void w_cmd(unsigned char cmd)
  90. {
  91.         RS = 0;
  92. //        EN = 0;
  93.         P2 = cmd;
  94.         delay_ms(5);
  95.         RW = 0;
  96.         EN = 1;
  97.         EN = 0;
  98. }                       
  99. /*** 发送字符串到LCD***/
  100. void w_string(unsigned char addr_start, unsigned char *p)
  101. {
  102.         unsigned char *pp;
  103.        
  104.         pp = p;
  105.         w_cmd(addr_start);
  106.         while (*pp != '\0')
  107.         {
  108.                 w_dat(*pp++);
  109.         }
  110. }          

  111. /*** 初始化1602****/
  112. void Init_LCD1602(void)
  113. {
  114.         EN = 0;
  115.         w_cmd(0x38);  // 16*2显示,5*7点阵,8位数据接口
  116.         w_cmd(0x0C);  // 显示器开、光标开、光标允许闪烁
  117.         w_cmd(0x06);  // 文字不动,光标自动右移
  118.         w_cmd(0x01);  // 清屏
  119. }
  120. void process(uint date,uchar add)
  121. {
  122.         uchar A[7];
  123.         A[0]=date/1000%10+'0';
  124.         A[1]=date/100%10+'0';
  125.         A[2]='.';       
  126.         A[3]=date/10%10+'0';
  127.         A[4]=date%10+'0';
  128.         A[5]='C';                        
  129.         w_string(add,A);
  130. }          
  131. void main()
  132. {

  133.         uchar i,flag=0;
  134.         uint result,temp1,temp2;
  135.         float        res;

  136.         Init_LCD1602();
  137.          
  138.         w_string(0x80,"Temper:");
  139.        
  140.         while (1)
  141.         {
  142.                  res=(float)(AD1674_Read());
  143.                  result=(uint)((res/2048.0-1.0)*500.0);
  144.                  
  145.                  temp1=abs(result-VOL[0]);
  146.                  for(i=1;i<150;i++)
  147.                  {
  148.                          temp2=abs(result-VOL[i]);
  149.                         if(temp1>=temp2)
  150.                         {
  151.                                 temp1=temp2;
  152.                                 flag=i;
  153.                         }
  154.                                
  155.                  }
  156.        
  157.                  process(Temper[flag],0x80+7);
  158.         }
  159. }
复制代码


0.png

热敏电路的仿真工程文件及AD1674的pdf中文资料等资料下载:
热敏电阻测温.zip (259.77 KB, 下载次数: 46)
回复

使用道具 举报

ID:310363 发表于 2018-5-1 00:32 | 显示全部楼层
好东西,值得学习。。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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