久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1106|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)AD7705測電壓,顯示正常但報(bào)警不正常

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 40 黑幣 回復(fù)本帖可獲得 20 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:1045846 發(fā)表于 2024-1-28 19:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
用AD7705測試電壓,LCD1602上顯示的電壓值是正常的,但設(shè)置的報(bào)警條件不起作用。償試了好久都不成功,各位老師幫忙看看是哪出錯(cuò)了。
謝謝。

  1. #include<reg52.h>
  2. #include"lcd.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define ulong unsigned long
  6. sbit ADC_CS=P1^0;   //AD7705使能端
  7. sbit ADC_CLK=P1^1;  //AD7705外部時(shí)鐘信號(hào)輸入端
  8. sbit ADC_DIN=P1^2;   //單片機(jī)給AD7705數(shù)據(jù)輸入端
  9. sbit ADC_DOUT=P1^3;  //AD7705模數(shù)轉(zhuǎn)換結(jié)果輸出端
  10. sbit ADC_DRDY=P1^4;  //AD7705邏輯輸出端,用于控制結(jié)果是否輸出

  11. uchar AD_data;                                    //采樣值存儲(chǔ)
  12. sbit Alarm_led_red =P3^0;                         //超過電壓上限紅色led報(bào)警定義
  13. sbit Alarm_led_green=P3^1;                        //低于電壓下限蜂鳴器報(bào)警定義

  14. unsigned char ad_alarm;                           //報(bào)警值存儲(chǔ)單元

  15. uchar date[6]={0,0,0,0,0,0};
  16. uint result0[8]={0,0,0,0,0,0,0,0};
  17. uint result1[8]={0,0,0,0,0,0,0,0};


  18. void Display(uint AD_data);
  19. void Display1(uint AD_data);

  20. void Delay_1ms(uint c)
  21. {
  22.         uchar a,b;
  23.         for(;c>0;c--)
  24.         {
  25.                 for(b=199;b>0;b--)
  26.                 {
  27.                         for(a=1;a>0;a--);
  28.                 }
  29.         }
  30. }

  31. void WriteToReg_ADC(uint byteword )                //發(fā)送控制字
  32. {
  33.         uint AD16bit,Token;
  34.         uchar i;
  35.         ADC_CLK=1;
  36.         ADC_CS=0;
  37.         Token=0x80;
  38.         AD16bit=byteword;
  39.         for(i=0;i<8;i++)
  40.         {
  41.                 if(AD16bit&Token)
  42.                         ADC_DIN=1;
  43.                 else
  44.                         ADC_DIN=0;
  45.                 ADC_CLK=1;
  46.                 ADC_CLK=0;
  47.                 ADC_CLK=1;
  48.                 Token=Token>>1;
  49.         }
  50.         ADC_CLK=1;
  51.         ADC_DIN=1;
  52. }

  53. uint ReadADC_16BitValue(uchar channel)        //發(fā)送控制字準(zhǔn)備讀取的通道,接著讀取數(shù)據(jù)
  54. {
  55.         uint AD16bit;
  56.         uchar i;
  57.         WriteToReg_ADC(0x38|channel);
  58.         while(ADC_DRDY==1);
  59.         ADC_CLK=1;
  60.         ADC_CS=0;
  61.         AD16bit=0x00;
  62.         for(i=0;i<16;i++)
  63.         {
  64.                 AD16bit=AD16bit<<1;
  65.                 ADC_CLK=0;
  66.                 if(ADC_DOUT==1)
  67.                         AD16bit=AD16bit|0x01;
  68.                 ADC_CLK=1;
  69.         }
  70.         ADC_CLK=1;
  71.         ADC_DIN=1;
  72.         return(AD16bit);
  73. }

  74. void InitADC()
  75. {
  76.         uchar i;
  77.         ADC_CLK=1;
  78.         ADC_DIN=1;
  79.         ADC_CS=0;
  80.         for(i=0;i<40;i++)                  //自校驗(yàn)
  81.         {
  82.                 ADC_CLK=0;
  83.                 ADC_CLK=1;
  84.         }
  85.         WriteToReg_ADC(0x20);
  86.         WriteToReg_ADC(0x02);
  87.         WriteToReg_ADC(0x10);
  88.         WriteToReg_ADC(0x44);
  89.         WriteToReg_ADC(0x21);
  90.         WriteToReg_ADC(0x02);
  91.         WriteToReg_ADC(0x11);
  92.         WriteToReg_ADC(0x44);
  93.         Delay_1ms(50);
  94. }

  95. void main()
  96. {        
  97.         uchar i;
  98.         ulong sum=0;
  99.         uint result;
  100.         float h;
  101.         lcd1602init();
  102.         InitADC();
  103.         lcd1602writecom(0x80);
  104.         lcd1602writedata('1');
  105.         lcd1602writecom(0x81);
  106.         lcd1602writedata(':');
  107.         lcd1602writecom(0x83);
  108.         lcd1602writedata('.');
  109.         lcd1602writecom(0x87);
  110.         lcd1602writedata('V');
  111.         lcd1602writecom(0xc0);
  112.         lcd1602writedata('2');
  113.         lcd1602writecom(0xc1);
  114.         lcd1602writedata(':');
  115.         lcd1602writecom(0xc3);
  116.         lcd1602writedata('.');
  117.         lcd1602writecom(0xc7);
  118.         lcd1602writedata('V');
  119.         while(1)
  120.         {
  121.                 WriteToReg_ADC(0x20);
  122.                 WriteToReg_ADC(0x02);
  123.                 WriteToReg_ADC(0x10);
  124.                 WriteToReg_ADC(0x44);
  125.                 Delay_1ms(60);
  126.                 for(i=0;i<8;i++)
  127.                 {
  128.                   result0[i]=ReadADC_16BitValue(0);
  129.                   sum=sum+result0[i];
  130.                 }
  131.                 sum=sum/8;
  132.                 result=(uint)sum;
  133.                 sum=0;         
  134.                 h=result;
  135.                 result=h*5000/65536;
  136.                 Display(result);
  137.                 result=0;
  138.         //        Delay_1ms(500);
  139.                
  140.                 WriteToReg_ADC(0x21);
  141.                 WriteToReg_ADC(0x02);
  142.                 WriteToReg_ADC(0x11);
  143.                 WriteToReg_ADC(0x44);
  144.                 Delay_1ms(60);
  145.                  for(i=0;i<8;i++)
  146.                 {
  147.                   result1[i]=ReadADC_16BitValue(1);
  148.                   sum=sum+result1[i];
  149.                 }
  150.                 sum=sum/8;
  151.                 result=(uint)sum;
  152.                 sum=0;               
  153.                 h=result;
  154.                 result=(float)h*5000/65536;
  155.                 Display1(result);
  156.                 result=0;
  157.         //        Delay_1ms(500);               
  158.         }
  159. }

  160. void Display(uint AD_data)
  161. {
  162.         date[4]=AD_data%10000/1000;
  163.         date[2]=AD_data%1000/100;
  164.         date[1]=AD_data%100/10;
  165.         date[0]=AD_data%10;
  166.         lcd1602writecom(0x82);
  167.         lcd1602writedata(48+date[4]);
  168.         lcd1602writecom(0x84);
  169.         lcd1602writedata(48+date[2]);
  170.         lcd1602writecom(0x85);
  171.         lcd1602writedata(48+date[1]);
  172.         lcd1602writecom(0x86);
  173.         lcd1602writedata(48+date[0]);
  174. }

  175. void Display1(uint AD_data)
  176. {
  177.         date[4]=AD_data%10000/1000;        
  178.         date[2]=AD_data%1000/100;
  179.         date[1]=AD_data%100/10;
  180.         date[0]=AD_data%10;
  181.         lcd1602writecom(0xc2);
  182.         lcd1602writedata(48+date[4]);
  183.         lcd1602writecom(0xc4);
  184.         lcd1602writedata(48+date[2]);
  185.         lcd1602writecom(0xc5);
  186.         lcd1602writedata(48+date[1]);
  187.         lcd1602writecom(0xc6);
  188.         lcd1602writedata(48+date[0]);
  189. }

  190. /*****************報(bào)警子函數(shù)*******************/

  191. void alarm(void)
  192. {
  193. if((AD_data<=2000)&&(AD_data>=1500))      //電壓高于1.5V,低于2.0V
  194. {
  195. (Alarm_led_green=0)&(Alarm_led_red=1);  //綠燈亮,蜂鳴器關(guān)閉
  196. }
  197. else if((AD_data<=200))               //電壓低于0.2V
  198. {
  199. (Alarm_led_red=1)&(Alarm_led_green=1);  //綠燈滅,蜂鳴器關(guān)閉
  200. }
  201. else                                          
  202. (Alarm_led_green=1)&(Alarm_led_red=0);        //綠燈滅,蜂鳴器打開        
  203. }
