自己用的ADC程序。用的MAX1241,注意我是PROTUES8.0仿真的。歡迎大家討論,也希望給新手一個參考,精度0.01V
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (19.43 KB, 下載次數: 52)
下載附件
2018-3-17 00:36 上傳
單片機源程序如下:
- #include<reg51.h>
- sbit ADC_DOUT=P3^0;
- sbit ADC_CLK=P3^1;
- sbit ADC_CS=P3^2;
- extern void WriteAddress(unsigned char x,y);
- extern void LcdInitiate(void);
- extern void display(char *p);
- extern void WriteData(unsigned char y);
- unsigned char code bt[]=" Max1241 Test! ";
- unsigned char code sj[]="Now Date: V";
- unsigned char S;
- unsigned char a,b,c;
- unsigned char tab[]="0123456789";
- unsigned int ADC_Data;
- int Read_Max1241()
- {
- char i;
- ADC_CLK=0;
- ADC_CS=0;
- ADC_Data=0;
- while(!ADC_DOUT); //當CS=0后,開始轉換,DOUT輸出0,轉換結束輸出1,再要有一個時鐘后才開始傳輸數據
- //start output the data
- ADC_CLK=1;
- ADC_CLK=0;
- //傳輸數據
- for(i=0;i<12;i++)
- {
- ADC_CLK=1;
- ADC_Data<<=1;
- ADC_Data |= ADC_DOUT;
- ADC_CLK=0;
- }
- ADC_CS=1;
- ADC_CLK=0;
- return ADC_Data;
- }
- void ADC_COUNT()
- {
- S=(Read_Max1241()*0.00122070312)*100;
- a=S/100%10;
- b=S/10%10;
- c=S%10;
- WriteAddress(2,11);
- WriteData(tab[a]);
- WriteAddress(2,13);
- WriteData(tab[b]);
- WriteData(tab[c]);
- }
- void main()
- {
- LcdInitiate();
- WriteAddress(1,1);
- display(bt);
- WriteAddress(2,1);
- display(sj);
- WriteAddress(2,12);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (57.27 KB, 下載次數: 42)
下載附件
2018-3-17 00:37 上傳
所有資料51hei提供下載:
max1241.zip
(77 KB, 下載次數: 92)
2018-3-16 20:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|