单片机实验电路Word格式.docx

上传人:b****4 文档编号:17843642 上传时间:2022-12-11 格式:DOCX 页数:19 大小:978.87KB
下载 相关 举报
单片机实验电路Word格式.docx_第1页
第1页 / 共19页
单片机实验电路Word格式.docx_第2页
第2页 / 共19页
单片机实验电路Word格式.docx_第3页
第3页 / 共19页
单片机实验电路Word格式.docx_第4页
第4页 / 共19页
单片机实验电路Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机实验电路Word格式.docx

《单片机实验电路Word格式.docx》由会员分享,可在线阅读,更多相关《单片机实验电路Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

单片机实验电路Word格式.docx

DJNZR6,D2

DJNZR7,D1

RET

延时时间:

(250*2+3)*250+3=125753个机器周期

一个机器周期=1us

延时125753us=125.753ms

三、点亮8个闪烁的发光二极管

MOVP1,#0FFH;

    LCALLDELAY ;

(2)

    MOVP1,#00H  ;

(3)

(4)

(5)

(6)

MOVR6,#250 ;

(7)

DJNZR6,D2  ;

(8)

  DJNZR7,D1  ;

(9)

  RET      ;

(10)

四、认识八段数码显示管

共阳数码管共阴数码管显示原理

数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。

单片机与共阳数码管的连接

(1)让左边的数码管显示一个2字

显示一个2字,那么呢应当是A亮B亮G亮E亮D亮F不亮C不亮

显示数字

p0.7

c段

p0.6

e段

p0.5

h段

p0.4

d段

p0.3

g段

p0.2

f段

p0.1

a段

p0.0

b段

16进制代码

1

28H

7EH

2

A4H

3

64H

4

72H

5

61H

6

21H

7

7CH

8

20H

9

60H

28h,7eh,0a4h,64h,72h,61h,21h,7ch,20h,60h代表0123456789

程序如下:

程序1:

CLRP2.6;

选中左边的数码管

SETBP2.7;

不选右边的数码管

SETBP0.2;

f段不亮

SETBP0.5;

小数点不亮

SETBP0.7;

C段不亮

CLRP0.2;

其余的都亮

CLRP0.3

CLRP0.4

CLRP0.6

CLRP0.0

END

程序2:

CLRP2.6;

选中右边的数码管

不选左边的数码管

MOVP0,#0A4H;

将10100100送P0口

(2)100位计数器(数码管显示00--99依次循环)

两个数码管的位选为P2.6P2.7

a_bitequ20h 

;

个位数存放处

b_bitequ21h 

十位数存放处

tempequ22h 

计数器寄存器

star:

movtemp,#0 

初始化计数器

stlop:

acalldisplay

inctemp

mova,temp

cjnea,#100,next;

=100重来

movtemp,#0

next:

ljmpstlop

;

显示子程序

display:

mova,temp 

将temp中的十六进制数转换成10进制 

movb,#10 

10进制/10=10进制

divab

movb_bit,a;

十位在a

mova_bit,b;

个位在b

movdptr,#numtab;

指定查表启始地址

movr0,#4 

dpl1:

movr1,#250;

显示1000次

dplop:

mova,a_bit;

取个位数

MOVCA,@A+DPTR;

查个位数的7段代码

movp0,a;

送出个位的7段代码

clrp2.7;

开个位显示

acalld1ms;

显示1ms

setbp2.7

mova,b_bit;

取十位数

查十位数的7段代码

movp0,a;

送出十位的7段代码

clrp2.6;

开十位显示

setbp2.6

djnzr1,dplop;

250次没完循环

djnzr0,dpl1;

4个250次没完循环

ret

1ms延时(按12MHZ算)

====================================================

D1MS:

MOVR7,#80 

DJNZR7,$

7段数码管各划的数字排列表

numtab:

db28h,7eh,0a4h,64h,72h,61h,21h,7ch,20h,60h

0123456789

end

(3)让四个数码管从左到右显示8051几个数字

