视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ADC0809程序
2025-09-23 22:04:58 责编:小OO
文档
/*---------------------------------------------------------------------------------------------------

程序说明:adc0809接到51单片机的P1口,P1口接有8个LED,每次转换结束都可以通过LED观察到转换结果(低电平亮),ADC参考电压与单片机的电源要一致

          通过验证:输入5v则LED全灭

                    输入0v则LED全亮

                    通过电位器控制输入0~5v则1602显示输出从0~255逐次增加

------------------------------------------------------------------------------------------------------*/

#include

#include

#include"1602.c"

#define uchar unsigned char 

#define uint  unsigned int

sbit ADC_START=P2^0;

sbit ADC_ALE  =P2^1;

sbit ADC_OE   =P2^2;

sbit ADC_EOC  =P2^3;

sbit D0=P1^0;

sbit D1=P1^1;

sbit D2=P1^2;

sbit D3=P1^3;

sbit D4=P1^4;

sbit D5=P1^5;

sbit D6=P1^6;

sbit D7=P1^7;

uchar ad_dat;

/*---------------------------------

函数名:delayus(i)

功  能:延时t=(12*i+14)us

参  数:i

返回值:无

备  注: 晶振12MHz

-----------------------------------*/

/*void delayus(i)

{

for(i;i>0;i--);

}

*/

/*---------------------------------

       dac0809初始化

----------------------------------*/

void init0809()

{

 ADC_START=0; 

 ADC_OE   =0;

 _nop_(); 

 ADC_ALE=0;

 _nop_();

 _nop_();

 _nop_(); 

 ADC_ALE=1;   //ALE=1时地址进入锁存器

 _nop_();

 _nop_();

 _nop_();

 ADC_ALE=0;   //ALE=0时地址被锁存住

 _nop_(); 

 _nop_();

 _nop_();

}

/*---------------------------------

       dac0809模数转换

----------------------------------*/

void  ADC_0809()

{

 ADC_START=1;      //上升沿复位

 _nop_();

 _nop_();

 _nop_();

 ADC_START=0;      //下降沿开始

 _nop_();

 _nop_();

 _nop_();

 while(!ADC_EOC);  //等待转换结束

 ADC_OE =1;

 w_dat_1602(0x30+(uchar)D0);

 w_dat_1602(0x30+(uchar)D1);

 w_dat_1602(0x30+(uchar)D2);

 w_dat_1602(0x30+(uchar)D3);

 w_dat_1602(0x30+(uchar)D4);

 w_dat_1602(0x30+(uchar)D5);

 w_dat_1602(0x30+(uchar)D6);

 w_dat_1602(0x30+(uchar)D7);

 delayus(5);

 ADC_OE =0; 

 

}

void main()

{

 init0809(); 

 init_1602();

 delayus(10);

 while(1)

 {

  w_com_1602(0x80);

  ADC_0809();

 }

}

#include

#define uchar unsigned char 

#define uint  unsigned int

sbit rs=P2^4;      //1602io引脚              

sbit rw=P2^5;      //1602io引脚 

sbit e=P2^6;       //1602io引脚 

/*---------------------------------

函数名:delayusus(i)

功  能:延时t=(12*i+14)us

参  数:i

返回值:无

备  注: 晶振12MHz

-----------------------------------*/

void delayus(i)

{

for(i;i>0;i--);

}

/*---------------------------------

函数名:w_com_1602(uchar com)

功  能:写命令

参  数:uchar com

返回值:无

-----------------------------------*/

void w_com_1602(uchar com)

 e=0;

 rs=0; 

 rw=0;

 delayus(2);

 P0=com;

 e=1;

 delayus(2);

 e=0;

 delayus(2); 

}

/*---------------------------------

函数名:w_dat_1602(uchar dat)

功  能:写数据

参  数:uchar dat

返回值:无

-----------------------------------*/

void w_dat_1602(uchar dat)

{

 e=0;

 rs=1;

 rw=0;

 delayus(2);

 P0=dat;

 e=1;

 delayus(2);

 e=0;

 delayus(2); 

}

/*---------------------------------

函数名:init_1602()

功  能:1602初始化

参  数:无

返回值:无

-----------------------------------*/

void init_1602()

{

 

 P0=0xff;           //端口初始化

 w_com_1602(0x38);  //功能设置

 w_com_1602(0x0f);  //开光标但不闪烁

 w_com_1602(0x06);  //设置输入方式

 w_com_1602(0x01);  //清屏

 delayus(5);

}

                                                                                                                 下载本文

显示全文
专题