“Mona”通过精心收集,向本站投稿了2篇结合单片机学习板学习c语言之AD转换,下面是小编整理后的结合单片机学习板学习c语言之AD转换,欢迎大家阅读借鉴,并有积极分享。

结合单片机学习板学习c语言之AD转换

篇1:结合单片机学习板学习c语言之AD转换

目的:通过STC单片

机接收ADC0804

的数字量,并把该数字

量通过8155控制的

LED显示出来,

/*本程序利用查询法

得到ADC0804的

AD转换后的数字量。

*/

#include“a

t89x51.h”

#include“a

bsacc.h”

#include “intrins.h

#include

tdio.h>

#include“m

ath.h”

#define uchar unsigned char

sfr ISP_CONTR =0xE7;

uchar advalue,ad

l,adh;

uchar code BitdisL[]=

{0x1f,0x2f

,0x37,0x3b

,0x3d,0x3e

};

uchar code Chardis[]=

{0x3f,0x06

,0x5b,0x4f

,0x66,0x6d

,0x7d,0x07

,0x7f,0x6f

,0x77,0x7c

,0x39,0x5e

,0x79,0x71

};

delay_05s(

)

{

int count;

count=647

395;

for(;coun

t!=0;count

--);

}

/*void ad interrupt 2 //如果想要用中断法

,可以使用这个子程序

{

//EX1=0;

RD=0;

advalue=P

0;

adl=adval

ue & 0x0f;

adh=_cror

_(advalue,

4);

RD=1;

//P1=~P1;

//P1=adva

lue;

WR=0;

_nop_();

WR=1;

//EX1=1;

}*/

void serial() interrupt 4 //编号0-4,外中

断0,定时器0,外中

断1,定时器1,串行

中断

{

uchar a;

RI=0;

a=SBUF;

if (a==0xFE)

{P1_0=0;

delay_05

s();

delay_05

s();

ISP_CONT

R=0x60;}

else if(a=='A')

{P1_1=0;

delay_05

s();

P1_1=1;

}

}

void main(void)

{

unsigned int b;

unsigned char cmd,temp;

结合单片机学习板学习c语言之AD转换TMOD=0x20

;

TH1=0xf4;

TL1=0XF4;

TR1=1;

SCON=0XF8

;

PCON=0X80

;

IT0=1;

EA=1;

ES=1;

RI=0;

cmd=0x0F;

XBYTE[0X7

FF0]=cmd;

WR=0;

_nop_();

WR=1;

while(1)

{

WR=0;

_nop_();

WR=1;

while(P3

_3);

RD=0;

advalue=

P0;

RD=1;

if (cabs(adva

lue-temp)>

0x01)/*该句仅

仅为了显示值不会老是

变动,但代价是显示精

度减少了,有的电压不

能用数字显示出来,

*

/

{

temp=ad

value;

adl=adv

alue & 0x0f;

adh=adv

alue>>4;

}

XBYTE[0X

7FF3]=Bitd

isL[1];

XBYTE[0X

7FF1]=Char

dis[adl];

for(b=0;

b<500;b++)

;

XBYTE[0X

7FF3]=Bitd

isL[0];

XBYTE[0X

7FF1]=Char

dis[adh];

for(b=0;

b<500;b++)

;

}

}

【重点难点】

1.启动ADC080

4,有的书写MOVX

@Ri,A (即XBYTE[0X

0000]=0X00

;),用这个语句来启

动单片机,我个人认为

,程序没错,但是它可

能针对低频晶振用的,

当用到高频晶振,WR

篇2:结合单片机学习板学习c语言之led数码管显示

目的:STC单片机通

过控制8155I/O

扩展芯片驱动6位7段

LED数码管显示,

/*本程序通过单片机

控制8155的PA与

PC口,在6位的LE

D上显示123456

*/

#include“a

t89x51.h”

#include“a

bsacc.h”

#include “intrins.h

#include

tdio.h>

#define uchar unsigned char

sfr ISP_CONTR =0xE7;

uchar code BitdisL[]=

{0x1f,0x2f

,0x37,0x3b

,0x3d,0x3e

};

uchar code Chardis[]=

{0x3f,0x06

,0x5b,0x4f

,0x66,0x6d

,0x7d,0x07

,0x7f,0x6f

,0x77,0x7c

,0x39,0x5e

,0x79,0x71

};

delay_05s(

)

{

int count;

count=647

395;

for(;coun

t!=0;count

--);

}

void serial() interrupt 4 //编号0-4,外中

断0,定时器0,外中

断1,定时器1,串行

中断

{

int a;

RI=0;

a=SBUF;

if (a==0xFE)

{delay_0

5s();

delay_05

s();

ISP_CONT

R=0x60;}

else

SBUF='A'

;

while(!T

I);

TI=0;

}

void main(void)

{

unsigned int b,i;

unsigned char cmd,a;

TMOD=0x20

;

TH1=0xf4;

TL1=0XF4;

TR1=1;

SCON=0XF8

;

PCON=0X80

;

EA=1;

ES=1;

RI=0;

cmd=0x0F;

XBYTE[0X7

FF0]=cmd;

a=0xfe;

while(1)

{

XBYTE[0X7

FF3]=Bitdi

sL[i];

XBYTE[0X7

FF1]=Chard

is[i];

for(b=0;

b<500;b++)

;

i++;

if (i>6)

i=0;

}

}

【重点难点】

1.熟悉8155的端

口分配,

2.确定8155地址

,由上图可以看出,由

于当8155的IO/

M=1,CE=0时,

才能对8155设置命

令寄存器和A,B,C

口。由上图不难得出命

令寄存器的地址是0x

7ff0(该地址不唯

一,也可以是0x40

00等)

3.每位LED显示时

间为“for(b=0

;b<500;b++

);”比较合适,延时

太短了,每个LED显

示变暗,这在后一个实

验中即可出现。延时太

长了,就会出现形如C

RT刷新率不高时闪烁

现象。

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。