四位共阳数码管的使用剖析.docx

上传人:b****4 文档编号:12130710 上传时间:2023-04-17 格式:DOCX 页数:17 大小:32.64KB
下载 相关 举报
四位共阳数码管的使用剖析.docx_第1页
第1页 / 共17页
四位共阳数码管的使用剖析.docx_第2页
第2页 / 共17页
四位共阳数码管的使用剖析.docx_第3页
第3页 / 共17页
四位共阳数码管的使用剖析.docx_第4页
第4页 / 共17页
四位共阳数码管的使用剖析.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

四位共阳数码管的使用剖析.docx

《四位共阳数码管的使用剖析.docx》由会员分享,可在线阅读,更多相关《四位共阳数码管的使用剖析.docx(17页珍藏版)》请在冰豆网上搜索。

四位共阳数码管的使用剖析.docx

四位共阳数码管的使用剖析

四位数码管的探究1

硬件准备1

软件准备2

控制思路:

2

卞面是实际的焊接之中,考虑到实际电路的连接顺序,采用下面的连接。

4

两位数码管源程序:

00-994

异曲同工:

00099995

更进一步:

四位数字时钟7

 

四位数码管的探究

硬件准备

四位共阳数码管一块,1K电阻4只。

数码管的引脚图如下所示:

四位共阳数码管

A1110BC7

ABCD

BB5BB

C接高电平3接低电平时5(夷<1按高电平3授低电平时如2亮

A.B.C.D均连接Vcc

KS7I

REP3.0匚

TxD/P3.1匚

XTAL2I

XTALI匚rm)/P3.v匚EH/P3.3匚

ECI/T0"3・4匚PTO1/PCA0/TPP3.5I

Gnd匚

123456789^

)sop—20、DIP—20

0987654321OG11X1X1111X1X111

VC€

P1.7/SCLK

Pl.fi/MTSO

Pl.5/MO5I

Pl.1/^

Pl.3

Pl.2

Pl.L/CLK0CI1

Pl.O/CLKOCIO

P3.7/PCA0/PW0

使用的单片机是STC12C2052,位选町以使用P1接II控制。

参照下面数据手册的内容,可以看出P3・5,3.4,3.3,3.2均能够作为I/O接口以推挽方式使

用。

由于数码管所能承受的电流较小,所以外加1K的限流电阻。

单片机P3.5,3.4,3.3,3.2四个接口可以作为数码阳极一端,利用推挽方式输出高电平,

pi接11作为数码管的段选,输出低电平,驱动每一段数码管,这就为设想的实现取得了理论的基础。

证明了使用20脚单片机控制数码管产生时钟的效果是切实可行的。

下面关键的部分就成了数码管的编程阶段了。

P1口设定

P1M0(7:

0]

P1M1[7:

0]

