51单片机的AD转换Word格式.docx

上传人:b****5 文档编号:21450780 上传时间:2023-01-30 格式:DOCX 页数:13 大小:17.01KB
下载 相关 举报
51单片机的AD转换Word格式.docx_第1页
第1页 / 共13页
51单片机的AD转换Word格式.docx_第2页
第2页 / 共13页
51单片机的AD转换Word格式.docx_第3页
第3页 / 共13页
51单片机的AD转换Word格式.docx_第4页
第4页 / 共13页
51单片机的AD转换Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

51单片机的AD转换Word格式.docx

《51单片机的AD转换Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机的AD转换Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

51单片机的AD转换Word格式.docx

#defineL0x00

#defineR0x40

#defineLIMIT0x80

/**********全局变量************/

ucharcbyte;

uchardatastatu;

bitxy;

/**************函数******************/

voidWrL(ucharx);

voidWrR(ucharx);

voidLcmcls(void);

voidLcminit(void);

voidPutpicture();

voiddelay(unsignedinttime);

voidVtoH8x16change(uchar*hzbuf);

voidPuthalf(uchar*strch,ucharrow,ucharcol);

voidWrdata(ucharx,ucharrow,ucharcol);

voidLocatexy(ucharrow,ucharcol);

voidvWrite8x16Character(uchar*ch,ucharrow,ucharcol,bitflag);

ucharADC0804();

externucharcodechar_Table[95][16];

externunsignedcharcodepicture[];

/***************微秒级延时*****************/

voiddelay(unsignedinttime)

{unsignedinti;

for(i=0;

i<

time;

i++);

}

/***********主程序***************/

voidmain(void)

{uchari,j,k;

floatvoltage,decimal;

unsignedintintvolt,tofloat;

addr0=1;

addr1=0;

addr2=1;

//ULN2003片选地址

P0=0x00;

//断开继电器A,B

cs138=1;

cs138=0;

//数据锁存到U18(74HC574)

Lcminit();

//LCD初始化

Putpicture();

//显示界面图片

while

(1)

{

voltage=ADC0804();

voltage=voltage*0.0391;

//将二进制字节数据变成实际电压值10/256=0.0196

intvolt=voltage;

//取整数部分

tofloat=intvolt;

decimal=voltage-tofloat;

//取小数部分

decimal=decimal*100;

//小数部分取两位

i=intvolt%0x0a+'

0'

;

//整数部分个位

intvolt=decimal;

j=intvolt%0x0a+'

//小数部分低位

intvolt=intvolt/0x0a;

k=intvolt%0x0a+'

//小数部分高位

vWrite8x16Character(&

char_Table['

V'

-0x20][0],3,112,0);

//显示电压单位

char_Table[j-0x20][0],3,104,0);

//显示小数低位

char_Table[k-0x20][0],3,96,0);

//显示小数高位

.'

-0x20][0],3,88,0);

//显示小数点

char_Table[i-0x20][0],3,80,0);

//显示整数位

delay(5000);

}

/*******************0804转换程序********************/

ucharADC0804()

