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

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

QQ登錄

只需一步,快速開(kāi)始

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

自己做的51單片機(jī)控制AD7746芯片讀取電容值

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
花了一個(gè)人月的時(shí)間用51單片機(jī)來(lái)讀取AD7746芯片的電容采集程序
本人已作出調(diào)試成功,歡迎下載


完整程序代碼下載:
AD7746數(shù)碼管.zip (73 KB, 下載次數(shù): 140)


部分源碼預(yù)覽:
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define MAIN_Fosc                11059200UL        //宏定義主時(shí)鐘HZ
  4. /*位聲明*/
  5. sbit SCL=P1^0;
  6. sbit SDA=P1^1;
  7. //sbit RDY=P3^3;
  8. sbit DU=P2^1;   //數(shù)碼管段選
  9. sbit WE=P2^3;   //數(shù)碼管位選

  10. #define CAPDAC 0

  11. unsigned long int H,M,L;//
  12. unsigned char MRD[3]={0,0,0};
  13. /*自定義類型名*/
  14. typedef unsigned char INT8U;
  15. typedef unsigned char uchar;

  16. typedef unsigned int INT16U;
  17. typedef unsigned int uint;

  18. float cfvalue; //得到的溫度值
  19. /*************************數(shù)碼管程序**************************/
  20. /*數(shù)碼管毫秒級(jí)延時(shí)函數(shù)*/
  21. void Delay_Ms(INT16U ms)
  22. {
  23.      INT16U i;
  24.          do{
  25.               i = MAIN_Fosc / 96000;
  26.                   while(--i);   //96T per loop
  27.      }while(--ms);
  28. }
  29. /*共陰極數(shù)碼管段選碼*/
  30. uchar code table[]={
  31. //0                1         2     3     4     5     6     7     8
  32. 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
  33. //9     A     B           C         D           E         F                -         .          關(guān)顯示
  34. 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80, 0x00
  35.                    };
  36. /*共陰極數(shù)碼管顯示函數(shù)*/
  37. void Display(uchar cfvalue)
  38. {
  39. //------------------------------
  40.         DU = 1;
  41.         P0 = table[cfvalue/100]|0x80;        //管顯示百位
  42.         DU = 0;

  43.         P0 = 0xff;                                  //清除斷碼

  44.         WE = 1;
  45.         P0 = 0xfe;                          //第一位數(shù)碼管
  46.         WE = 0;
  47.         Delay_Ms(5);
  48. //-------------------------------
  49.         DU = 1;
  50.         P0 = table[cfvalue%100/10]; //顯示十位
  51.         DU = 0;

  52.         P0 = 0xff;                                  //清除斷碼

  53.         WE = 1;
  54.         P0 = 0xfd;                          //第二位數(shù)碼管
  55.         WE = 0;
  56.         Delay_Ms(5);
  57. //-------------------------------
  58.         DU = 1;
  59.         P0 = table[cfvalue%10];                //顯示個(gè)位
  60.         DU = 0;
  61.                                                                
  62.         P0 = 0xff;                                        //清除斷碼

  63.         WE = 1;
  64.         P0 = 0xfb;                                //第三位數(shù)碼管
  65.         WE = 0;
  66.         Delay_Ms(5);
  67. }

  68. /*************************IIC程序**************************/
  69. /*IIC延時(shí)函數(shù)*/
  70. void delay( )//微秒延時(shí)
  71. {;;}
  72. //開(kāi)始信號(hào)
  73. void start()
  74. {
  75.           SDA=1;
  76.           delay();
  77.           SCL=1;
  78.           delay();
  79.           SDA=0;
  80.           delay();
  81. }
  82. //停止
  83. void stop()
  84. {
  85.           SDA=0;
  86.           delay();
  87.           SCL=1;
  88.           delay();
  89.           SDA=1;
  90.           delay();
  91. }
  92. //應(yīng)答
  93. void respons()
  94. {
  95.         uchar i;
  96.         SCL=1;
  97.         delay();
  98.         while((SDA==1)&&(i<250));
  99.         SCL=0;
  100.         delay();
  101. }
  102. //初始化
  103. void init()
  104. {
  105.         SDA=1;
  106.         delay();
  107.         SCL=1;
  108.         delay();
  109. }
  110. //IIC寫入一個(gè)字節(jié)
  111. void write_byte(uchar date)//II2給AD7746 寫一個(gè)字節(jié) 例如電容
  112. {
  113.         uchar i,temp;
  114.         temp=date;
  115.         for(i=0;i<8;i++)
  116.         {
  117.                 temp=temp<<1;
  118.                 SCL=0;
  119.                 delay();
  120.                 SDA=CY;
  121.                 delay();
  122.                 SCL=1;
  123.                 delay();
  124.          }
  125.          SCL=0;
  126.          delay();
  127.          SDA=1;
  128.          delay();
  129. }
  130. //IIC讀取一個(gè)字節(jié)
  131. uchar read_byte()//讀一個(gè)字節(jié) 把AD7746中的數(shù)據(jù)讀送給II2總線
  132. {
  133.         uchar i,k;
  134.         SCL=0;
  135.         delay();
  136.         SDA=1;
  137.         delay();
  138.         for(i=0;i<8;i++)
  139.         {
  140.                  SCL=1;
  141.             delay();
  142.                 k=(k<<1)|SDA;
  143.                 SCL=0;
  144.                 delay();
  145.          }
  146.          return k;
  147. }
  148. /*************************AD7746程序**************************/
  149. //重置AD7746
  150. void AD7746_reset()
  151. {
  152.         start();
  153.         write_byte(0xBF); //AD7746重置
  154.         stop();
  155. }
  156. //AD7756指定地址寫
  157. void write_add(uchar addr,uchar date)
  158. {
  159.         start();
  160.         write_byte(0x90);
  161.         respons();
  162.         write_byte(addr);
  163.         respons();
  164.         write_byte(date);
  165.         respons();
  166.         stop();
  167. }
  168. //讀取AD7746的值
  169. void read_add(uchar *p,uchar n)
  170. {
  171.         uchar i;
  172.         start();
  173.         write_byte(0x90);
  174.         respons();
  175.         write_byte(0x01);
  176.         respons();
  177.         start();
  178.         write_byte(0x91);
  179.         respons();
  180.         for(i=0;i<n;i++)
  181.         {
  182.                 *p=read_byte();
  183.                 p++;
  184.         }
  185.         stop();
  186. }
  187. //總初始化
  188. void initt()
  189. {
  190.         init();         //初始化
  191.         AD7746_reset();        //重置
  192.         write_add(0x07,0x80);//地址0x07,設(shè)置成0x80使能電容通道,單端輸入
  193.         write_add(0x09,0x2B);//EXC設(shè)置
  194.         write_add(0x0A,0xA1);//配置寄存器 地址指針0x0A,設(shè)置成0xA1(連續(xù)轉(zhuǎn)換模式)
  195.         write_add(0x0B,0x80);//電容DAC A
  196.         write_add(0x0C,0x80);//電容DAC B
  197. }
  198. void main()
  199. {
  200.         initt();
  201.         while(1)
  202.         {
  203.                 read_add(MRD,3);//讀取的值共有3個(gè)字節(jié)24位
  204.                 H=MRD[0];//讀取高8位數(shù)據(jù)
  205.                 H<<=16;
  206.                 L=MRD[1];//讀取中8位數(shù)據(jù)
  207.                 L<<=8;
  208.                 M=MRD[2];//讀取低8位數(shù)據(jù)
  209.                 H=H+L+M;//將讀取到的3個(gè)字節(jié)合并

  210.              cfvalue=(float)((H-0x800000)*4.096/0x800000+CAPDAC)*100;//將十六進(jìn)制轉(zhuǎn)化為10進(jìn)制表
  211.              Delay_Ms(5);
  212. …………余下內(nèi)容下載附件……
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:207676 發(fā)表于 2017-6-6 09:43 | 只看該作者
樓主用的什么型號(hào)的單片機(jī)啊,我現(xiàn)在正急需用AD7746來(lái)測(cè)微小電容
回復(fù)

使用道具 舉報(bào)

板凳
ID:210471 發(fā)表于 2017-6-28 21:52 | 只看該作者
電路可以給我參考一下嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:265379 發(fā)表于 2018-5-25 15:18 | 只看該作者
樓主  為什么資料下載不下來(lái)了呢  能發(fā)一份給我嘛
回復(fù)

使用道具 舉報(bào)

5#
ID:346396 發(fā)表于 2018-6-6 21:06 | 只看該作者
樓主用的什么單片機(jī)?電路圖可以看看嘛?
回復(fù)

使用道具 舉報(bào)

6#
ID:732432 發(fā)表于 2020-4-18 23:51 | 只看該作者
請(qǐng)問(wèn)用的是AT89C52嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 懂色中文一区二区在线播放 | 91精品一区二区三区久久久久 | 欧美日韩综合视频 | 91精品国产高清久久久久久久久 | 一级片成人 | 色欧美片视频在线观看 | 亚洲一区二区av | 久久精品久久久久久 | 国产精品不卡视频 | 美女在线国产 | 精品国产乱码久久久久久88av | 亚洲欧美日韩成人在线 | 欧美久久久网站 | 久久精品小视频 | 日本午夜网站 | 免费av观看 | 亚洲在线成人 | 99久久免费精品国产男女高不卡 | julia中文字幕久久一区二区 | 免费一级黄色电影 | 国产一区二区三区四区五区加勒比 | 亚洲国产成人精品久久 | 亚洲人久久 | 久久成人免费视频 | 成人a免费 | 麻豆av网| 国产视频黄色 | 黄色一级毛片免费看 | 亚洲国产精品一区二区三区 | 天天操欧美 | 国产精品高潮呻吟久久久久 | 午夜成人免费视频 | 欧美精品一区二区三区四区五区 | 九九综合九九 | 亚洲+变态+欧美+另类+精品 | 91精品国产综合久久久久久漫画 | 国产精品18hdxxxⅹ在线 | 怡红院免费的全部视频 | 亚洲福利在线视频 | 欧美bondage紧缚视频 | 国产在线观看网站 |