I/OUl模式(Pl.K如做AQ使用,需先将英设置成开漏或高阻输入〉

0

0

准双向口(传统8051I/O口模式>・灌电流可达20mA•拉电流为230uA・由于制造误差,实际为250uA〜150uA

0

1

推挽输出(强上拉输出.可达20mA.要加限流电阻)

1

0

仅为输入(奇阻),如果该UO口需作为A/D使用,可选此模式

1

1

开jW(OpenDrain).如果该IS口需作为A/D使用.可选此換式

 

P3口设定

P3M0[7:

0]

P3M1[7:

0]

I/O口模式

0

0

准双向口(传统8051I/O口模式).淞电流可达20mA・拉电流为230pA・由于制造误差•实际为250uA~15OuA

0

1

推挽输出(强卜•拉输出・可达20mA.耍加限流电R1)

1

0

仅为输入(高阻)

1

1

JTi^fOpenDrain),内部上拉电阻断开,耍外加

卜面将使用单片机控制数码管产生时钟的效果。

由于单片机的计时是由软件延时的方法产

生,所以说误差会有很人。

因此本作品仅供娱乐。

初期的想法是加入闹钟的概念。

但是由于闹钟的定时不易调整,只能通过计算机编写软件定闹,这样就不是时钟的简洁的目的。

另外,由于当单片机控制蜂鸣器响的时候,单片机控制数码管的部分势必会停止,这样又会影响时钟的准确性。

因此,首先要实现的只是单片机的简易时钟功能或者说只是一个最人为1小时的秒表。

软件准备

将单片机的"O接II设置成推挽输出。

P1MO=OXOO;

P1M1=OXFF;

P3M0=0X00;

P3M1=OXFF;

控制思路:

第三四位作为秒表的秒针部分,每秒钟变化一次。

当第四位由0变到9时,第四位自动清零,第三位由0变成1,实现加一。

软件的实现分为两部分。

首先先实现后两位的秒针功能,先将前两位置之。

卜面是编程的设想。

由于数码管的引脚是共阳极,所有的阳极都是连接在一起的,因此不能同时给所有的阳极供电,如果那样的话,所有的数码管会有相同的显示方式。

考虑到这一情况,只能采用和点阵屏类似的扫描方法,即将数码管分成四个一位的情况,然后每个4nis扫描一次的方法。

四位共阳数码管

A1110BC7

ABCD

日日汨日

I

1

1

11

111

/45

11

 

C授高电平3接低电平d授高电平3恢低电平时dp2亮

A.B.C.D均连接Vcc

P3.5

P3.4

P3.3

P3.2

A

B

C

D

显示

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

十六

引脚

1

2

4

5

7

10

11

Dp

0

0

0

0

1

0

0

0

1

11

1

1

1

0

1

0

1

1

1

D7

2

0

0

1

0

0

1

0

I

25

3

1

0

0

0

0

1

0

1

85

4

1

1

0

0

0

0

1

1

C3

5

1

0

0

0

1

0

0

1

89

6

0

0

0

0

1

0

0

1

09

7

1

1

0

1

0

1

0

1

D5

8

0

0

0

0

0

0

0

1

01

9

1

0

0

0

0

0

0

I

81

卜•面是对D位数码管的控制,以测试段选的有效性。

#include

#defiiieweixuanPl

sbita=P3A5;

sbitb=P3A4;

sbitc=P3A3;

sbitd=P3A2;

voidyanshi(unsignedinta)

{

unsignedinti;

while(—a)

{

fbr(i=0;i<600;i++);

}

}

voidmam()

{

codeunsignedcharshuzi[]={0xll,0xd7,0x25,0x85,0xc3,0x89,0x09,0xd5,0x01,0x81};

PlM0=0X00;

P1M1=OXFF;//设置Pl,P3接「I的工作方式为推挽输

P3M0=0X00;

P3Ml=0XFF;

while(9)

{

unsignediiitj;

d=l;

for(j=0j<=9;j++)

{

weixuan=shuzi[j];

yanslii(lOOO);

}

}

}

这样的话,第D位会人约每一秒显示一个数字,从0到9不断地循环。

证明了段选的设置是真实有效的。

接下来的任务就是对ABC位进行控制。

F面是实际的焊接之中,考虑到实际电路的连接顺序,釆用

的连接。

 

引脚

1.7

1.6

1.5

1.4

1.3

1.2

1.1

1.0

1

2

3

4

11

5

7

10

四位共阳数鸥签

A1110BC7

ABCD

日曰;日日

!

!

ii

>2

111

J4f

c接高电平3接低电平时d小亮日按高电平3按低电平时如2亮

A.B.C.D均连接Vcc

1

2

3

4

0

0

0

1

0

1

1

1

1

0

2

0

0

1

1

3

1

0

1

0

4

1

1

1

0

5

1

0

1

0

6

0

0

1

0

7

1

1

1

0

8

0

0

1

0

9

1

0

1

0

11

5

7

10

十六

0

1

0

0

0x24

1

1

0

1

Oxed

0

0

0

1

0x31

0

0

0

1

Oxa!

1

0

0

0

0xe8

0

0

1

0

0xa2

0

0

1

0

0x22

0

1

0

1

Oxe5

0

0

0

0

0x20

0

0

0

0

OxaO

下面是通过动态扫描的方法,利用单片机控制数码管的后两位(C和D),来实现数码管从00显示到99的一个程序。

单片机每4ms输出一个信号,控制数码管显示一个数字,利用人眼的视觉暂停效呆来实现显示变化的过程。

由于外接电阻1K,所以单片机在亮度上不是很好,在以后的操作中还是需要改善的。

两位数码管源程序:

00-99

#include

2c2052.h>^defineweixuanPlsbita=P3A5;

sbitb=P3A4;

sbitc=P3A3;

sbitd=P3A2;

voidtOyansliiQ址时4nis

TMOD=OXOi;//十六位

TLO=0x60;//设置定时初值

THO=OxFO;//设置定时初值

TR0=l;

xvhile(TF0==0);

TF0=0;

}

