標(biāo)題: STC15F2K60S2單片機(jī)AD轉(zhuǎn)換程序 [打印本頁(yè)]

作者: alexlong    時(shí)間: 2017-11-14 12:38
標(biāo)題: STC15F2K60S2單片機(jī)AD轉(zhuǎn)換程序
STC15F2K60S2的ad轉(zhuǎn)換。

單片機(jī)源程序如下:
  1. #include<STC15F2K60S2.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit wei1=P3^4;
  5. sbit wei2=P3^5;
  6. sbit wei3=P3^6;
  7. sbit wei4=P3^7;

  8. uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  9. uint num=0;

  10. void delay()
  11. {
  12.         uchar i,j;
  13.         for(i=0;i<20;i++)
  14.                 for(j=0;j<250;j++);
  15. }

  16. void adval()//ad轉(zhuǎn)換函數(shù)
  17. {
  18.         uint val;//存放ad轉(zhuǎn)換結(jié)果
  19.         uchar low;//存放ad轉(zhuǎn)換結(jié)果低兩位
  20.         float fval;//小數(shù)
  21.         P1ASF=0X08;//p1.3為ad轉(zhuǎn)換kou
  22.         ADC_CONTR=0xeb;//打開(kāi)ad轉(zhuǎn)換電源速度最快輸出端p1.3;
  23.         delay();
  24.         while(ADC_CONTR&0X10==0);
  25.         val=ADC_RES;//取轉(zhuǎn)換結(jié)果高八位放入
  26.         val<<=2;//空出第八位
  27.         low=ADC_RESL;
  28.         low&=0x03;
  29.         val+=low;
  30.         fval=val;
  31.         fval*=5;
  32.         fval/=1024;
  33.         fval*=10;
  34.         num=fval;
  35.         ADC_CONTR=0xeb;

  36. }

  37. void display()
  38. {
  39.         uchar bai,shi,ge;
  40.         uint temp=num;
  41.         bai=temp/100;
  42.         temp=temp%100;
  43.         shi=temp/10;
  44.         ge=temp%10;
  45.         P2=duan[bai];wei2=0;delay();wei2=1;
  46.         P2=duan[shi]&0x7f;wei3=0;delay();wei3=1;
  47.         P2=duan[ge];wei4=0;delay();wei4=1;
  48. ……………………

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

所有資料51hei提供下載:
AD轉(zhuǎn)換.zip (22.56 KB, 下載次數(shù): 418)



作者: Conrad970519    時(shí)間: 2017-12-14 20:20
下下來(lái)看看
作者: wuxishun    時(shí)間: 2017-12-16 18:24
謝謝分享
作者: yyjzd0414    時(shí)間: 2018-2-6 22:28
學(xué)習(xí)中謝謝分享
作者: 青桑葉    時(shí)間: 2018-2-7 22:11
謝謝分享。寫(xiě)的很清楚,讀起來(lái)很舒服
作者: 老胖熊    時(shí)間: 2018-2-20 20:11
頭文件在哪里下載的?
作者: wuxishun    時(shí)間: 2018-2-24 23:16
學(xué)習(xí)中,謝謝分享
作者: 大米飯    時(shí)間: 2018-3-25 19:02
只是個(gè)AD轉(zhuǎn)換函數(shù)  不是AD讀取函數(shù),下載的時(shí)候沒(méi)看清
作者: baishifanzon    時(shí)間: 2018-5-2 13:13
正在學(xué)習(xí),感謝樓主無(wú)私的分享
作者: 騰飛的龍    時(shí)間: 2018-5-3 18:17
送人玫瑰手留余香。感謝分享
作者: 騰飛的龍    時(shí)間: 2018-5-3 18:19
ADC_CONTR=0xeb;//打開(kāi)ad轉(zhuǎn)換電源速度最快輸出端p1.3;  樓主后面的0xeb是怎么出來(lái)的
作者: lzptt    時(shí)間: 2018-5-4 00:15
騰飛的龍 發(fā)表于 2018-5-3 18:19
ADC_CONTR=0xeb;//打開(kāi)ad轉(zhuǎn)換電源速度最快輸出端p1.3;  樓主后面的0xeb是怎么出來(lái)的

0xeb是16進(jìn)制 二進(jìn)制需根據(jù)8421轉(zhuǎn)換法轉(zhuǎn)成16進(jìn)制
8421    轉(zhuǎn)換碼
1110    E  =8+4+2+0=12=E(16進(jìn)制)
1011    B  =8+0+2+1=11=B(16進(jìn)制)
所以ADC_CONTR=1110 1011=0xeb
作者: xiaoye000    時(shí)間: 2018-5-14 16:20
謝謝分享,學(xué)習(xí)中
作者: suph007    時(shí)間: 2018-6-2 15:24
可以看看思路
作者: 小百科    時(shí)間: 2018-7-10 22:39
謝謝分享
作者: 小百科    時(shí)間: 2018-7-10 22:41
大米飯 發(fā)表于 2018-3-25 19:02
只是個(gè)AD轉(zhuǎn)換函數(shù)  不是AD讀取函數(shù),下載的時(shí)候沒(méi)看清

AD讀取函數(shù)是什么意思。?
作者: 小百科    時(shí)間: 2018-7-12 10:30
P2=duan[shi]&0x7f這是什么意思啊
作者: cyz0909    時(shí)間: 2018-10-21 17:14
謝謝樓主
作者: 溫泉墨跡    時(shí)間: 2019-4-14 13:24
厲害,謝謝謝謝謝謝
作者: 小七七七    時(shí)間: 2019-4-14 17:06
感謝分享
作者: a969241066    時(shí)間: 2019-6-7 20:31
感謝分享
作者: a969241066    時(shí)間: 2019-6-7 20:32
感謝分享
作者: 不就一個(gè)你    時(shí)間: 2019-7-18 10:13
大米飯 發(fā)表于 2018-3-25 19:02
只是個(gè)AD轉(zhuǎn)換函數(shù)  不是AD讀取函數(shù),下載的時(shí)候沒(méi)看清

val=ADC_RES;
val<<=2;
low=ADC_RESL;
low&=0x03;
val+=low;
這是什么?
作者: 芝華塔尼歐    時(shí)間: 2019-7-18 11:19
謝謝分享
作者: 周濤1331    時(shí)間: 2019-7-21 09:00
騰飛的龍 發(fā)表于 2018-5-3 18:19
ADC_CONTR=0xeb;//打開(kāi)ad轉(zhuǎn)換電源速度最快輸出端p1.3;  樓主后面的0xeb是怎么出來(lái)的

看看15手冊(cè),PLASF是P1口的模擬功能控制寄存器,PLASF=0x08;是將P1.3口做模擬ad使用,后面的ADC_CONTR=0xeb;ADC_CONTR是控制寄存器,后四位的16進(jìn)制數(shù)是b,是1011,后三位011指的是將P1.3作為ad輸入來(lái)用,
作者: 周濤1331    時(shí)間: 2019-7-21 09:14
不就一個(gè)你 發(fā)表于 2019-7-18 10:13
val=ADC_RES;
val

看15手冊(cè),ADC_RES和ADC_RESL是AD轉(zhuǎn)換過(guò)程中的存儲(chǔ)ad轉(zhuǎn)換結(jié)果的,這里ADC_RES指的是高八位,ADC_RESL指的是低2位,val向左移了2位,相當(dāng)與變?yōu)榱?0位,val加上low表示高八位和低二位相加,low&=0x03;表示值不能超過(guò)3;































