找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8550|回復(fù): 11
收起左側(cè)

單片機AD7705轉(zhuǎn)換程序

  [復(fù)制鏈接]
ID:199403 發(fā)表于 2017-5-11 09:25 | 顯示全部樓層 |閱讀模式
AD7705程序  
  1. #include<reg52.h> //頭文件
  2. #include<intrins.h>//頭文件
  3. #define uint unsigned int //宏定義
  4. #define uchar unsigned char//宏定義
  5. #define datlcd P0
  6. sbit lcdrs = P2^0;        //液晶讀                                
  7. sbit lcdrw = P2^1; //液晶寫
  8. sbit lcden = P2^2;//液晶選擇
  9. #define SOFT_SPI                /* 定義此行表示使用GPIO模擬SPI接口 */
  10. //#define HARD_SPI                /* 定義此行表示使用CPU的硬件SPI接口 */

  11. /* 通道1和通道2的增益,輸入緩沖,極性 */
  12. #define __CH1_GAIN_BIPOLAR_BUF        (GAIN_1 | UNIPOLAR | BUF_EN)
  13. #define __CH2_GAIN_BIPOLAR_BUF        (GAIN_1 | UNIPOLAR | BUF_EN)

  14. /*                                                                               
  15.         接線方法: STC89C52開發(fā)板,請使用杜邦線連接。

  16.     TM7705模塊   STC89C52開發(fā)板
  17.       VCC   ------  5.0V (3.3V)
  18.       GND   ------  GND
  19.       CS    ------  P1.0
  20.       RST   ------  P1.1   
  21.       DIN   ------  P1.2
  22.           SCK   ------  P1.3
  23.       DOUT  ------  P1.4
  24.       DRDY  ------  P1.5        
  25. */

  26. #if !defined(SOFT_SPI) && !defined(HARD_SPI)
  27.         #error "Please define SPI Interface mode : SOFT_SPI or HARD_SPI"
  28. #endif

  29. #ifdef SOFT_SPI                /* 軟件SPI */
  30.         /* 定義GPIO端口 */
  31.         sbit CS     = P1^0;
  32.         sbit RESET  = P1^1;
  33.         sbit DIN    = P1^2;
  34.         sbit SCK    = P1^3;
  35.         sbit DOUT   = P1^4;
  36.         sbit DRDY        = P1^5;

  37.         /* 定義口線置0和置1的宏 */
  38.         #define CS_0()                CS = 0
  39.         #define CS_1()                CS = 1

  40.         #define RESET_0()        RESET = 0
  41.         #define RESET_1()        RESET = 1

  42.         #define DI_0()                DIN = 0
  43.         #define DI_1()                DIN = 1

  44.         #define SCK_0()                SCK = 0
  45.         #define SCK_1()                SCK = 1

  46.         #define DO_IS_HIGH()        (DOUT != 0)

  47.         #define DRDY_IS_LOW()        (DRDY == 0)
  48. #endif

  49. #ifdef HARD_SPI                /* 硬件SPI */
  50.         #error "Don't surport Hard SPI Interface mode"
  51. #endif

  52. /* 通信寄存器bit定義 */
  53. enum
  54. {
  55.         /* 寄存器選擇  RS2 RS1 RS0  */
  56.         REG_COMM        = 0x00,        /* 通信寄存器 */
  57.         REG_SETUP        = 0x10,        /* 設(shè)置寄存器 */
  58.         REG_CLOCK        = 0x20,        /* 時鐘寄存器 */
  59.         REG_DATA        = 0x30,        /* 數(shù)據(jù)寄存器 */
  60.         REG_ZERO_CH1        = 0x60,        /* CH1 偏移寄存器 */
  61.         REG_FULL_CH1        = 0x70,        /* CH1 滿量程寄存器 */
  62.         REG_ZERO_CH2        = 0x61,        /* CH2 偏移寄存器 */
  63.         REG_FULL_CH2        = 0x71,        /* CH2 滿量程寄存器 */

  64.         /* 讀寫操作 */
  65.         WRITE                 = 0x00,        /* 寫操作 */
  66.         READ                 = 0x08,        /* 讀操作 */

  67.         /* 通道 */
  68.         CH_1                = 0,        /* AIN1+  AIN1- */
  69.         CH_2                = 1,        /* AIN2+  AIN2- */
  70.         CH_3                = 2,        /* AIN1-  AIN1- */
  71.         CH_4                = 3                /* AIN1-  AIN2- */
  72. };

  73. /* 設(shè)置寄存器bit定義 */
  74. enum
  75. {
  76.         MD_NORMAL                = (0 << 6),        /* 正常模式 */
  77.         MD_CAL_SELF                = (1 << 6),        /* 自校準(zhǔn)模式 */
  78.         MD_CAL_ZERO                = (2 << 6),        /* 校準(zhǔn)0刻度模式 */
  79.         MD_CAL_FULL                = (3 << 6),        /* 校準(zhǔn)滿刻度模式 */

  80.         GAIN_1                        = (0 << 3),        /* 增益 */
  81.         GAIN_2                        = (1 << 3),        /* 增益 */
  82.         GAIN_4                        = (2 << 3),        /* 增益 */
  83.         GAIN_8                        = (3 << 3),        /* 增益 */
  84.         GAIN_16                        = (4 << 3),        /* 增益 */
  85.         GAIN_32                        = (5 << 3),        /* 增益 */
  86.         GAIN_64                        = (6 << 3),        /* 增益 */
  87.         GAIN_128                = (7 << 3),        /* 增益 */

  88.         /* 無論雙極性還是單極性都不改變?nèi)魏屋斎胄盘柕臓顟B(tài),它只改變輸出數(shù)據(jù)的代碼和轉(zhuǎn)換函數(shù)上的校準(zhǔn)點 */
  89.         BIPOLAR                        = (0 << 2),        /* 雙極性輸入 */
  90.         UNIPOLAR                = (1 << 2),        /* 單極性輸入 */

  91.         BUF_NO                        = (0 << 1),        /* 輸入無緩沖(內(nèi)部緩沖器不啟用) */
  92.         BUF_EN                        = (1 << 1),        /* 輸入有緩沖 (啟用內(nèi)部緩沖器) */

  93.         FSYNC_0                        = 0,
  94.         FSYNC_1                        = 1                /* 不啟用 */
  95. };

  96. /* 時鐘寄存器bit定義 */
  97. enum
  98. {
  99.         CLKDIS_0        = 0x00,                /* 時鐘輸出使能 (當(dāng)外接晶振時,必須使能才能振蕩) */
  100.         CLKDIS_1        = 0x10,                /* 時鐘禁止 (當(dāng)外部提供時鐘時,設(shè)置該位可以禁止MCK_OUT引腳輸出時鐘以省電 */

  101.         /*
  102.                 2.4576MHz(CLKDIV=0 )或為 4.9152MHz (CLKDIV=1 ),CLK 應(yīng)置 "0"。
  103.                 1MHz (CLKDIV=0 )或 2MHz   (CLKDIV=1 ),CLK 該位應(yīng)置  "1"
  104.         */
  105.         CLK_4_9152M = 0x08,
  106.         CLK_2_4576M = 0x00,
  107.         CLK_1M                 = 0x04,
  108.         CLK_2M                 = 0x0C,

  109.         FS_50HZ                = 0x00,
  110.         FS_60HZ                = 0x01,
  111.         FS_250HZ        = 0x02,
  112.         FS_500HZ        = 0x04,

  113.         /*
  114.                 四十九、電子秤應(yīng)用中提高TM7705 精度的方法
  115.                         當(dāng)使用主時鐘為 2.4576MHz 時,強烈建議將時鐘寄存器設(shè)為 84H,此時數(shù)據(jù)輸出更新率為10Hz,即每0.1S 輸出一個新數(shù)據(jù)。
  116.                         當(dāng)使用主時鐘為 1MHz 時,強烈建議將時鐘寄存器設(shè)為80H, 此時數(shù)據(jù)輸出更新率為4Hz, 即每0.25S 輸出一個新數(shù)據(jù)
  117.         */
  118.         ZERO_0                = 0x00,
  119.         ZERO_1                = 0x80
  120. };

  121. static void TM7705_SyncSPI(void);
  122. static void TM7705_Send8Bit(uint8_t _data);
  123. static uint8_t TM7705_Recive8Bit(void);
  124. static void TM7705_WriteByte(uint8_t _data);
  125. static void TM7705_Write3Byte(uint32_t _data);
  126. static uint8_t TM7705_ReadByte(void);
  127. static uint16_t TM7705_Read2Byte(void);
  128. static uint32_t TM7705_Read3Byte(void);
  129. static void TM7705_WaitDRDY(void);
  130. static void TM7705_ResetHard(void);
  131. static void TM7705_Delay(void);

  132. /*
  133. *********************************************************************************************************
  134. *        函 數(shù) 名: bsp_InitTM7705
  135. *        功能說明: 配置STM32的GPIO和SPI接口,用于連接 TM7705
  136. *        形    參: 無
  137. *        返 回 值: 無
  138. *********************************************************************************************************
  139. */
  140. void bsp_InitTM7705(void)
  141. {
  142. #ifdef SOFT_SPI                /* 軟件SPI */
  143.         /* 配置REST口線為推挽輸出,缺省輸出高電平 */

  144.         /* 配置CS口線為推挽輸出,缺省輸出高電平 */

  145.         /* 配置SCK口線為推挽輸出,缺省輸出高電平 */

  146.         /* 配置DIN口線為推挽輸出,缺省輸出高電平 */

  147.         /* 配置DOUT口線為輸入浮空模式 */

  148.         /* 配置DOUT口線為輸入上拉模式 */
  149. #endif

  150.         bsp_DelayMS(10);

  151.         TM7705_ResetHard();                /* 硬件復(fù)位 */

  152.         /*
  153.                 在接口序列丟失的情況下,如果在DIN 高電平的寫操作持續(xù)了足夠長的時間(至少 32個串行時鐘周期),
  154.                 TM7705 將會回到默認狀態(tài)。
  155.         */
  156.         bsp_DelayMS(5);

  157.         TM7705_SyncSPI();                /* 同步SPI接口時序 */

  158.         bsp_DelayMS(5);

  159.         /* 配置時鐘寄存器 */
  160.         TM7705_WriteByte(REG_CLOCK | WRITE | CH_1);                        /* 先寫通信寄存器,下一步是寫時鐘寄存器 */

  161.         TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ);        /* 刷新速率50Hz */
  162.         //TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);        /* 刷新速率500Hz */

  163.         /* 每次上電進行一次自校準(zhǔn) */
  164.         TM7705_CalibSelf(1);        /* 內(nèi)部自校準(zhǔn) CH1 */
  165.         bsp_DelayMS(5);
  166. }

  167. /*
  168. *********************************************************************************************************
  169. *        函 數(shù) 名: TM7705_Delay
  170. *        功能說明: CLK之間的延遲,時序延遲. 對于51,可以不延遲
  171. *        形    參: 無
  172. *        返 回 值: 無
  173. *********************************************************************************************************
  174. */
  175. static void TM7705_Delay(void)
  176. {
  177.         //uint16_t i;

  178.         //for (i = 0; i < 5; i++);
  179. }

  180. /*
  181. *********************************************************************************************************
  182. *        函 數(shù) 名: TM7705_ResetHard
  183. *        功能說明: 硬件復(fù)位 TM7705芯片
  184. *        形    參: 無
  185. *        返 回 值: 無
  186. *********************************************************************************************************
  187. */
  188. static void TM7705_ResetHard(void)
  189. {
  190.         RESET_1();
  191.         bsp_DelayMS(1);
  192.         RESET_0();
  193.         bsp_DelayMS(2);
  194.         RESET_1();
  195.         bsp_DelayMS(1);
  196. }

  197. /*
  198. *********************************************************************************************************
  199. *        函 數(shù) 名: TM7705_SyncSPI
  200. *        功能說明: 同步TM7705芯片SPI接口時序
  201. *        形    參: 無
  202. *        返 回 值: 無
  203. *********************************************************************************************************
  204. */
  205. static void TM7705_SyncSPI(void)
  206. {
  207.         /* AD7705串行接口失步后將其復(fù)位。復(fù)位后要延時500us再訪問 */
  208.         CS_0();
  209.         TM7705_Send8Bit(0xFF);
  210.         TM7705_Send8Bit(0xFF);
  211.         TM7705_Send8Bit(0xFF);
  212.         TM7705_Send8Bit(0xFF);
  213.         CS_1();
  214. }

  215. /*
  216. *********************************************************************************************************
  217. *        函 數(shù) 名: TM7705_Send8Bit
  218. *        功能說明: 向SPI總線發(fā)送8個bit數(shù)據(jù)。 不帶CS控制。
  219. *        形    參: _data : 數(shù)據(jù)
  220. *        返 回 值: 無
  221. *********************************************************************************************************
  222. */
  223. static void TM7705_Send8Bit(uint8_t _data)
  224. {
  225.         uint8_t i;

  226.         for(i = 0; i < 8; i++)
  227.         {
  228.                 if (_data & 0x80)
  229.                 {
  230.                         DI_1();
  231.                 }
  232.                 else
  233.                 {
  234.                         DI_0();
  235.                 }
  236.                 SCK_0();
  237.                 _data <<= 1;
  238.                 TM7705_Delay();
  239.                 SCK_1();
  240.                 TM7705_Delay();
  241.         }
  242. }

  243. /*
  244. *********************************************************************************************************
  245. *        函 數(shù) 名: TM7705_Recive8Bit
  246. *        功能說明: 從SPI總線接收8個bit數(shù)據(jù)。 不帶CS控制。
  247. *        形    參: 無
  248. *        返 回 值: 無
  249. *********************************************************************************************************
  250. */
  251. static uint8_t TM7705_Recive8Bit(void)
  252. {
  253.         uint8_t i;
  254.         uint8_t read = 0;

  255.         for (i = 0; i < 8; i++)
  256.         {
  257.                 SCK_0();
  258.                 TM7705_Delay();
  259.                 read = read<<1;
  260.                 if (DO_IS_HIGH())
  261.                 {
  262.                         read++;
  263.                 }
  264.                 SCK_1();
  265.                 TM7705_Delay();
  266.         }
  267.         return read;
  268. }

  269. /*
  270. *********************************************************************************************************
  271. *        函 數(shù) 名: TM7705_WriteByte
  272. *        功能說明: 寫入1個字節(jié)。帶CS控制
  273. *        形    參: _data :將要寫入的數(shù)據(jù)
  274. *        返 回 值: 無
  275. *********************************************************************************************************
  276. */
  277. static void TM7705_WriteByte(uint8_t _data)
  278. {
  279.         CS_0();
  280.         TM7705_Send8Bit(_data);
  281.         CS_1();
  282. }

  283. /*
  284. *********************************************************************************************************
  285. *        函 數(shù) 名: TM7705_Write3Byte
  286. *        功能說明: 寫入3個字節(jié)。帶CS控制
  287. *        形    參: _data :將要寫入的數(shù)據(jù)
  288. *        返 回 值: 無
  289. *********************************************************************************************************
  290. */
  291. static void TM7705_Write3Byte(uint32_t _data)
  292. {
  293.         CS_0();
  294.         TM7705_Send8Bit((_data >> 16) & 0xFF);
  295.         TM7705_Send8Bit((_data >> 8) & 0xFF);
  296.         TM7705_Send8Bit(_data);
  297.         CS_1();
  298. }

  299. /*
  300. *********************************************************************************************************
  301. *        函 數(shù) 名: TM7705_ReadByte
  302. *        功能說明: 從AD芯片讀取一個字(16位)
  303. *        形    參: 無
  304. *        返 回 值: 讀取的字(16位)
  305. *********************************************************************************************************
  306. */
  307. static uint8_t TM7705_ReadByte(void)
  308. {
  309.         uint8_t read;

  310.         CS_0();
  311.         read = TM7705_Recive8Bit();
  312.         CS_1();

  313.         return read;
  314. }

  315. /*
  316. *********************************************************************************************************
  317. *        函 數(shù) 名: TM7705_Read2Byte
  318. *        功能說明: 讀2字節(jié)數(shù)據(jù)
  319. *        形    參: 無
  320. *        返 回 值: 讀取的數(shù)據(jù)(16位)
  321. *********************************************************************************************************
  322. */
  323. static uint16_t TM7705_Read2Byte(void)
  324. {
  325.         uint16_t read;

  326.         CS_0();
  327.         read = TM7705_Recive8Bit();
  328.         read <<= 8;
  329.         read += TM7705_Recive8Bit();
  330.         CS_1();

  331.         return read;
  332. }

  333. /*
  334. *********************************************************************************************************
  335. *        函 數(shù) 名: TM7705_Read3Byte
  336. *        功能說明: 讀3字節(jié)數(shù)據(jù)
  337. *        形    參: 無
  338. *        返 回 值: 讀取到的數(shù)據(jù)(24bit) 高8位固定為0.
  339. *********************************************************************************************************
  340. */
  341. static uint32_t TM7705_Read3Byte(void)
  342. {
  343.         uint32_t read;

  344.         CS_0();
  345.         read = TM7705_Recive8Bit();
  346.         read <<= 8;
  347.         read += TM7705_Recive8Bit();
  348.         read <<= 8;
  349.         read += TM7705_Recive8Bit();
  350.         CS_1();
  351.         return read;
  352. }

  353. /*
  354. *********************************************************************************************************
  355. *        函 數(shù) 名: TM7705_WaitDRDY
  356. *        功能說明: 等待內(nèi)部操作完成。 自校準(zhǔn)時間較長,需要等待。
  357. *        形    參: 無
  358. *        返 回 值: 無
  359. *********************************************************************************************************
  360. */
  361. static void TM7705_WaitDRDY(void)
  362. {
  363.         uint32_t i;

  364.         for (i = 0; i < 8000; i++)
  365.         {
  366.                 if (DRDY_IS_LOW())
  367.                 {
  368.                         break;
  369.                 }
  370.         }
  371.         if (i >= 8000)
  372.         {
  373.                 printf("TM7705_WaitDRDY() 芯片應(yīng)答超時 ...\r\n");                /* 調(diào)試語句. 用語排錯 */

  374.                 printf("重新同步SPI接口時序\r\n");                /* 調(diào)試語句. 用語排錯 */

  375.                 TM7705_SyncSPI();                /* 同步SPI接口時序 */

  376.                 bsp_DelayMS(5);
  377.         }
  378. }

  379. /*
  380. *********************************************************************************************************
  381. *        函 數(shù) 名: TM7705_WriteReg
  382. *        功能說明: 寫指定的寄存器
  383. *        形    參:  _RegID : 寄存器ID
  384. *                          _RegValue : 寄存器值。 對于8位的寄存器,取32位形參的低8bit
  385. *        返 回 值: 無
  386. *********************************************************************************************************
  387. */
  388. void TM7705_WriteReg(uint8_t _RegID, uint32_t _RegValue)
  389. {
  390.         uint8_t bits;

  391.         switch (_RegID)
  392.         {
  393.                 case REG_COMM:                /* 通信寄存器 */
  394.                 case REG_SETUP:                /* 設(shè)置寄存器 8bit */
  395.                 case REG_CLOCK:                /* 時鐘寄存器 8bit */
  396.                         bits = 8;
  397.                         break;

  398.                 case REG_ZERO_CH1:        /* CH1 偏移寄存器 24bit */
  399.                 case REG_FULL_CH1:        /* CH1 滿量程寄存器 24bit */
  400.                 case REG_ZERO_CH2:        /* CH2 偏移寄存器 24bit */
  401.                 case REG_FULL_CH2:        /* CH2 滿量程寄存器 24bit*/
  402.                         bits = 24;
  403.                         break;

  404.                 case REG_DATA:                /* 數(shù)據(jù)寄存器 16bit */
  405.                 default:
  406.                         return;
  407.         }

  408.         TM7705_WriteByte(_RegID | WRITE);        /* 寫通信寄存器, 指定下一步是寫操作,并指定寫哪個寄存器 */

  409.         if (bits == 8)
  410.         {
  411.                 TM7705_WriteByte((uint8_t)_RegValue);
  412.         }
  413.         else        /* 24bit */
  414.         {
  415.                 TM7705_Write3Byte(_RegValue);
  416.         }
  417. }

  418. /*
  419. *********************************************************************************************************
  420. *        函 數(shù) 名: TM7705_ReadReg
  421. *        功能說明: 寫指定的寄存器
  422. *        形    參:  _RegID : 寄存器ID
  423. *                          _RegValue : 寄存器值。 對于8位的寄存器,取32位形參的低8bit
  424. *        返 回 值: 讀到的寄存器值。 對于8位的寄存器,取32位形參的低8bit
  425. *********************************************************************************************************
  426. */
  427. uint32_t TM7705_ReadReg(uint8_t _RegID)
  428. {
  429.         uint8_t bits;
  430.         uint32_t read;

  431.         switch (_RegID)
  432.         {
  433.                 case REG_COMM:                /* 通信寄存器 */
  434.                 case REG_SETUP:                /* 設(shè)置寄存器 8bit */
  435.                 case REG_CLOCK:                /* 時鐘寄存器 8bit */
  436.                         bits = 8;
  437.                         break;

  438.                 case REG_ZERO_CH1:        /* CH1 偏移寄存器 24bit */
  439.                 case REG_FULL_CH1:        /* CH1 滿量程寄存器 24bit */
  440.                 case REG_ZERO_CH2:        /* CH2 偏移寄存器 24bit */
  441.                 case REG_FULL_CH2:        /* CH2 滿量程寄存器 24bit*/
  442.                         bits = 24;
  443.                         break;

  444.                 case REG_DATA:                /* 數(shù)據(jù)寄存器 16bit */
  445.                 default:
  446.                         return 0xFFFFFFFF;
  447.         }

  448.         TM7705_WriteByte(_RegID | READ);        /* 寫通信寄存器, 指定下一步是寫操作,并指定寫哪個寄存器 */

  449.         if (bits == 16)
  450.         {
  451.                 read = TM7705_Read2Byte();
  452.         }
  453.         else if (bits == 8)
  454.         {
  455.                 read = TM7705_ReadByte();
  456.         }
  457.         else        /* 24bit */
  458.         {
  459.                 read = TM7705_Read3Byte();
  460.         }
  461.         return read;
  462. }

  463. /*
  464. *********************************************************************************************************
  465. *        函 數(shù) 名: TM7705_CalibSelf
  466. *        功能說明: 啟動自校準(zhǔn). 內(nèi)部自動短接AIN+ AIN-校準(zhǔn)0位,內(nèi)部短接到Vref 校準(zhǔn)滿位。此函數(shù)執(zhí)行過程較長,
  467. *                          實測約 180ms
  468. *        形    參:  _ch : ADC通道,1或2
  469. *        返 回 值: 無
  470. *********************************************************************************************************
  471. */
  472. void TM7705_CalibSelf(uint8_t _ch)
  473. {
  474.         if (_ch == 1)
  475.         {
  476.                 /* 自校準(zhǔn)CH1 */
  477.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_1);        /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
  478.                 TM7705_WriteByte(MD_CAL_SELF | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準(zhǔn) */
  479.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 --- 時間較長,約180ms */
  480.         }
  481.         else if (_ch == 2)
  482.         {
  483.                 /* 自校準(zhǔn)CH2 */
  484.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_2);        /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道2 */
  485.                 TM7705_WriteByte(MD_CAL_SELF | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);        /* 啟動自校準(zhǔn) */
  486.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成  --- 時間較長,約180ms */
  487.         }
  488. }

  489. /*
  490. *********************************************************************************************************
  491. *        函 數(shù) 名: TM7705_SytemCalibZero
  492. *        功能說明: 啟動系統(tǒng)校準(zhǔn)零位. 請將AIN+ AIN-短接后,執(zhí)行該函數(shù)。校準(zhǔn)應(yīng)該由主程序控制并保存校準(zhǔn)參數(shù)。
  493. *                         執(zhí)行完畢后?梢酝ㄟ^ TM7705_ReadReg(REG_ZERO_CH1) 和  TM7705_ReadReg(REG_ZERO_CH2) 讀取校準(zhǔn)參數(shù)。
  494. *        形    參: _ch : ADC通道,1或2
  495. *        返 回 值: 無
  496. *********************************************************************************************************
  497. */
  498. void TM7705_SytemCalibZero(uint8_t _ch)
  499. {
  500.         if (_ch == 1)
  501.         {
  502.                 /* 校準(zhǔn)CH1 */
  503.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_1);        /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
  504.                 TM7705_WriteByte(MD_CAL_ZERO | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準(zhǔn) */
  505.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  506.         }
  507.         else if (_ch == 2)
  508.         {
  509.                 /* 校準(zhǔn)CH2 */
  510.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_2);        /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
  511.                 TM7705_WriteByte(MD_CAL_ZERO | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);        /* 啟動自校準(zhǔn) */
  512.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  513.         }
  514. }

  515. /*
  516. *********************************************************************************************************
  517. *        函 數(shù) 名: TM7705_SytemCalibFull
  518. *        功能說明: 啟動系統(tǒng)校準(zhǔn)滿位. 請將AIN+ AIN-接最大輸入電壓源,執(zhí)行該函數(shù)。校準(zhǔn)應(yīng)該由主程序控制并保存校準(zhǔn)參數(shù)。
  519. *                         執(zhí)行完畢后?梢酝ㄟ^ TM7705_ReadReg(REG_FULL_CH1) 和  TM7705_ReadReg(REG_FULL_CH2) 讀取校準(zhǔn)參數(shù)。
  520. *        形    參:  _ch : ADC通道,1或2
  521. *        返 回 值: 無
  522. *********************************************************************************************************
  523. */
  524. void TM7705_SytemCalibFull(uint8_t _ch)
  525. {
  526.         if (_ch == 1)
  527.         {
  528.                 /* 校準(zhǔn)CH1 */
  529.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_1);        /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
  530.                 TM7705_WriteByte(MD_CAL_FULL | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準(zhǔn) */
  531.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  532.         }
  533.         else if (_ch == 2)
  534.         {
  535.                 /* 校準(zhǔn)CH2 */
  536.                 TM7705_WriteByte(REG_SETUP | WRITE | CH_2);        /* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
  537.                 TM7705_WriteByte(MD_CAL_FULL | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);        /* 啟動自校準(zhǔn) */
  538.                 TM7705_WaitDRDY();        /* 等待內(nèi)部操作完成 */
  539.         }
  540. }

  541. /*
  542. *********************************************************************************************************
  543. *        函 數(shù) 名: TM7705_ReadAdc1
  544. *        功能說明: 讀通道1或2的ADC數(shù)據(jù)
  545. *        形    參: 無
  546. *        返 回 值: 無
  547. *********************************************************************************************************
  548. */
  549. uint16_t TM7705_ReadAdc(uint8_t _ch)
  550. {
  551.         uint8_t i;
  552.         uint16_t read = 0;

  553.         /* 為了避免通道切換造成讀數(shù)失效,讀2次 */
  554.         for (i = 0; i < 2; i++)
  555.         {
  556.                 TM7705_WaitDRDY();                /* 等待DRDY口線為0 */

  557.                 if (_ch == 1)
  558.                 {
  559.                         TM7705_WriteByte(0x38);
  560.                 }
  561.                 else if (_ch == 2)
  562.                 {
  563.                         TM7705_WriteByte(0x39);
  564.                 }

  565.                 read = TM7705_Read2Byte();
  566.         }
  567.         return read;
  568. }


  569. void delay(uint xms)  //延時
  570. {
  571.         uint xx,yy;
  572.         for (xx=xms;xx>0;xx--)
  573.                 for(yy=110;yy>0;yy--);
  574. }
  575. void lcdwc(uchar lcd_cmd)        //液晶命令
  576. {       
  577.   lcden=0;
  578.         lcdrs=0;
  579.         lcdrw=0;
  580.         datlcd=lcd_cmd;
  581.         delay(1);
  582.         lcden=1;
  583.         delay(1);
  584.         lcden=0;
  585. }
  586. void lcdwd(uchar lcd_data)         //液晶數(shù)據(jù)
  587. {       
  588.         lcden=0;
  589.         lcdrs=1;
  590.         lcdrw=0;
  591.         datlcd=lcd_data;
  592.         delay(1);
  593.         lcden=1;
  594.         delay(1);
  595.         lcden=0;               
  596. }
  597. void  lcdxy(uchar hlcd,uchar addlcd,uchar dtlcd)         //定位寫數(shù)據(jù)
  598. {
  599.         if (hlcd==1)
  600.         {
  601.                 lcdwc(0x80+addlcd);
  602.                 lcdwd(dtlcd);
  603.         }
  604.         else
  605.         {
  606.                 lcdwc(0xc0+addlcd);
  607.                 lcdwd(dtlcd);
  608.         }
  609. }
  610. void init_1602()                  //初始化
  611. {  
  612.         delay(5);
  613.         lcdwc(0x01);       
  614. ……………………

  615. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

下載:
程序.docx (23.3 KB, 下載次數(shù): 78)

相關(guān)帖子

回復(fù)

使用道具 舉報

ID:207152 發(fā)表于 2017-6-2 17:16 | 顯示全部樓層
看看,剛好需要ao
回復(fù)

使用道具 舉報

ID:222878 發(fā)表于 2017-7-28 21:24 | 顯示全部樓層
程序運行了一下有兩個錯誤,請改正
回復(fù)

使用道具 舉報

ID:223564 發(fā)表于 2017-7-31 14:45 | 顯示全部樓層
頂頂,正好需要~
回復(fù)

使用道具 舉報

ID:511951 發(fā)表于 2019-4-14 17:13 | 顯示全部樓層
houyannian 發(fā)表于 2017-7-28 21:24
程序運行了一下有兩個錯誤,請改正

老鐵,怎么改?
回復(fù)

使用道具 舉報

ID:478885 發(fā)表于 2019-8-27 09:23 | 顯示全部樓層
好好學(xué)習(xí)一下,謝謝分享
回復(fù)

使用道具 舉報

ID:403593 發(fā)表于 2019-8-28 08:45 | 顯示全部樓層
感謝樓主分享!
回復(fù)

使用道具 舉報

ID:183132 發(fā)表于 2019-10-15 21:24 | 顯示全部樓層
差硬件底層驅(qū)動程序集合文件,將bsp.h,bsp.c,文件合并成bsp.h,載如bsp.h文件,將TM7705_CalibSelf函數(shù)移動到程序頂端,可以運行,但是還是有4個警告,不知為什么。c:/1.jpg
回復(fù)

使用道具 舉報

ID:569701 發(fā)表于 2019-12-13 15:40 | 顯示全部樓層
y712323 發(fā)表于 2019-10-15 21:24
差硬件底層驅(qū)動程序集合文件,將bsp.h,bsp.c,文件合并成bsp.h,載如bsp.h文件,將TM7705_CalibSelf函數(shù)移 ...

應(yīng)該是有4個函數(shù)未調(diào)用造成的
回復(fù)

使用道具 舉報

ID:569701 發(fā)表于 2019-12-13 15:43 | 顯示全部樓層
老鐵,我的接口一直迷失,總提示我同步SPI 有什么解決方法
回復(fù)

使用道具 舉報

ID:235131 發(fā)表于 2019-12-13 16:38 | 顯示全部樓層
不錯,學(xué)習(xí)挺好
回復(fù)

使用道具 舉報

ID:721008 發(fā)表于 2020-4-3 11:37 | 顯示全部樓層
這個程序我在測試的時候有問題,采集的電壓不對,有時候還時序迷失
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表