voidmam()

unsignedintj,kj;

codeunsignedcharshuzi[]={0x24,0xed.0x31.Oxa1.0xe8.

0xa2.0x22,0xe5,0x20,0xa0};

/********************************扌非挽设置*************************/

PlM0=0X00;

P1M1=OXFF;//设置Pl,P3接II的工作方式为推挽输出。

P3M0=0X00;

P3Ml=0XFF:

严****************************************************************/a=O;b=O;c=O;d=O;

xvhile(l)

血(J=O;jv10J-H-)p(坏

fbr(k=O;k<10:

k++)个位馆坏

for(l=0;1<125;!

++)//!

25*8ms=1000nis=1s

c=l;weixuaii=shuzi[j];tOyaiishi();c=O;4msd=l;weixuaii=shuzi[k];tOyansluQ;d=O:

4ms

}

接下来将会是对数码管的A.B,C,D四位的控制。

由于上面的基础,相信四位控制显示0000——9999的过程将不会很复杂。

异曲同工:

0000——9999

#include

2c2052.h>

书defineweixuanPl

sbita=P3A5;

sbitb=P3A4;

sbitc=P3A3;

sbitd=P3A2;

voidtOyansliiQ延时4nis

{

TMOD=0X01;//+六位

TLO=0x60;//设置定时初值

THO=OxFO;〃设置定时初值

TR0=l;

while(TF0==0);

TFO=O:

}

voidmam()