復(fù)制代碼





AD77051-0.4.rar

49.73 KB, 下載次數(shù): 7

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2024-1-29 08:49 | 只看該作者
1.報(bào)警函數(shù)alarm()沒有調(diào)用。
2.報(bào)警函數(shù)寫的也不對(duì)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1045846 發(fā)表于 2024-2-1 21:31 | 只看該作者
wulin 發(fā)表于 2024-1-29 08:49
1.報(bào)警函數(shù)alarm()沒有調(diào)用。
2.報(bào)警函數(shù)寫的也不對(duì)。

感謝老師的提醒,現(xiàn)在OK了。
回復(fù)

使用道具 舉報(bào)

地板
ID:1108581 發(fā)表于 2024-2-1 21:48 | 只看該作者
大佬牛比,我看了半天也沒看出來,經(jīng)過提示發(fā)現(xiàn)還真是這個(gè)問題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费视频网站视频社区 | 欧美成人激情 | 国产黄色大片 | av免费网址 | 国产亚洲日本精品 | 国产一区二| 亚洲精品91 | 精品1区 | 亚洲顶级毛片 | 精品粉嫩超白一线天av | 一级黄色毛片 | 欧美成人免费在线 | 综合成人在线 | 欧美激情免费在线 | 99久久久久久99国产精品免 | 日本超碰 | 亚洲精品资源 | 国产丝袜人妖cd露出 | 国产欧美在线一区二区 | 国产99热精品 | 国内精品视频免费观看 | 日韩精品一区二区三区第95 | 91超碰在线观看 | 欧美成人一区二免费视频软件 | 国产精品一区二区在线 | 亚洲综合在线播放 | 午夜视频在线免费观看 | 一级午夜aaa免费看三区 | 日韩不卡在线 | 欧美a级成人淫片免费看 | 精品免费国产视频 | 国产在线中文字幕 | 久久久激情| 亚洲电影一区二区三区 | 日韩视频精品在线 | 久久免费观看一级毛片 | 亚洲综合视频一区 | 国产一区二区视频在线观看 | 色在线免费 | 凹凸日日摸日日碰夜夜 | 国内精品视频在线观看 |