找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ADC0809程序和原理图中文资料 51单片机例程实测可用

  [复制链接]
跳转到指定楼层
楼主
adc0809程序和资料 51单片机例程 实测可用

adc0809中文资料:


本次单片机实验的adc0809原理图


adc0809模块pcb:


如果用例程测试时需要注意以下:
一、先调试单片机控制系统,也就是先不接模块,1602液晶会显示:
Xingxiangrong
AD=255  VIN=4.92v
能这样显示后证明单片机控制系统没有问题,然后再接入AD模块
二、插针


J7短路帽套上,使模块上面的可调电位器可调端和IN3接通

J3 J4用短路帽把中间和VCC插上,使AB1
J5用短路帽把中间和GND插上,使C0,选择通道IN3;



源程序:
  1. //功能:ADC0809模块测试,读取IN3口的模拟电
  2. //编译环境: KEIL UVISION2
  3. //单片机晶振:12M  单片机型号AT89S52
  4. //单片机晶振: 无特殊要求
  5. //作者:兴向荣电子元件店
  6. //日期:2013.06.20
  7. //功能:

  8. #include <reg52.h>
  9. #include <intrins.h>

  10. #define uchar unsigned char
  11. #define uint  unsigned int


  12. // adc0809模块接线
  13. #define uchar unsigned char
  14. sbit STR=P1^0; //单片机P1.0接模块STR引脚, 启动转换信号
  15. sbit EOC=P1^1; //单片机P1.1接模块EOC, 转换结束信号,高电平有效
  16. sbit OE=P1^2; //单片机P1.2接模块OE,输出允许信号,高电平有效
  17. sbit CLK=P1^3; //单片机P1.3接CLK ,ADC0809时钟,输入50-800KHZ的频率
  18.                //一般选用500K
  19. #define adc0809_data  P3// ADC0809模块的D0-D7分别接P3.0-P3.7
  20. /*地址选择 A 接H  
  21.            B 接H
  22.            C 接L
  23. 选择通到IN3,当然也可以通过软件设置地址
  24.      REF+ 接VCC
  25.      REF- 接GND
  26. 这样 AD=256*(VIN-(VREF-))/(VREF+)-(VREF-)
  27.      (VREF+)=5V;
  28.      (VREF-)=0V;
  29.      AD=256*VIN/5
  30. 所以IN3口的电压VIN=AD*5/256;
  31. */
  32. uchar AD_DATA[1]; //保存IN0通道转换后的数据
  33. uint  addata2;
  34. //==============LCD1602接口连接方法=====================
  35. /*-----------------------------------------------------
  36.        |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3    |
  37.        |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4    |
  38.        |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2    |
  39.        |DB3-----P0.3 | DB7-----P0.7 |
  40.     ---------------------------------------------------*/
  41. //================================================*/              
  42. #define LCM_Data     P0    //LCD1602数据接口
  43. #define Busy         0x80   //用于检测LCM状态字中的Busy标识
  44. sbit    LCM_RW     = P2^3;  //读写控制输入端,LCD1602的第五脚
  45. sbit    LCM_RS     = P2^4;  //寄存器选择输入端,LCD1602的第四脚
  46. sbit    LCM_E      = P2^2;  //使能信号输入端,LCD1602的第6脚





  47. //**************函数声明***************************************
  48. void    WriteDataLCM                (uchar WDLCM);//LCD模块写数据
  49. void    WriteCommandLCM        (uchar WCLCM,BuysC); //LCD模块写指令
  50. uchar   ReadStatusLCM(void);//读LCD模块的忙标
  51. void    DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符
  52. void    LCMInit(void);//LCD初始
  53. void    delayms(uint ms);//1MS基准延时程序
  54. void    delay(uchar i); //延时函数2
  55. void    DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData);
  56. void   judge_xianshi(void);//显示处理程序

  57. void init();//系统初始化设置
  58. void AD();//读取AD数据

  59. uchar flag1;
  60. //***********************主程序******************************
  61. main()   
  62. {   
  63.    init();//系统初始化设置
  64.    LCMInit();
  65.    while(1)
  66.    {
  67.        AD();
  68.        judge_xianshi();
  69.        delayms(100);
  70.       
  71.    }

  72. }
  73. /*********
  74. 系统初始化
  75. ***********/
  76. void init()
  77. {  
  78.   EA=1; //开总中断
  79.   TMOD=0x02; //设定定时器 T0工作方式
  80.   TH0=216; //利用T0中断产生CLK信号
  81.   TL0=216;  
  82.   TR0=1; //启动定时器T0
  83.   ET0=1;
  84.   STR=0;
  85.   OE=0;

  86. }  
  87. void   judge_xianshi()
  88. {
  89.   addata2=AD_DATA[0]*100;//把数据扩大100,为下面求取小数位后2位做准备
  90.   DisplayListChar(0,1,0, "xingxiangrong");//在液晶的第一行显示字符"XINGXIANGR"
  91.   DisplayListChar(1,0,0, "AD="); //在液晶的第二行第0位开始显示"AD="
  92.   DisplayOneChar( 1, 3, AD_DATA[0]/100+0x30); //显示AD数据的百位
  93.   DisplayOneChar( 1, 4, AD_DATA[0]/10%10+0x30);//显示AD数据的十位
  94.   DisplayOneChar( 1, 5, AD_DATA[0]%10+0x30);//显示AD数据的各位
  95.   DisplayListChar(1,7,0, "Vin="); //在液晶的第二行第8位开始显示"Vin="
  96. //根据VIN=AD*5/256,求取IN3通到输入的电压
  97.   DisplayOneChar( 1, 11, AD_DATA[0]/51+0x30);//显示输入电压的整数位
  98.   DisplayListChar(1,12,0, ".");//显示小数点
  99.   DisplayOneChar( 1, 13, addata2/51/10%10+0x30);//显示输入电压小数后1位
  100.   DisplayOneChar( 1, 14, addata2/51%10+0x30);//显示输入电压小树后2位
  101.   DisplayListChar(1,15,0, "V");
  102. }
  103. /***********AD
  104. 转换函数
  105. **********/
  106. void AD()
  107. {
  108.    STR=0;
  109.    //ADDR这样如果不是通道0,可以在这边加一条其他地址的程序
  110.    delay(10);  
  111.    STR=1; //启动AD转换
  112.    delay(10);
  113.    STR=0;  
  114.    while(0==EOC);//等待转换结束
  115.    OE=1;  
  116.    AD_DATA[0]=adc0809_data; //读取AD数据,数据范围为0-255
  117.    OE=0;  


  118. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码



完整的中文资料和程序等下载:
兴向荣电子ADC0809模块配套资料.rar (495.51 KB, 下载次数: 483)


评分

参与人数 2黑币 +10 收起 理由
derze + 5 很给力!
yokuri + 5 很给力!

查看全部评分

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

使用道具 举报

沙发
ID:104123 发表于 2017-8-7 17:05 | 只看该作者
如何取得黑贝呀?
回复

使用道具 举报

板凳
ID:161953 发表于 2017-10-16 01:08 | 只看该作者
谢谢分享
回复

使用道具 举报

地板
ID:105193 发表于 2018-3-5 22:27 来自手机 | 只看该作者
我想学习学习没黑币
回复

使用道具 举报

5#
ID:118991 发表于 2018-3-5 23:53 | 只看该作者
不错不错
回复

使用道具 举报

6#
ID:304502 发表于 2018-4-9 15:44 | 只看该作者
谢谢楼主分享!!!!
回复

使用道具 举报

7#
ID:304502 发表于 2018-4-9 15:44 | 只看该作者
希望分享更多信息,共同进步
回复

使用道具 举报

8#
ID:256620 发表于 2018-4-10 20:26 | 只看该作者
jxyczg 发表于 2017-8-7 17:05
如何取得黑贝呀?

氪金啊   0.0000.00
回复

使用道具 举报

9#
ID:256620 发表于 2018-4-13 10:32 | 只看该作者
可以可以   有用
回复

使用道具 举报

10#
ID:294836 发表于 2018-4-18 16:07 | 只看该作者
感谢分享                 
回复

使用道具 举报

11#
ID:30455 发表于 2018-5-27 07:49 | 只看该作者
楼主这段程序对我很有用处,十分的感谢!!!!
回复

使用道具 举报

12#
ID:30455 发表于 2018-5-27 07:50 | 只看该作者
可以用,可以用,谢谢
回复

使用道具 举报

13#
ID:382918 发表于 2018-8-4 17:33 | 只看该作者
很给力!
回复

使用道具 举报

14#
ID:20672 发表于 2018-8-13 13:13 | 只看该作者
谢谢分享~~~
回复

使用道具 举报

15#
ID:379452 发表于 2018-11-12 20:59 | 只看该作者
感谢楼主分享,超级给力
回复

使用道具 举报

16#
ID:449100 发表于 2018-12-18 17:29 | 只看该作者
谢谢分享
回复

使用道具 举报

17#
ID:526540 发表于 2019-8-2 16:45 | 只看该作者
谢谢分享,来学习一下
回复

使用道具 举报

18#
ID:709358 发表于 2020-3-16 12:20 | 只看该作者
凯撒星星 发表于 2018-5-27 07:49
楼主这段程序对我很有用处,十分的感谢!!!!

十分感谢
回复

使用道具 举报

19#
ID:338672 发表于 2020-4-15 21:35 | 只看该作者
谢谢谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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