{

unsignedchari,kJaiLii;

codeunsignedcharshuzi[]={0x24,0xed.0x31.Oxa1,0xe8,

0xa2.0x22,0xe5,0x20,0xa0};

/********************************ift|&[«-^**************************/

PlM0=0X00;

P1M1=OXFF;//设置Pl,P3接门的工作方式为推挽输出。

P3MOOXOO;

P3Ml=0XFF:

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

a=O;b=O;c=O;d=O;

xvhile(l)

{

fbr(k=O;k<10;k++)7千位

{

fbr(l=0;l<10;l++)//百位

{

for(m=0;m<10|•位

//4ms*4=16nis;

fbi(n=O;n<10;n++)、(I

{

foi(i=0;i<62;i-H-)//62ms*16=992ms1s

{

a=l;weixuan=shuzi[k];tOyanshi();a=O:

4msb=1;weixuan=shuzi[l];tOyansluQ;b=O;4ms

c=l;weixuan=shuzi[m];tOvanshi();c=O;4msd=1;weixuan=shuzi[n];tOyanshi();d=O;4ms

}

 

更进一步:

1小时定时器

#include

2c2O52.h>^defineweixuanPlsbita=P3A5;

sbitb=P3A4;

sbitc=P3A3;

sbitd=P3A2;

voidtOyansliiQ址时4ms

TMOD=0X01//+A位

TLO=0x60;〃设置定时初值

THO=OxFO;〃设置定时初值

TR0=l;

while(TF0==0);

TF0=0;

}

voidtlyansliiQ//lnis

TMOD=0X10;

TLl=0xl8;〃设置定时初值

THl=0xFC;〃设置定时初值

TR1=1;

while(TFl==0);

TF1=O;

}

voidmam()

unsignedchari,kdaiLii;

codeunsignedcharshuzi[]={0x24,0xed.0x31.Oxa1.0xe8.0xa2.0x22,0xe5,0x20,0xa0};

/********************************扌非挽设置**************************/

PlM0=0X00;

P1M1=OXFF;/置Pl,P3接II的工作方式为推挽输出o

P3M0=0X00;

P3Ml=0XFF:

a=O;b=O;c=O;d=O;

while(l)

{

fbr(k=0;k<6;k++)7T-位

for(l=0;l<10;l++)/7百位

{

fbr(m=O;m<6;m++)k7<

{

fbi(n=O;n<10;ii-h-).7个位

{

for(i=0;i<55;i++)//19*551045nis=ls

{

a=l;weixuan=shuzi[k];tOyanshi();a=O:

4ms

b=1;weixuan=shuzi[l];tOyanslu();b=O:

4msc=l;weixuan=shuzi[m];tOvanshi();c=O;4msd=l;weixuan=shuzi[n];tOyanshi();d=O;4msif(i<25)

{

b=l;weixuan=^0x20;tlyansliiQ;b=0;inis

c=l;weixuau=^0x20;tlyaiisliiQ;c=0;1ms

烁d=1;weixuan=^0x2O;tlyansliiQ;d=O;1ins

}

}

}

}

}

小数点可能是由3位共同控制的,暂时还没有发现时那两位控制的,所以干脆使用三位控制。

如果小数点的控制也使用4ms的延时,那么每一位数码管显示的时间间隔将会是28ms,经过实际的测试发现能够明显感觉出闪烁来。

由于小数点的显示是连续的,即连续亮25个周期,灭25个周期,所以使用1ms的延时并不会有什么影响。

欲穷千里目

下面是24h定时器的源程序。

由于实验板的面积有限,不能加入两个调整时间的开关,因此不能实现调整时间,在未来的实验中将会解决这一问题。

增加调节小时,分钟的程序。

#include

2c2052.h>

^defineweixuanPl

sbita=P3A5;

sbitb=P3八4;

sbitc=P3A3;

sbitd=P3A2;

voidtOyansliiQ延时Inis

{

TMOD=0X01;〃十六位

TL0=0xl8;//设置定时初值

TH0=OxFC;//设置定时初值

TRO=1;

while(TF0==0);

TF0=0:

}

voidtlyansliiQ//lnis

{

TMOD=0X10;

TLl=0xB4;//设置定时初值

TH1=OxFE;〃设置定时初值

TR1=1;while(TFl==O);

TF1=O;

}

voidmam()

{

unsignedcharkJjnji;mti;

codeunsignedcharshuzi[]={0x24.0xed.0x31.Oxa1.Oxe&

0xa2.0x22,0xe5,0x20,0xa0};

P1MOOXOO;

P1M1=OXFF;/设置Pl,P3接口的工作方式为推挽输出。

P3MOOXOO;

P3Ml=0XFF:

J*****************************************************************/

a=O;b=O;c=O;d=O;

xvhile(l)

{fbr(k=0;k<2;k++)//T位

{

fbr(l=0;l<10;l++)//百位

{

if(k=2&&k==4)break;fbr(m=0;m<6;m++)1、

{

fbi(n=O;n<10;n++丿个仆for(i=0;i<12000;i-H-)//5ms*12000=lniui

{

a=l;weixuan=shuzi[k];tOyansliiQ;a=O/1ms

b=1;weixuan=shuzi[l];tOyanslii();b=O:

1msc=l;weixuan=shuzi[m];tOyanshi();c=O;//lmsd=1;weixuan=shuzi[n];tOyanshi();d=O;//1msif(i/l00%2==0),7小数点闪烁

{

b=1;weixuan=^0x2O;tlyansliiQ;b=0;//33Ous

c=1;weixuau=^0x20;tlyaiisliiQ;c=O;33Ousd=l;weixuan=^0x20;tlyansliiQ;d=0y/330us

}

}

}

}

}

}

}

}

〃注意如果小数点闪烁的程序中同时设置小数点控制为bcd=l,那么将会造成电流较小从而小数点的闪烁过暗。

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

当前位置:首页 > 小学教育 > 数学

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

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