标题: STC15F2K60S2单片机AD转换程序 [打印本页]

作者: alexlong    时间: 2017-11-14 12:38
标题: STC15F2K60S2单片机AD转换程序
STC15F2K60S2的ad转换。

单片机源程序如下:
  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转换函数
  17. {
  18.         uint val;//存放ad转换结果
  19.         uchar low;//存放ad转换结果低两位
  20.         float fval;//小数
  21.         P1ASF=0X08;//p1.3为ad转换kou
  22.         ADC_CONTR=0xeb;//打开ad转换电源速度最快输出端p1.3;
  23.         delay();
  24.         while(ADC_CONTR&0X10==0);
  25.         val=ADC_RES;//取转换结果高八位放入
  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. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
AD转换.zip (22.56 KB, 下载次数: 418)



作者: Conrad970519    时间: 2017-12-14 20:20
下下来看看
作者: wuxishun    时间: 2017-12-16 18:24
谢谢分享
作者: yyjzd0414    时间: 2018-2-6 22:28
学习中谢谢分享
作者: 青桑叶    时间: 2018-2-7 22:11
谢谢分享。写的很清楚,读起来很舒服
作者: 老胖熊    时间: 2018-2-20 20:11
头文件在哪里下载的?
作者: wuxishun    时间: 2018-2-24 23:16
学习中,谢谢分享
作者: 大米饭    时间: 2018-3-25 19:02
只是个AD转换函数  不是AD读取函数,下载的时候没看清
作者: baishifanzon    时间: 2018-5-2 13:13
正在学习,感谢楼主无私的分享
作者: 腾飞的龙    时间: 2018-5-3 18:17
送人玫瑰手留余香。感谢分享
作者: 腾飞的龙    时间: 2018-5-3 18:19
ADC_CONTR=0xeb;//打开ad转换电源速度最快输出端p1.3;  楼主后面的0xeb是怎么出来的
作者: lzptt    时间: 2018-5-4 00:15
腾飞的龙 发表于 2018-5-3 18:19
ADC_CONTR=0xeb;//打开ad转换电源速度最快输出端p1.3;  楼主后面的0xeb是怎么出来的

0xeb是16进制 二进制需根据8421转换法转成16进制
8421    转换码
1110    E  =8+4+2+0=12=E(16进制)
1011    B  =8+0+2+1=11=B(16进制)
所以ADC_CONTR=1110 1011=0xeb
作者: xiaoye000    时间: 2018-5-14 16:20
谢谢分享,学习中
作者: suph007    时间: 2018-6-2 15:24
可以看看思路
作者: 小百科    时间: 2018-7-10 22:39
谢谢分享
作者: 小百科    时间: 2018-7-10 22:41
大米饭 发表于 2018-3-25 19:02
只是个AD转换函数  不是AD读取函数,下载的时候没看清

AD读取函数是什么意思啊??
作者: 小百科    时间: 2018-7-12 10:30
P2=duan[shi]&0x7f这是什么意思啊
作者: cyz0909    时间: 2018-10-21 17:14
谢谢楼主
作者: 温泉墨迹    时间: 2019-4-14 13:24
厉害,谢谢谢谢谢谢
作者: 小七七七    时间: 2019-4-14 17:06
感谢分享
作者: a969241066    时间: 2019-6-7 20:31
感谢分享
作者: a969241066    时间: 2019-6-7 20:32
感谢分享
作者: 不就一个你    时间: 2019-7-18 10:13
大米饭 发表于 2018-3-25 19:02
只是个AD转换函数  不是AD读取函数,下载的时候没看清

val=ADC_RES;
val<<=2;
low=ADC_RESL;
low&=0x03;
val+=low;
这是什么?
作者: 芝华塔尼欧    时间: 2019-7-18 11:19
谢谢分享
作者: 周涛1331    时间: 2019-7-21 09:00
腾飞的龙 发表于 2018-5-3 18:19
ADC_CONTR=0xeb;//打开ad转换电源速度最快输出端p1.3;  楼主后面的0xeb是怎么出来的

看看15手册,PLASF是P1口的模拟功能控制寄存器,PLASF=0x08;是将P1.3口做模拟ad使用,后面的ADC_CONTR=0xeb;ADC_CONTR是控制寄存器,后四位的16进制数是b,是1011,后三位011指的是将P1.3作为ad输入来用,
作者: 周涛1331    时间: 2019-7-21 09:14
不就一个你 发表于 2019-7-18 10:13
val=ADC_RES;
val

看15手册,ADC_RES和ADC_RESL是AD转换过程中的存储ad转换结果的,这里ADC_RES指的是高八位,ADC_RESL指的是低2位,val向左移了2位,相当与变为了10位,val加上low表示高八位和低二位相加,low&=0x03;表示值不能超过3;































作者: 周涛1331    时间: 2019-7-21 09:19
小百科 发表于 2018-7-12 10:30
P2=duan[shi]&0x7f这是什么意思啊

这个地方有些多余,&这是与的意思,0x7f指的是数码管可以显示8,无论你用啥值与8&‘都等于原来值
作者: 周涛1331    时间: 2019-7-21 09:50
小百科 发表于 2018-7-12 10:30
P2=duan[shi]&0x7f这是什么意思啊

你这个意思是不管是啥值,都要带个小数点,之前理解错了
作者: 天天向上啦啦啦    时间: 2019-7-21 10:18
想下载看看哈
作者: 少有过客    时间: 2019-11-7 21:59
挺简单的程序,移植也很方便
作者: stiu    时间: 2019-11-8 17:08
谢谢楼主的分享
作者: 未来研究人员    时间: 2019-12-7 11:50
送人玫瑰手留余香。感谢分享
作者: vvv80    时间: 2019-12-7 13:32
学习中,谢谢分享
作者: 许你一世柔情    时间: 2020-3-25 14:14
我想问一下 就不能给一个16位然后高位移开 | 低位吗
作者: 18877865862    时间: 2020-4-28 17:52
谢谢大佬分享
作者: ZXDZXD38378    时间: 2020-4-29 14:10
谢谢楼主的分享,好东西
作者: fendou-奋斗    时间: 2020-7-26 22:04

打开ad转换电源速度最快输出端p1.3;  楼主后面的0xeb是怎么出来的
作者: qjyvi2    时间: 2020-8-9 15:56
low&=0x03;
这步是作什么用。感觉是不是多余。是不是有什么深意。忘解惑。谢谢!
作者: qjyvi2    时间: 2020-8-14 20:53
没有电路图吗。
作者: xiaoyuxinke    时间: 2022-5-19 09:16
本帖最后由 xiaoyuxinke 于 2022-5-19 09:25 编辑
周涛1331 发表于 2019-7-21 09:00
看看15手册,PLASF是P1口的模拟功能控制寄存器,PLASF=0x08;是将P1.3口做模拟ad使用,后面的ADC_CONTR=0x ...

这里是错的,0xeb   E=1110,B=1100  加起来就是1110,1011  而且实话说楼主这个程序你自己用过么,前面的E是指1110      这四个分开
1.打开ADC电源
1.速度1
1.速度0
0.ADC标志位

后面的B是指1011     这四个分开
1.开启ADC转换
0.通道选择第1位
1.通道选择第2位
1.通道选择第3位

楼主此程序无法正常工作,因为你自己都没看明白STC15手册.

作者: xiaoyuxinke    时间: 2022-5-19 09:26
qjyvi2 发表于 2020-8-14 20:53
没有电路图吗。

这么简单的程序,都说明了P1.3做ADC输入,还要什么电路图





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1