找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机显示8bit精度的湿度,一直是00 求帮助

[复制链接]
跳转到指定楼层
楼主
想要用数码管来显示8bit精度的湿度,但不知道哪里错了,显示一直是00,求大佬帮帮忙。s1,s2是两个中断源,中断程序是用来显示我事先设定的湿度阈值的。


单片机源程序如下:
  1. #include "reg52.H"
  2. #include <intrins.H>      
  3. #include <stdio.h>
  4. #define MEASURE_HUMI 0x05
  5. #define ACK 1
  6. #define noACK 0
  7. #define STATUS_RSG_W 0x06
  8. #define STATUS_RSG_R 0x07
  9. #define FUNCTION_SET
  10. #define _7SEG_H_
  11. sbit DATA=P1^0;
  12. sbit SCK=P1^1;
  13. sbit s1=P3^2;
  14. sbit s2=P3^3;
  15. sbit s3=P1^2;
  16. sbit s4=P1^3;
  17. sbit s5=P1^6;
  18. sbit s6=P3^4;
  19. sbit DBPort=0x80;
  20. sbit led1=P1^4;
  21. sbit led2=P1^5;
  22. unsigned char shidu;
  23. unsigned int a=0x20;
  24. unsigned int b=0x40;
  25. unsigned int c[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  26. unsigned char d;
  27. unsigned char e;
  28. unsigned char f;
  29. unsigned char g;
  30. void Delay100ms()                //@12.000MHz
  31. {
  32.         unsigned char i, j, k;

  33.         _nop_();
  34.         _nop_();
  35.         i = 5;
  36.         j = 144;
  37.         k = 71;
  38.         do
  39.         {
  40.                 do
  41.                 {
  42.                         while (--k);
  43.                 } while (--j);
  44.         } while (--i);
  45. }

  46. void Disp()
  47. {
  48.   f=e;
  49.         e=e&0x0F;

  50.         d=c[e];
  51.         P2=d;
  52.         f=f>>4;
  53.         f=f&0x0F;

  54.         f=c[f];
  55.         P0=f;
  56. }
  57. void Disp1()
  58. {
  59.         unsigned char i,j;
  60.   i=g;
  61.         g=g&0x0F;

  62.         j=c[g];
  63.         P2=j;
  64.         i=i>>4;
  65.         i=i&0x0F;

  66.         i=c[i];
  67.         P0=i;
  68. }
  69. char write_byte(unsigned char value)
  70. {
  71. unsigned char        error=0;
  72.         unsigned char i=0;
  73.         for(i=0x80;i>0;i/=2)
  74.         {
  75.                 if(i&value)
  76.                         DATA=1;
  77.                 else
  78.                         DATA=0;
  79.                 SCK=1;
  80.                 _nop_();_nop_();_nop_();
  81.                 SCK=0;        
  82.         }
  83.         DATA=1;
  84.         SCK=1;
  85.         error=DATA;
  86.         _nop_();_nop_();_nop_();
  87.         SCK=0;
  88.         DATA=1;
  89.         return error;
  90. }
  91. char read_byte(unsigned char ack)
  92. {
  93.         unsigned char i,val=0;
  94.         DATA=1;
  95.         for(i=0x80;i>0;i/=2){
  96.                 SCK=1;
  97.         if(DATA)
  98.                 val=(val|i);
  99.         _nop_();_nop_();_nop_();
  100.         SCK=0;
  101.         }
  102.         if(ack==1)DATA=0;
  103.         else DATA=1;
  104.         _nop_();_nop_();_nop_();
  105.         SCK=1;
  106.         _nop_();_nop_();_nop_();
  107.         SCK=0;
  108.         _nop_();_nop_();_nop_();
  109.         DATA=0;
  110.         return val;
  111.         
  112. }
  113. void qidong(void){
  114.         DATA=1;SCK=0;
  115.         _nop_();
  116.         SCK=1;
  117.         _nop_();
  118.         DATA=0;
  119.         _nop_();
  120.         SCK=0;
  121.         _nop_();
  122.         SCK=1;
  123.         _nop_();
  124.         DATA=1;
  125.         _nop_();
  126.         SCK=0;
  127. }
  128. void reset(void){
  129. unsigned char i;
  130.         DATA=1; SCK=0;
  131.         for(i=0;i<9;i++)
  132.         {SCK=1;
  133.                 SCK=0;
  134.         }
  135.                 qidong();
  136. }
  137. char measure(unsigned char h,unsigned char j,unsigned char k){
  138. unsigned int i;
  139.         unsigned char error=0;
  140.         qidong();
  141.         error+=write_byte(MEASURE_HUMI);
  142.         for(i=0;i<65535;i++)if(DATA==0)break;
  143.         if(DATA) error+=1;
  144.         h=read_byte(ACK);
  145.         j=read_byte(ACK);
  146.         k=read_byte(noACK);
  147.         return error;
  148. }

  149. void int0_isr()interrupt 0
  150. {
  151.         EA=0;
  152.         g=a;
  153.         Disp1();
  154.         Delay100ms();
  155.         while(s1==1)
  156.                 {
  157.         if(s3==0)
  158.         {a++;
  159.         Delay100ms();
  160.                 g=a;
  161.         Disp1();
  162.         }
  163.         if(s4==0)
  164.         {
  165.                 a--;
  166.                 Delay100ms();
  167.                 g=a;
  168.         Disp1();
  169.         }
  170. }
  171.                 EA=1;
  172.    IE0=0;
  173. }

  174. void int2_isr()interrupt 2
  175. {
  176.                 EA=0;
  177.         g=b;
  178.         Disp1();
  179.         Delay100ms();
  180.         while(s2==0)
  181.                 {
  182.         if(s3==0)
  183.         {b++;
  184.                 Delay100ms();
  185.                 g=b;
  186.         Disp1();
  187.         }
  188.         if(s4==0)
  189.         {
  190.                 b--;
  191.                 Delay100ms();
  192.                 g=b;
  193.         Disp1();
  194.         }
  195. }
  196.                 EA=1;
  197.     IE1=0;
  198. }
  199. void shoudong()
  200. {

  201.         if(s5==0)
  202.         {        led1=0;
  203.                 Delay100ms();
  204.         while(s5==1)
  205.         {led1=0;

  206.           Disp();
  207.                 Delay100ms();
  208.         }
  209.         }
  210.         led1=1;
  211.         if(s6==0)
  212.         {        led2=0;
  213.                 Delay100ms();
  214.         while(s6==1)
  215.         {led2=0;

  216.                 Delay100ms();
  217. }
  218.         }
  219.         led1=1;
  220. }

  221. void main()
  222. {
  223.         unsigned  char error;
  224.         unsigned char hh;
  225.         unsigned check;
  226.         Delay100ms();
  227.         error=0;
  228.         IT0=1;
  229.         IT1=1;


  230.         EA=1;

  231.         EX1=1;
  232.         EX0=1;
  233.   P0=0;
  234.         P2=0;
  235.         reset();
  236.         Delay100ms();
  237.         
  238.         error+=measure(shidu,hh,check);
  239.         if(error=1)reset();
  240.   e=shidu;
  241.         Disp();
  242.   Delay100ms();
  243.         
  244.         while(1){
  245.          shoudong();
  246.         while(shidu>a)
  247.         {
  248.           shoudong();
  249.                 led1=0;

  250.                 Delay100ms();
  251.         }
  252.         led1=1;
  253.         while(shidu<b)
  254.         {
  255.     shoudong();
  256.                 led2=0;

  257.                 Delay100ms();
  258.         }
  259.         led2=1;
  260. }        
  261. }
复制代码

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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