{ucharadc0804value;

addr1=1;

addr2=0;

//输出AD0804片选地址。

P0=0xff;

//向ADC0804发任何数据,0804开始转换

WR=0;

WR=1;

delay(1000);

//等待转换完成

RD=0;

adc0804value=P0;

//读取转换后的值

RD=1;

return(adc0804value);

//***********初始化LCD*******************/

voidLcminit(void)

{

cbyte=DISPOFF;

WrL(cbyte);

WrR(cbyte);

cbyte=DISPON;

cbyte=DISPFIRST;

Lcmcls();

Locatexy(0,0);

/***************LCD清屏********************/

voidLcmcls(void)

{uchari,j;

8;

i++){

delay(6);

for(j=0;

j<

LIMIT;

j++){

Wrdata(0x0,i,j);

/**************写左区***************/

voidWrL(ucharx)

{

P0=0xFF;

//P0口送FF,准备读

lck=0;

P1=0x2a;

//ELCD=1/W=1(读),CSB=1,CSA=0

lck=1;

while(P0&

LCDBUZY);

//最高位为1,表示忙,则循环

P1=0x00;

//ELCD=0,R/W=0(读),CSB=0,CSA=0

P0=x;

//数据送到P0口

P1=0x22;

//ELCD=1,RW=0(写),CSB=1,CSA=0

//ELCD=0,RW=0(写),CSB=0,CSA=0

/**************写右区**************/

voidWrR(uchardatax)

P1=0x29;

//ELCD=1,R/W=1(读),CSB=0,CSA=1

//ELCD=0,R/W=0(读),CSB=0,CSA=1

P0=x;

P1=0x21;

//ELCD=1,RW=0(写),CSB=0,CSA=1

/*************定位*****************/

voidLocatexy(ucharrow,ucharcol)

ucharx,y,right;

switch(col&

0xc0)

{

case0:

//最高位为1,表示忙,则循环

right=1;

break;

}//置右半屏标志

case0x40:

//ELCD=1,R/W=1(读),CSB=1,CSA=0

//ELCD=0,R/W=0(读)CSB=0,CSA=0

right=0;

}//置左半屏标志

x=col&

0x3f|SETX;

//把列数据变成行命令

y=row&

0x07|SETY;

//把行数据变成行命令

/**********************************/

if(right)

else

/*********以上为判断忙标志********/

/*********************************/

P0=y;

/**********以上为送行命令***********/

/**********以上为送列命令***********/

statu=1;

statu=0;

//置左又半区标志

/**************数据写输出***************/

voidWrdata(ucharx,ucharrow,ucharcol)

Locatexy(row,col);

//定位显示位置

if(statu)

P1=0x05;

//ELCD=0R/W=0(写),D/I=1,CSB=0,CSA=1

P1=0x06;

//ELCD=0,R/W=0(写),D/I=1,CSB=1,CSA=0

P1=0x25;

//ELCD=1,R/W=0(写),D/I=1,CSB=0,CSA=1

P1=0x26;

//ELCD=1,R/W=0(写),D/I=1,CSB=1,CSA=0

/****************图形输出******************/

voidPutpicture()

unsignedchari,j,row,col;

unsignedintx;

row=0;

col=0;

128;

x=j*0x08;

i++)

cbyte=picture[x++];

Wrdata(cbyte,row,col);

row++;

}

row=0;

col++;

/***************半角数据点阵输出*******************/

voidPuthalf(uchar*strch,ucharrow,ucharcol)

uchari,bakerx;

bakerx=row;

16;

i++)//上半字输出

cbyte=strch[i];

Wrdata(cbyte,bakerx,col);

cbyte=strch[i+1];

Wrdata(cbyte,bakerx+1,col);

i++;

/************汉字输出******************/

/*voidPuthz(uchar*str,ucharrow,ucharcol)

bakerx=row;

32;

cbyte=str[i];

//上半字节输出

row=bakerx+1;

//下半字节输出

row=bakerx;

col=col+1;

*/

/***********************字符型点阵行--》列转换********************/

voidVtoH8x16change(uchar*hzbuf)

{uchari,j,k,cash[16];

ucharnewbyte,savebit[8];

for(k=0;

k<

k++){

newbyte=0;

savebit[i]=hzbuf[i]&

0x80;

savebit[j]=savebit[j]>

>

(7-j);

newbyte=newbyte|savebit[j];

cash[k]=newbyte;

for(i=8;

savebit[i-8]=hzbuf[i]&

newbyte=newbyte|savebit[j];

cash[k+1]=newbyte;

hzbuf[j]=hzbuf[j]<

<

1;

k++;

hzbuf[i]=cash[i];

/************************显示英文和符号字符********************/

voidvWrite8x16Character(uchar*ch,ucharrow,ucharcol,bitflag)

ucharucXArray[16],i;

if(flag){//反白显示英文

for(i=0;

i<

16;

i++)

ucXArray[i]=~ch[i];

}else{

for(i=0;

ucXArray[i]=ch[i];

VtoH8x16change(ucXArray);

Puthalf(ucXArray,row,col);

/*****************************结束************************/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1