這里面有我搜集的一些資料,特地分享給大家。
0.png (50.27 KB, 下載次數: 35)
下載附件
2018-7-14 02:40 上傳
單片機源程序如下:
- /*----------------------------------------------------------------------------
- 名稱:IIC協議 PCF8591 AD/DA轉換 測試熱敏電阻
- 內容:使用1路ad測試熱敏電阻阻值,并查表得到溫度值,
- 溫度精度和多種參數有關,在這里只是簡單應用演示,存在誤差是正常的。
- ------------------------------------------------------------------------------*/
- #include <reg52.h>
- #include "i2c.h"
- #include "delay.h"
- #include "display.h"
- code unsigned int vt_table[]= // 電壓溫度對照表
- {
- 4132,4098,4063,4026,3988,3949,3908,3866,3823,3779,
- 3733,3686,3639,3590,3540,3489,3437,3385,3331,3277,
- 3222,3166,3110,3054,2997,2940,2882,2824,2767,2709,
- 2651,2593,2536,2478,2421,2365,2309,2253,2198,2143,
- 2089,2036,1984,1932,1881,1831,1782,1734,1686,1640,
- 1594,1550,1506,1464,1422,1381,1341,1303,1265,1228,
- 1192
-
- };
- #define AddWr 0x90 //寫數據地址 PCF8591
- #define AddRd 0x91 //讀數據地址 PCF8591
- extern bit ack;
- unsigned char ReadADC(unsigned char Chl);
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- unsigned int num=0;
- unsigned char i,temp;
- Init_Timer0();
- while (1) //主循環
- {
-
- num=ReadADC(0);
- //變成mv 最大值255 。255x19=4845mv,如果增加精度可以使用浮點計算
- num=num*19;
- for(i=0;i<61;i++)
- {
- //判斷采集電壓值大于或者等于表格電壓時,停下來并記錄當前i值
- if(num >= vt_table[i])
- {
- temp=i;
- //如果是前10個數據表明是負溫度,需要把溫度符號顯示出來,并且前10位溫度遞增
- if(i<10)
- {
- temp=10-temp; //如果i=0,表示-10
- TempData[0]=0x40;//'-'號
- }
- else
- {
- temp-=10; //如果大于等于10表明正溫度,把前10個表格負溫度去掉
- TempData[0]=0x00;//符號位顯示空
- }
- break; //檢測到即跳出循環,否則繼續循環
- }
-
- }
- TempData[3]=dofly_DuanMa[temp/10];//顯示2位數溫度值
- TempData[4]=dofly_DuanMa[temp%10];
- DelayMs(200); //延時防止采集頻率過快
- }
- }
- /*------------------------------------------------
- 讀AD轉值程序
- 輸入參數 Chl 表示需要轉換的通道,范圍從0-3
- 返回值范圍0-255
- ------------------------------------------------*/
- unsigned char ReadADC(unsigned char Chl)
- {
- unsigned char Val;
- Start_I2c(); //啟動總線
- SendByte(AddWr); //發送器件地址
- if(ack==0)return(0);
- SendByte(0x40|Chl); //發送器件子地址
- if(ack==0)return(0);
- Start_I2c();
- SendByte(AddWr+1);
- if(ack==0)return(0);
- Val=RcvByte();
- NoAck_I2c(); //發送非應位
- Stop_I2c(); //結束總線
- return(Val);
- }
復制代碼
所有資料51hei提供下載:
部分參考例程.rar
(1.06 MB, 下載次數: 58)
2018-7-13 22:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|