51单片机 串行数模转换C语言,基于51单片机和ADC0809数模转换的C程序.doc

基于51单片机和ADC0809数模转换的C程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

/********************定义LCD1602接口信息********************************/

sbit lcdrs=P3^0;//数据命令选择位

sbit lcden=P3^1;//使能位

sbit lcdrw=P3^2;

/********************定义ADC0808接口信息********************************/

sbit ADA=P2^0;

sbit ADB=P2^1;

sbit ADC=P2^2;

sbit EOC=P2^3;

sbit CLK=P2^4;

sbit START=P2^5;

sbit OE=P2^6;

/*****************键盘管脚定义*************/

sbit key1=P3^3;

sbit key2=P3^7;

/*********************定义数据********************************/

uchar tab1[]={48,46,48,48,48,46,48,48,48,46,48,48,48,46,48,48};

//存放AD采集数据

uchar tab2[]={48,46,48,48,48,46,48,48,48,46,48,48,48,46,48,48};

uchar tab3[]="TONGLU:";

uchar tab4[]="DIANYA:";

uchar tab5[]=;

uchar num,m=0,getdata=0;

uint temp=0;

/*延时函数*/

void delay(uchar t)

{

uchar x,y;

for(x=t;x>0;x--)

for(y=110;y>0;y--);

}

void delayl(uchar ltime)

{

uchar i;

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

delay(255);

}

/*写命令函数*/

void write_com(uchar com)

{

lcdrs=0;

P0=com;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

/*写数据函数*/

void write_data(uchar date)

{

lcdrs=1;

P0=date;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

void disp(uchar h,l,uchar *p)

{

write_com(0x80+h*0x40+l);

while(*p!='\0')

{

write_data(*p);

p++;

}

}

/*初始化函数*/

void LcdInit()

{

lcdrw=0;

delay(5);

lcden=0;//使能位置低电平

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

delayl(20);

}

void TimeInit()

{

TMOD=0x10;//定时器1工作于方式1,16位不重装初值 TH1=(65536-200)/256; //定时200us(5KHz)

TL1=(65536-200)%256;

EA=1;

ET1=1;

TR1=1;

}

void AdTr(bit ADDA,ADDB,ADDC,uchar channel)

{

START=0;

OE=0;

START=1;

START=0;//A/D转换启动信号,正脉冲启动选中的模拟信号开始转换 ADA=ADDA;

ADB=ADDB;

ADC=ADDC;

delay(5);

while(EOC==0);//启动转换后EOC变为L,转换结束后变为H

OE=1;

getdata=P1;

temp=getdata*1.0/255*500;

OE=0;

if(channel<4)

{

tab1[4*channel]=temp/100+0x30;

tab1[4*channel+2]=(temp%100)/10+0x30;

单片机数模转换程序 将da#include //52系列单片机头文件 #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; //申明U1锁存器的锁存端 sbit wela=P2^7; //申明U2锁存器的锁存端 sbit adwr=P3^6; //定义AD的WR端口 sbit adrd=P3^7; //定义AD的RD端口 sbit led=P2^5; sbit DAC0832_CS = P3^2; sbit DAC0832_WR = P3^6; sbit AD_CS=P0^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar weima[] = {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void display(uchar bai,uchar shi,uchar ge) //显示子函数 { dula=1; P0=table[bai]|0x80; //送段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0x7e; //送位选数据 wela=0; delayms(1); //延时 dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0x7d; wela=0; delayms(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0x7b; wela=0; delayms(1); } /*void displays(uchar a ,uchar b,uchar c) //显示子函数 { dula=1; P0=table[a]; //送段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0x77; //送位选数据 wela=0; delayms(1); //延时 dula=1; P0=table[b]; dula=0; P0=0xff; wela=1; P0=0x6f; wela=0; delayms(1); dula=1; P0=table[c]; dula=0; P0=0xff; wela=1; P0=0x5f; wela=0; delayms(1); } */ void displays(uchar shuzi,uchar weizhi,bit dp) { dula=1; if(dp) P0 = table[shuzi]|0x80; else P0 = table[shuzi]; dula=0; wela=1; P0 = weima[weizhi]; wela=0; } void main() // 主程序 { uint ad; uchar A1,A2,A3,adval; AD_CS=1; //置CSAD为0,选通ADCS 以后不必再管ADCS DAC0832_CS = 0; DAC0832_WR = 0; while(1) { wela=1; P0=0x7f; wela=0; adwr=1; _nop_(); adwr=0; //启动AD转换 _nop_(); adwr=1; P1=0xff; //读取P1口之前先给其写全1 adrd=1; //选通ADCS _nop_(); adrd=0; //AD读使能 _nop_(); adval=P1; ad=adval*1.941; //AD数据读取赋给P1口 adrd=1; A1=ad/100; //分出百,十,和个位 A2=ad0/10; A3=ad; P1=(~adval); P0=adval; displays(adval/100,4,0); delayms(1); displays(adval0/10,5,0); delayms(1); displays(adval,6,0); delayms(1); display(A1,A2,A3); } } ad的数据相互转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值