四个数码管的位选为P2.3P2.4P2.6P2.7,连接图如下:

动态扫描的原理

动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。

其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。

CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。

而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

loop:

movp0,#0ffh;

关显示(共阳,0为点亮,1为灭)

movp2,#0ffh;

关显示

clrp2.4 

选中第一个数码管

movp0,#20h;

数码管显示8

lcalldelay;

调用延时

movp0,#0ffh

movp2,#0ffh

clrp2.5;

选中第二个数码管

movp0,#28h;

数码管显示0

lcalldelay

clrp2.6;

选中第三个数码管

movp0,#61h;

数码管显示5

clrp2.7;

选中第四个数码管

movp0,#7eh;

数码管显示1

ajmploop;

程序条转到第一步,反复执行

delay:

延时子程序

movr6,#250

d1:

djnzr6,d1

ret

end

第五个实验:

999999计数器

org00h

a_bitequ30h;

个位数存放处

b_bitequ31h;

十位数存放处

c_bitequ32h;

百位数存放处

d_bitequ33h;

千位数存放处

e_bitequ34h;

万位数存放处

f_bitequ35h;

十万位数存放处 

org0000h

ajmpstar

org0030h

mova,#00h;

清0

mova_bit,a

movb_bit,a

movc_bit,a

movd_bit,a

move_bit,a

movf_bit,a

acalldisplay;

显示

inca_bit

mova,a_bit 

cjnea,#10,stlop;

mova_bit,#00h

incb_bit

mova,b_bit

cjnea,#10,stlop

movb_bit,#00h

incc_bit

mova,c_bit

movc_bit,#00h

incd_bit

mova,d_bit

movd_bit,#00h

ince_bit

mova,e_bit

move_bit,#00h

incf_bit

mova,f_bit

movf_bit,#00h

ajmpstlop

movdptr,#numtab;

指定查表启始地址

movr0,#4 

显示1000次

mova,a_bit;

取个位数

MOVCA,@A+DPTR;

movp0,a;

送出个位的7段代码

clrp2.6;

acalld1ms;

setbp2.6

mova,b_bit;

查十位数的7段代码

clrp2.5;

setbp2.5

mova,c_bit;

取百位数

查百位数的7段代码

movp0,a;

送出百位的7段代码

clrp2.4;

开百位显示

setbp2.4

mova,d_bit;

取千位数

查千位数的7段代码

送出千位的7段代码

clrp2.3;

开千位显示

显示1ms

setbp2.3

mova,e_bit;

取万位数

查万位数的7段代码

送出万位的7段代码

clrp2.2;

开万位显示

setbp2.2

mova,f_bit;

取十万位数

查十万位数的7段代码

送出十万位的7段代码

clrp2.1;

开十万位显示

setbp2.1

djnzr1,dplop;

250次没完循环

djnzr0,dpl1;

4个100次没完循环

1MS延时(按12MHZ算)

MOVR7,#2 

DJNZR7,$

RET

end

五、小键盘控制的数字显示

如果按小键盘p3.2那么数码管显示0,

如果按小键盘p3.3那么数码管显示1,

如果按小键盘p3.4那么数码管显示2,

如果按小键盘p3.5那么数码管显示3

数码管的位选为P2.6

org0000

ljmpstart

org30h

start:

movsp,#5fh

movp1,#0ffh

movp2,#0ffh

CLRP2.6;

选中p2.6右边的数码管

movp3,#0ffh

movp0,#0ffh 

初始化;

键盘口以及数码管口全部置高清零

l1:

jnbp3.2,l2;

如果p3.2等于低(键按下)那么执行l2

jnbp3.3,l3 

如果p3.3等于低(键按下)那么执行l3

jnbp3.4,l4 

如果p3.4等于低(键按下)那么执行l4

jnbp3.5,l5 

如果p3.5等于低(键按下)那么执行l5

ljmpl1

l2:

movp0,#28H;

显示数字0

l3:

movp0,#7EH;

显示数字1

l4:

movp0,#0A4H;

显示数字2

l5:

movp0,#64H;

