这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 设计工具 » ADC0809程序

共1条 1/1 1 跳转至

ADC0809程序

高工
2013-10-25 15:27:48     打赏

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

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

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

输入0v则LED全亮

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

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

#include

#include

#include1602.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);

}




关键词: datasheet中文资料     datasheet p    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]