找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AD7705双通道显示程序

[复制链接]
跳转到指定楼层
楼主
ID:592709 发表于 2020-4-22 17:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD双通道

单片机源程序如下:
  1. #ifndef __ADC7705_H__
  2. #define        __ADC7705_H__

  3. sbit AdDrdy= P1^2;
  4. sbit AdDin = P1^5;
  5. sbit AdDout= P1^6;         
  6. sbit AdClk = P1^7;
  7. unsigned int data4,data7;
  8. float data2,data6,data3,data5;

  9. //通讯寄存器地址定义
  10. #define     WR_Communic_REG     0x00   //选中写通信寄存器
  11. #define     WR_SETUP_REG        0x10   //选中写设置寄存器
  12. #define     RD_SETUP_REG        0x18   //选中设置寄存器
  13. #define     WR_CLOCK_REG        0x20   //选中写时钟寄存器
  14. #define     RD_DATA_REG1        0x38   //选中数据寄存器读 通道1
  15. #define     RD_DATA_REG2        0x39   //选中数据寄存器读 通道2
  16. #define     WR_OFFSET_REG       0x60   //选中写offset寄存器
  17. #define     RD_OFFSET_REG       0x68   //选中读offset寄存器
  18. #define     WR_FULL_REG         0x70   //选中写full scale寄存器
  19. #define     RD_FULL_REG         0x78   //选中读full scale寄存器

  20. void delay(uint x)            //延时Xms
  21. {
  22.         uint i,j;
  23.         for(i=x;i>0;i--)
  24.                 for(j=110;j>0;j--);
  25. }
  26. ///////////////以下是16位A/D7705驱动程序///////////////
  27. void WriteByte7705(unsigned char x)
  28. {
  29.         unsigned char a;
  30.         AdClk = 1;
  31.         _nop_();
  32.         _nop_();
  33.         _nop_();
  34.         _nop_();
  35.         _nop_();
  36.         _nop_();
  37.         for (a=0; a<8; a++)
  38.         {
  39.                 AdClk=0;
  40.                 if(x & 0x80)
  41.                         AdDin=1;
  42.                 else
  43.                         AdDin=0;
  44.                 _nop_();
  45.                 _nop_();
  46.                 _nop_();
  47.                 _nop_();
  48.                 _nop_();
  49.                 _nop_();
  50.                 AdClk=1;   
  51.                 _nop_();
  52.                 _nop_();
  53.                 _nop_();
  54.                 _nop_();
  55.                 _nop_();
  56.                 _nop_();
  57.                 x<<=1;
  58.         }
  59.         AdDin=1;
  60. }

  61. void InitADC7705()
  62. {
  63.     int t;
  64.         AdClk=1;
  65.     AdDin=1;

  66.         for(t=0;t<40;t++)
  67.         {
  68.                 AdClk=0;
  69.                 _nop_();
  70.                 _nop_();
  71.                 AdClk=1;
  72.                 _nop_();
  73.                 _nop_();
  74.         }
  75.         delay(10);
  76.         WriteByte7705(0x20);     
  77.         WriteByte7705(0x0c);
  78.         WriteByte7705(0x10);     
  79.         WriteByte7705(0x44);
  80.         delay(10);       
  81.         /*while (AdDrdy);
  82.         delay(10);       
  83.         WriteByte7705(0x10);
  84.         WriteByte7705(0x80);
  85.         while (AdDrdy);
  86.         delay(10);*/
  87.         WriteByte7705(0x11);   
  88.         WriteByte7705(0x44);
  89.         /*while (AdDrdy);
  90.         delay(10);
  91.         WriteByte7705(0x11);
  92.         WriteByte7705(0x80);
  93.         while (AdDrdy); */
  94.         delay(10);       
  95. }


  96. void InitADC7705CH2()
  97. {
  98.     int t;
  99.         AdClk=1;
  100.     AdDin=1;
  101.         for(t=0;t<40;t++)
  102.         {
  103.                 AdClk=0;
  104.                 _nop_();
  105.                 _nop_();
  106.                 AdClk=1;
  107.                 _nop_();
  108.                 _nop_();
  109.         }
  110.         delay(10);
  111.         WriteByte7705(0x21);     
  112.     WriteByte7705(0x0c);  
  113.   
  114. }

  115. unsigned int  Read_16Byte7705ch1()
  116. {
  117.         unsigned int read16bit ;
  118.     unsigned char i;
  119.         WriteByte7705(0x10);     
  120.   WriteByte7705(0x44);
  121.         delay(10);  
  122.         WriteByte7705(0x38) ;    // 设置读当前通道数据,通道1 如果是通道2,改成WriteByte7705(0x39)
  123.         delay(2);
  124.         while (AdDrdy) ;             //等待数据准备好
  125.         AdClk= 1 ;
  126.         _nop_();
  127.         _nop_();
  128.         _nop_();
  129.         _nop_();
  130.         _nop_();
  131.         _nop_();
  132.         read16bit=0x0000;
  133.         for (i = 0 ;i < 16 ;i++ )
  134.         {
  135.                 read16bit <<= 1;
  136.         AdClk= 0;         
  137.         _nop_();
  138.                 _nop_();
  139.                 _nop_();
  140.                 _nop_();
  141.                 _nop_();
  142.                 _nop_();
  143.         if(AdDout)
  144.         {
  145.             read16bit++;
  146.         }
  147.         AdClk= 1;         
  148.         _nop_();
  149.                 _nop_();
  150.                 _nop_();
  151.                 _nop_();
  152.                 _nop_();
  153.                 _nop_();
  154.         }
  155.         return (read16bit);  
  156. }
  157. //unsigned int  Read_16Byte7705ch2()
  158. //{
  159. //        unsigned int read16bit ;
  160. //    unsigned char i;   
  161. //        WriteByte7705(0x39) ;    // 设置读当前通道数据,通道1 如果是通道2,改成WriteByte7705(0x39)
  162. //        delay(2);
  163. //        while (AdDrdy) ; \            //等待数据准备好
  164. //        AdClk= 1 ;
  165. //        _nop_();
  166. //        _nop_();
  167. //        _nop_();
  168. //        _nop_();
  169. //        _nop_();
  170. //        _nop_();
  171. //        read16bit=0x0000;
  172. //        for (i = 0 ;i < 16 ;i++ )
  173. //        {
  174. //                read16bit <<= 1;
  175. //        AdClk= 0;         
  176. //        _nop_();
  177. //                _nop_();
  178. //                _nop_();
  179. //                _nop_();
  180. //                _nop_();
  181. //                _nop_();
  182. //        if(AdDout)
  183. //        {
  184. //            read16bit++;
  185. //        }
  186. //        AdClk= 1;         
  187. //        _nop_();
  188. //                _nop_();
  189. //                _nop_();
  190. //                _nop_();
  191. //                _nop_();
  192. //                _nop_();
  193. //        }
  194. //        return (read16bit);  
  195. //}




  196. //将AD7705独处的数字量转化为电压,扩大1000倍
  197. unsigned int digital_to_voltagech1(float word1)
  198. {
  199.         //unsigned int data3;
  200.         //float data2;
  201.         if(word1>65535)
  202.                 word1=65535;
  203.         if(word1<0)
  204.                 word1=0;
  205.         data2=word1*1.0/65535;
  206.         data3=data2*5000;
  207.         data4=data2*12125;
  208.         return (data3);
  209. }

  210. unsigned int  Read_16Byte7705ch2()
  211. {
  212.         unsigned int read16bitCH2 ;
  213.     unsigned char i;
  214.         WriteByte7705(0x11);   
  215.         WriteByte7705(0x44);     
  216.   delay(10);
  217.         WriteByte7705(0x39) ;    // 设置读当前通道数据,通道1 如果是通道2,改成WriteByte7705(0x39)
  218.         delay(2);
  219.         while (AdDrdy) ;             //等待数据准备好
  220.         AdClk= 1 ;
  221.         _nop_();
  222.         _nop_();
  223.         _nop_();
  224.         _nop_();
  225.         _nop_();
  226.         _nop_();
  227.         read16bitCH2=0x0000;
  228.         for (i = 0 ;i < 16 ;i++ )
  229.         {
  230.                 read16bitCH2 <<= 1;
  231.         AdClk= 0;         
  232.         _nop_();
  233.                 _nop_();
  234.                 _nop_();
  235.                 _nop_();
  236.                 _nop_();
  237.                 _nop_();
  238.         if(AdDout)
  239.         {
  240.             read16bitCH2++;
  241.         }
  242.         AdClk= 1;         
  243.         _nop_();
  244.                 _nop_();
  245.                 _nop_();
  246.                 _nop_();
  247.                 _nop_();
  248.                 _nop_();
  249.         }
  250.         return (read16bitCH2);  
  251. }

  252. unsigned int digital_to_voltagech2(float word2)
  253. {
  254.         //unsigned int data3;
  255.         //float data2;
  256.         if(word2>65535)
  257.                 word2=65535;
  258.         if(word2<0)
  259.                 word2=0;
  260.         data5=word2*1.0/65535;
  261.         data6=data5*5000;
  262.         data7=data5*12125;
  263.         return (data6);
  264. }

  265. ///////////////以上是16位A/D7705驱动程序///////////////

  266. #endif
复制代码

所有资料51hei提供下载:
AD双通道显示成品.rar (49.89 KB, 下载次数: 34)


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

使用道具 举报

沙发
ID:1 发表于 2020-4-23 01:21 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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