ADC0809程序
/*---------------------------------------------------------------------------------------------------
程序說明:adc0809接到51單片機(jī)的P1口,P1口接有8個(gè)LED,每次轉(zhuǎn)換結(jié)束都可以通過LED觀察到轉(zhuǎn)換結(jié)果(低電平亮),ADC參考電壓與單片機(jī)的電源要一致
通過驗(yàn)證:輸入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;
/*---------------------------------
函數(shù)名:delayus(i)
功 能:延時(shí)t=(12*i+14)us
參 數(shù):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時(shí)地址進(jìn)入鎖存器
_nop_();
_nop_();
_nop_();
ADC_ALE=0; //ALE=0時(shí)地址被鎖存住
_nop_();
_nop_();
_nop_();
}
/*---------------------------------
dac0809模數(shù)轉(zhuǎn)換
----------------------------------*/
void ADC_0809()
{
ADC_START=1; //上升沿復(fù)位
_nop_();
_nop_();
_nop_();
ADC_START=0; //下降沿開始
_nop_();
_nop_();
_nop_();
while(!ADC_EOC); //等待轉(zhuǎn)換結(jié)束
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引腳
/*---------------------------------
函數(shù)名:delayusus(i)
功 能:延時(shí)t=(12*i+14)us
參 數(shù):i
返回值:無
備 注: 晶振12MHz
-----------------------------------*/
void delayus(i)
{
for(i;i>0;i--);
}
/*---------------------------------
函數(shù)名:w_com_1602(uchar com)
功 能:寫命令
參 數(shù):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);
}
/*---------------------------------
函數(shù)名:w_dat_1602(uchar dat)
功 能:寫數(shù)據(jù)
參 數(shù):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);
}
/*---------------------------------
函數(shù)名:init_1602()
功 能:1602初始化
參 數(shù):無
返回值:無
-----------------------------------*/
void init_1602()
{
P0=0xff; //端口初始化
w_com_1602(0x38); //功能設(shè)置
w_com_1602(0x0f); //開光標(biāo)但不閃爍
w_com_1602(0x06); //設(shè)置輸入方式
w_com_1602(0x01); //清屏
delayus(5);
}