找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14205|回复: 40
打印 上一主题 下一主题
收起左侧

STC15F2K60S2单片机AD转换程序

  [复制链接]
跳转到指定楼层
楼主
ID:249268 发表于 2017-11-14 12:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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, 下载次数: 416)


评分

参与人数 1黑币 +5 收起 理由
KolalaSA + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶3 踩
回复

使用道具 举报

来自 2#
ID:79544 发表于 2018-5-3 18:19 | 只看该作者
ADC_CONTR=0xeb;//打开ad转换电源速度最快输出端p1.3;  楼主后面的0xeb是怎么出来的
回复

使用道具 举报

来自 3#
ID:206194 发表于 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

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:261727 发表于 2017-12-14 20:20 | 只看该作者
下下来看看
回复

使用道具 举报

5#
ID:243748 发表于 2017-12-16 18:24 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
ID:98985 发表于 2018-2-6 22:28 | 只看该作者
学习中谢谢分享
回复

使用道具 举报

7#
ID:280512 发表于 2018-2-7 22:11 | 只看该作者
谢谢分享。写的很清楚,读起来很舒服
回复

使用道具 举报

8#
ID:284500 发表于 2018-2-20 20:11 | 只看该作者
头文件在哪里下载的?
回复

使用道具 举报

9#
ID:243748 发表于 2018-2-24 23:16 来自手机 | 只看该作者
学习中,谢谢分享
回复

使用道具 举报

10#
ID:164172 发表于 2018-3-25 19:02 | 只看该作者
只是个AD转换函数  不是AD读取函数,下载的时候没看清
回复

使用道具 举报

11#
ID:161115 发表于 2018-5-2 13:13 | 只看该作者
正在学习,感谢楼主无私的分享
回复

使用道具 举报

12#
ID:79544 发表于 2018-5-3 18:17 | 只看该作者
送人玫瑰手留余香。感谢分享
回复

使用道具 举报

13#
ID:329679 发表于 2018-5-14 16:20 | 只看该作者
谢谢分享,学习中
回复

使用道具 举报

14#
ID:308785 发表于 2018-6-2 15:24 | 只看该作者
可以看看思路
回复

使用道具 举报

15#
ID:369082 发表于 2018-7-10 22:39 | 只看该作者
谢谢分享
回复

使用道具 举报

16#
ID:369082 发表于 2018-7-10 22:41 | 只看该作者
大米饭 发表于 2018-3-25 19:02
只是个AD转换函数  不是AD读取函数,下载的时候没看清

AD读取函数是什么意思啊??
回复

使用道具 举报

17#
ID:369082 发表于 2018-7-12 10:30 | 只看该作者
P2=duan[shi]&0x7f这是什么意思啊
回复

使用道具 举报

18#
ID:413177 发表于 2018-10-21 17:14 | 只看该作者
谢谢楼主
回复

使用道具 举报

19#
ID:480142 发表于 2019-4-14 13:24 来自手机 | 只看该作者
厉害,谢谢谢谢谢谢
回复

使用道具 举报

20#
ID:511752 发表于 2019-4-14 17:06 | 只看该作者
感谢分享
回复

使用道具 举报

21#
ID:557356 发表于 2019-6-7 20:31 | 只看该作者
感谢分享
回复

使用道具 举报

22#
ID:557356 发表于 2019-6-7 20:32 | 只看该作者
感谢分享
回复

使用道具 举报

23#
ID:583132 发表于 2019-7-18 10:13 | 只看该作者
大米饭 发表于 2018-3-25 19:02
只是个AD转换函数  不是AD读取函数,下载的时候没看清

val=ADC_RES;
val<<=2;
low=ADC_RESL;
low&=0x03;
val+=low;
这是什么?
回复

使用道具 举报

24#
ID:586238 发表于 2019-7-18 11:19 | 只看该作者
谢谢分享
回复

使用道具 举报

25#
ID:480680 发表于 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输入来用,
回复

使用道具 举报

26#
ID:480680 发表于 2019-7-21 09:14 | 只看该作者

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






























回复

使用道具 举报

27#
ID:480680 发表于 2019-7-21 09:19 | 只看该作者
小百科 发表于 2018-7-12 10:30
P2=duan[shi]&0x7f这是什么意思啊

这个地方有些多余,&这是与的意思,0x7f指的是数码管可以显示8,无论你用啥值与8&‘都等于原来值
回复

使用道具 举报

28#
ID:480680 发表于 2019-7-21 09:50 | 只看该作者
小百科 发表于 2018-7-12 10:30
P2=duan[shi]&0x7f这是什么意思啊

你这个意思是不管是啥值,都要带个小数点,之前理解错了
回复

使用道具 举报

29#
ID:587609 发表于 2019-7-21 10:18 | 只看该作者
想下载看看哈
回复

使用道具 举报

30#
ID:473219 发表于 2019-11-7 21:59 | 只看该作者
挺简单的程序,移植也很方便
回复

使用道具 举报

31#
ID:638203 发表于 2019-11-8 17:08 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

32#
ID:646125 发表于 2019-12-7 11:50 | 只看该作者
送人玫瑰手留余香。感谢分享
回复

使用道具 举报

33#
ID:643071 发表于 2019-12-7 13:32 来自手机 | 只看该作者
学习中,谢谢分享
回复

使用道具 举报

34#
ID:445996 发表于 2020-3-25 14:14 | 只看该作者
我想问一下 就不能给一个16位然后高位移开 | 低位吗
回复

使用道具 举报

35#
ID:732181 发表于 2020-4-28 17:52 | 只看该作者
谢谢大佬分享
回复

使用道具 举报

36#
ID:137747 发表于 2020-4-29 14:10 | 只看该作者
谢谢楼主的分享,好东西
回复

使用道具 举报

37#
ID:560110 发表于 2020-7-26 22:04 | 只看该作者

打开ad转换电源速度最快输出端p1.3;  楼主后面的0xeb是怎么出来的
回复

使用道具 举报

38#
ID:619500 发表于 2020-8-9 15:56 | 只看该作者
low&=0x03;
这步是作什么用。感觉是不是多余。是不是有什么深意。忘解惑。谢谢!
回复

使用道具 举报

39#
ID:619500 发表于 2020-8-14 20:53 | 只看该作者
没有电路图吗。
回复

使用道具 举报

40#
ID:61140 发表于 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手册.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表