找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机ADC采集,热敏电阻制作温度计程序

[复制链接]
跳转到指定楼层
楼主
ID:284348 发表于 2018-2-25 16:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1602显示温度计程序.rar (28.2 KB, 下载次数: 104)


单片机源程序如下:
  1. #include<AT89x51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. //******************adc0832****************************//
  6. //AD
  7. sbit CLK=P2^1;
  8. sbit CS=P2^2;
  9. sbit DO=P2^3;
  10. sbit DI=P2^3;

  11.   //继电器

  12. sbit jidian=P3^3;
  13. sbit jidguan=P3^0;

  14. //数码管显示
  15. sbit fist=P2^7;
  16. sbit seconed=P2^6;
  17.   sbit three=P2^5;
  18.   sbit forth=P2^4;
  19. sbit k1=P3^4;
  20. sbit k2=P3^5;
  21. sbit k3=P3^6;
  22. sbit k4=P3^7;


  23. //char CC[]="11001001";
  24. uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  25. uchar temp;
  26. int y,a=-13;
  27. uint vvv,i;


  28. //通道的选择:0x02就是单通道0;0x03就是单通道1;
  29. //0x00就是双通道ch0="+";   ch0="-"
  30. //0x01就是双通道ch0="-";   ch0="+"
  31. //*****************************************************//
  32. void delay(int tt)
  33. {       


  34. while(tt--)
  35.   {for(i=0;i<120;i++);}
  36. }
  37. void startADC()                                          
  38. {
  39. CS=1;
  40. _nop_();
  41. _nop_();
  42. CLK=0;
  43. _nop_();
  44. _nop_();
  45. CS=0;
  46. _nop_();
  47. _nop_();
  48. DI=1;
  49. _nop_();
  50. _nop_();
  51. CLK=1;
  52. _nop_();
  53. _nop_();
  54. DI=0;
  55. _nop_();
  56. _nop_();
  57. CLK=0;
  58. _nop_();                                                 
  59. _nop_();
  60. }
  61. void choiceADC(uint CH)//CH为0选择通道ch0,为1,选择ch1进行AD转换
  62. {
  63. startADC();
  64. if(CH==0)
  65. {
  66. DI=1;
  67. _nop_();
  68. CLK=1;//上升沿DI=1
  69. _nop_();
  70. CLK=0;//1个下降沿DI=1
  71. _nop_();
  72. DI=0;
  73. _nop_();
  74. CLK=1;
  75. _nop_();
  76. CLK=0;//第3个上升沿DI=0
  77. _nop_();
  78. }
  79. else
  80. {
  81. CLK=0;
  82. _nop_();
  83. DI=1;
  84. _nop_();
  85. CLK=1;//上升沿DI=1                               
  86. _nop_();
  87. CLK=0;//1个下降沿DI=1
  88. _nop_();
  89. DI=1;
  90. _nop_();
  91. CLK=1;//第3个上升沿DI=0
  92. _nop_();
  93. }
  94. /********通道选择结束开始读取转换后的二进制数****/
  95. CLK=1;
  96. _nop_();
  97. CLK=0;//下降沿读数,一下进行判断和处理,共8次
  98. for(i=0;i<8;i++)
  99.       {
  100.    DI=1;
  101.    if(DO)
  102.       {
  103.    temp |=0x01;
  104.    }
  105.     else
  106.       {
  107.    temp &=0xfe;                                  
  108.    }
  109.       CLK=0;
  110.    _nop_();
  111.    CLK=1;
  112.    temp=temp<<1;
  113.    }
  114. //         vvv=temp;
  115. //   if(temp<62)          vvv=30;
  116. //    else         if(temp>62&&temp<68)        vvv=50;
  117. //   else         if(temp>68&&temp<70)        vvv=100;
  118. //   else         if(temp>70&&temp<80)        vvv=101;
  119. //    else         if(temp>80)        vvv=102;
  120.                 y=a/6*(temp+16)+434;
  121.   
  122. }



  123. void display(uint dat)
  124. {
  125. //P2=0x80;
  126. fist=0; delay(1); fist=1;       
  127.            seconed=0;         three=0;  forth=0;
  128. P0=tab[dat/1000];
  129. //delay(1);
  130. //P0=0xff;

  131. //P2=0x40;
  132. seconed=0; delay(1);  seconed=1;       
  133.   fist=0;          three=0; forth=0;
  134. P0=tab[dat%1000/100];
  135. //delay(1);
  136. //P0=0xff;

  137. //P2=0x20;
  138. three=0; delay(1);          three=1;
  139.                         fist=0;         seconed=0; forth=0;
  140. P0=tab[dat%100/10];
  141. //delay(1);
  142. //P0=0xff;

  143. //P2=0x10;
  144. forth=0; delay(1); forth=1;
  145.                         fist=0; seconed=0;         three=0;
  146. P0=tab[dat%10];
  147. //delay(1);
  148. //P0=0xff;
  149. }
  150.    
  151. void main()            
  152. {          int i;
  153. jidian=0;jidguan=0;

  154.         P0=0xff;
  155.         while(1){        
  156.          choiceADC(0);
  157.    delay(1);
  158.    display(temp);       
  159.         if(k3==0){i=1;
  160.    while(i)
  161.    {
  162.       choiceADC(0);
  163.    delay(1);
  164.    
  165.        
  166.   
  167.    

  168.                
  169. //                if(k1==0)
  170. //                {
  171. //          delay(50);
  172. //                if(k1==0)
  173. //                {temp++;
  174. //                if(temp>255) {temp=0;}
  175. //                while(!k1);//
  176. //                }
  177. //          }
  178. //               
  179. //                if(k2==0)
  180. //                {
  181. //         delay(500);
  182. //                if(k2==0)
  183. //                {temp--;
  184. //                if(temp<0) {temp=255;}
  185. //                while(!k2);//
  186. //               
  187. //                }
  188. //          }
  189.                

  190.            display(y);
  191.          if(y<30) { jidian=0;jidguan=0;P1=0xfe; }        //慢  1盏绿灯亮
  192.         else if(y>32) {jidian=1;jidguan=1;P1=0xda; }         //快  3盏绿灯亮
  193.                   
  194.                 if(k4==0) {i=0;jidian=0;jidguan=1;P1=0xf7;}//开关停止,红灯亮



  195.    }
  196.    }
  197. }
  198.            }
复制代码




评分

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

查看全部评分

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

使用道具 举报

沙发
ID:301273 发表于 2018-4-3 08:58 | 只看该作者
好东西,多谢分享
回复

使用道具 举报

板凳
ID:164172 发表于 2018-4-3 10:35 | 只看该作者
精度做到多少?回头再研究你的代码……
回复

使用道具 举报

地板
ID:444215 发表于 2019-3-22 14:17 | 只看该作者
长知识啦
回复

使用道具 举报

5#
ID:444215 发表于 2019-3-22 14:18 | 只看该作者
非常不错
回复

使用道具 举报

6#
ID:685140 发表于 2020-1-14 21:33 | 只看该作者
谢谢大神
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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