作者: 周濤1331    時(shí)間: 2019-7-21 09:19
小百科 發(fā)表于 2018-7-12 10:30
P2=duan[shi]&0x7f這是什么意思啊

這個(gè)地方有些多余,&這是與的意思,0x7f指的是數(shù)碼管可以顯示8,無(wú)論你用啥值與8&‘都等于原來(lái)值
作者: 周濤1331    時(shí)間: 2019-7-21 09:50
小百科 發(fā)表于 2018-7-12 10:30
P2=duan[shi]&0x7f這是什么意思啊

你這個(gè)意思是不管是啥值,都要帶個(gè)小數(shù)點(diǎn),之前理解錯(cuò)了
作者: 天天向上啦啦啦    時(shí)間: 2019-7-21 10:18
想下載看看哈
作者: 少有過(guò)客    時(shí)間: 2019-11-7 21:59
挺簡(jiǎn)單的程序,移植也很方便
作者: stiu    時(shí)間: 2019-11-8 17:08
謝謝樓主的分享
作者: 未來(lái)研究人員    時(shí)間: 2019-12-7 11:50
送人玫瑰手留余香。感謝分享
作者: vvv80    時(shí)間: 2019-12-7 13:32
學(xué)習(xí)中,謝謝分享
作者: 許你一世柔情    時(shí)間: 2020-3-25 14:14
我想問(wèn)一下 就不能給一個(gè)16位然后高位移開(kāi) | 低位嗎
作者: 18877865862    時(shí)間: 2020-4-28 17:52
謝謝大佬分享
作者: ZXDZXD38378    時(shí)間: 2020-4-29 14:10
謝謝樓主的分享,好東西
作者: fendou-奮斗    時(shí)間: 2020-7-26 22:04

打開(kāi)ad轉(zhuǎn)換電源速度最快輸出端p1.3;  樓主后面的0xeb是怎么出來(lái)的
作者: qjyvi2    時(shí)間: 2020-8-9 15:56
low&=0x03;
這步是作什么用。感覺(jué)是不是多余。是不是有什么深意。忘解惑。謝謝!
作者: qjyvi2    時(shí)間: 2020-8-14 20:53
沒(méi)有電路圖嗎。
作者: xiaoyuxinke    時(shí)間: 2022-5-19 09:16
本帖最后由 xiaoyuxinke 于 2022-5-19 09:25 編輯
周濤1331 發(fā)表于 2019-7-21 09:00
看看15手冊(cè),PLASF是P1口的模擬功能控制寄存器,PLASF=0x08;是將P1.3口做模擬ad使用,后面的ADC_CONTR=0x ...

這里是錯(cuò)的,0xeb   E=1110,B=1100  加起來(lái)就是1110,1011  而且實(shí)話說(shuō)樓主這個(gè)程序你自己用過(guò)么,前面的E是指1110      這四個(gè)分開(kāi)
1.打開(kāi)ADC電源
1.速度1
1.速度0
0.ADC標(biāo)志位

后面的B是指1011     這四個(gè)分開(kāi)
1.開(kāi)啟ADC轉(zhuǎn)換
0.通道選擇第1位
1.通道選擇第2位
1.通道選擇第3位

樓主此程序無(wú)法正常工作,因?yàn)槟阕约憾紱](méi)看明白STC15手冊(cè).

作者: xiaoyuxinke    時(shí)間: 2022-5-19 09:26
qjyvi2 發(fā)表于 2020-8-14 20:53
沒(méi)有電路圖嗎。

這么簡(jiǎn)單的程序,都說(shuō)明了P1.3做ADC輸入,還要什么電路圖





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1