Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7723812
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: C/C++

2011-01-07 17:59:14

  1. /************************************************
  2. 功能:ADC0804--8051驱动测试程序
  3. 使用:调用函数 void AD() 最后电压值保存在 AD1,AD2,AD3
  4.         AD1为整数(其他依次为小数电压值)
  5. 时间:2011年1月7日
  6. ************************************************/

  7. #include<reg51.h>
  8. #include <intrins.h>
  9. #define uint unsigned int
  10. #define uchar unsigned char

  11. sbit adrd=P3^7; //读控制RD

  12. sbit adwr=P3^6;            //写控制WR


  13. sbit AD_wela=P2^7;        //使能端


  14. uchar AD1,AD2,AD3;        //读出来的电压压值 AD1为整数(其他依次为小数电压值)


  15. void AD_delay(unsigned char AD_i)        //1ms延时程序

  16. {
  17.     unsigned char AD_j,AD_k;
  18.   for(AD_j=AD_i;AD_j>0;AD_j--)
  19.     for(AD_k=125;AD_k>0;AD_k--);
  20. }

  21. void AD()
  22. {
  23.     uchar adval,AD2t,AD3t;
  24.     AD_wela=1;
  25.     P0=0; //选通ADCS

  26.     adwr=0;            //AD写入(随便写个什么都行,主要是为了启动AD转换)

  27.     _nop_();
  28.     adwr=1;
  29.     P0=0xff; //关闭ADCS

  30.     AD_delay(10);
  31.         
  32.      AD_wela=1; //重新打开有AD片选信号锁存器的锁存端

  33.      P1=0xff; //读取P1口之前先给其写全1

  34.      P0=0; //选通ADCS

  35.      adrd=0; //AD读使能

  36.      adval=P1;        //AD数据读取赋给P1口

  37.      adrd=1;
  38.      P0=0xff; //关闭ADCS

  39.      adwr=0;

  40.      P1=adval; //读出AD的值

  41.      AD1=adval/51;        //取整数位电压、把AD植转换成电压值(除51)

  42.      AD2t=adval%51;                
  43.      AD2=(AD2t*10)/51;    //取第一位小数电压

  44.     
  45.      AD3t=AD2t%51;        //取第二位小数电压

  46.      AD3=(AD3t*10)/51;
  47. }
阅读(1415) | 评论(0) | 转发(2) |
0

上一篇:12864显示

下一篇:LED--8051驱动测试程序

给主人留下些什么吧!~~