显示数字3

六、点阵式汉字LED显示屏的原理与制作

汉字显示的原理:

我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。

即国标汉字库中的每一个字均由256点阵来表示。

我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。

事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。

在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。

方向为p00到p07,显示汉字“大”时,p05点亮,由上往下排列,为p0.0灭,p0.1灭,p0.2灭p0.3灭,p0.4灭,p0.5亮,p0.6灭,p0.7灭。

即二进制00000100,转换为16进制为04h.。

上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。

然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h.

这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h.

依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大”

的扫描代码为:

20H,00H,20H,02H,04H,02H,04H,04H

04H,08H,04H,30H,05H,0C0H,0FEH,00H

05H,80H,04H,60H,04H,10H,04H,08H

04H,04H,0CH,06H,04H,04H,00H,00H

由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。

不过现在有很多现成的汉字字模生成软件,我们就不必自己去画表格算代码了。

电路原理说明:

单片机,一共使用32条io口,这样造成了io资源的耗尽,系统也再无扩充的余地。

实际应用中我们使用4-16线译码器74ls154来完成列方向的显示。

而行方向16条线则接在p0口和p2口。

电路中行方向由p0口和p2口完成扫描,由于p0口没有上拉电阻,因此接一个4.7k*8的排阻上拉。

如没有排阻,也可用8个普通的4.7k1/8w电阻。

为提供负载能力,接16个2n5551的NPN三极管驱动。

列方向则由4—16译码器74LS154完成扫描,它由89S51的P1.0---P1.3控制。

同样,驱动部分则是16个2N5401的三极管完成的。

电路的供电为一片LM7805三端稳压器,耗电电流为100Ma左右。

将程序编译后烧写入89c51,插入40pinIc座,即可看到屏幕轮流显示:

“倚天一出宝刀屠龙”。

程序设计思路:

(1)扫描指针R4

MOVR4,#00H;

扫描指针清零

(2)取码指针R0

每个字32个码

(3)MOVR6,#16;

每个字有16列

(4)MOVR1,#100;

每个字的停留时间

程序清单:

ORG00H

LOOP:

MOVA,#00H;

开机初始化,清除画面

MOVP0,A;

清除P0口

ANLP2,#00;

清除P2口

MOVR2,#200

D100MS:

MOVR3,#250;

延时100毫秒

DJNZR3,$

DJNZR2,D100MS

MOV20H,#00H;

取码指针的初值

l100:

MOVR1,#100;

L16:

MOVR6,#16;

MOVR4,#00H;

MOVR0,20H;

取码指针存入R0

L3:

MOVA,R4;

扫描指针存入A

MOVP1,A;

扫描输出

INCR4;

扫描指针加1,扫描下一个

MOVA,R0;

取码指针存入A

MOVDPTR,#TABLE;

取数据表的上半部分的代码

MOVCA,@A+DPTR

MOVP0,A;

输出到P0

INCR0;

取码指针加1,取下一个码。

MOVA,R0

取数据表下半部份的代码

MOVP2,A;

输出到P2口

INCR0

MOVR3,#02;

扫描1毫秒

DELAY2:

MOVR5,#248;

DJNZR5,$

DJNZR3,DELAY2

清除屏幕

MOVP0,A

ANLP2,#00H

DJNZR6,L3;

一个字32个码是否完成?

DJNZR1,L16;

每个字的停留时间是否到了?

MOV20H,R0;

取码指针存入20H

CJNER0,#0FFH,L100;

8个字256个码是否完成?

JMPLOOP;

反复循环

TABLE:

汉字“倚”的代码

db01H,00H,02H,00H,04H,00H,1FH,0FFH

db0E2H,00H,22H,00H,22H,0FCH,26H,88H

db2AH,88H,0F2H,88H,2AH,0FAH,26H,01H

db63H,0FEH,26H,00H,02H,00H,00H,00H

以下分别输入天,一,出,宝,刀,屠,龙,的代码,略。

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

当前位置:首页 > 高中教育 > 高中教育

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

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