实验二 数码管显示Word下载.docx

上传人:b****6 文档编号:17501443 上传时间:2022-12-06 格式:DOCX 页数:18 大小:649.05KB
下载 相关 举报
实验二 数码管显示Word下载.docx_第1页
第1页 / 共18页
实验二 数码管显示Word下载.docx_第2页
第2页 / 共18页
实验二 数码管显示Word下载.docx_第3页
第3页 / 共18页
实验二 数码管显示Word下载.docx_第4页
第4页 / 共18页
实验二 数码管显示Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

实验二 数码管显示Word下载.docx

《实验二 数码管显示Word下载.docx》由会员分享,可在线阅读,更多相关《实验二 数码管显示Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

实验二 数码管显示Word下载.docx

对数字万用表来说,红色表笔连接表内部电池正极,黑色表笔连接表内部电池负极,当把数字万用表置于二极管档时,其两表笔间开路电压约为1.5V,把两表笔正确加在发光二极管两端时,可以点亮发光二极管。

如下图所示,将数字万用表置于二极管挡,红表笔接在①脚,然后用黑表笔去接触其他各引脚,假设只有当接触到⑨脚时,数码管的a段发光,而接触其余引脚时则不发光。

由此可知,被测数码管为共阴极结构类型,⑨脚是公共阴极,①脚则是数码管的a段.接下来再检测各段引脚,仍使用数字万用表二极管档,将黑表笔固定接在⑨脚,用红表笔依次接触②、③、④、⑤、⑥、⑦、⑧、⑩引脚时,数码管的其他段先后分别发光,据此便可绘出该数码管的内部结构和引脚排列图。

检测中,若被测数码管为共阳极类型,则需将红、黑表笔对调才能测出上述结果,在判别结构类型时,操作时要灵活掌握,反复试验,直到找出公共端为止,大家只要懂得了原理,检测出各个引脚便不在是问题了。

数码管静态显示

当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字必定一样,数码管的这种显示方法叫做静态显示。

从电路图可以看出,本开发板使用的是共阴极数码管,在每段数码管端加上一个限流电阻。

C程序:

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

*实验名:

静态数码管实验

*使用的IO:

数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3

*实验效果:

按下K1键,显示0,按下K2键,显示9,按下K3键,显示减1,按下K4键,

*显示加1。

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

#include<

reg51.h>

intrins.h>

#defineGPIO_DIGP0

sbitLSA=P2^2;

sbitLSB=P2^3;

sbitLSC=P2^4;

sbitK1=P3^1;

sbitK2=P3^0;

sbitK3=P3^2;

sbitK4=P3^3;

unsignedcharcodeDIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//显示0~9的值

voidDelay10ms();

//延时10ms

*函数名:

main

*函数功能:

主函数

*输入:

*输出:

voidmain(void)

{

unsignedinti,j;

LSA=0;

LSB=0;

LSC=0;

while

(1)

{

if(K1==0)//检测按键K1是否按下

{

Delay10ms();

//消除抖动

if(K1==0)

{

j=0;

}

while((i<

50)&

&

(K1==0))//检测按键是否松开

Delay10ms();

i++;

}

i=0;

}

if(K2==0)//检测按键K2是否按下

if(K2==0)

j=9;

(K2==0))

}

if(K3==0)//检测按键K3是否按下

if(K3==0)

j--;

if(j>

9)

j=9;

(K3==0))

}

if(K4==0)//检测按键K4是否按下

if(K4==0)

j++;

j=0;

}

(K4==0))

GPIO_DIG=DIG_CODE[j];

}

}

Delay10ms

延时函数,延时10ms

voidDelay10ms(void)//误差0us

unsignedchara,b,c;

for(c=1;

c>

0;

c--)

for(b=38;

b>

b--)

for(a=130;

a>

a--);

汇编程序:

ORG00H

LJMPINIT

ORG30H

DB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH

;

*************;

主程序;

INIT:

CLRP2.2

CLRP2.3

CLRP2.4

MOVR1,#00H

START:

MOVA,R1

MOVDPTR,#30H

MOVCA,@A+DPTR

MAIN:

MOVP3,#0FFH

MOVP0,A

JNBP3.1,K1

JNBP3.0,K2

JNBP3.2,K3

JNBP3.3,K4

SJMPMAIN

*************************;

K1按键按下处理程序;

K1:

ACALLDELAY10MS;

延时消抖

JBP3.1,MAIN

MOVR1,00H

MOVR2,#030H

KEY1_UP:

ACALLDELAY10MS

DJNZR2,KEY1_UP;

按键延时

LJMPSTART

K2按键按下处理程序;

K2:

ACALLDELAY10MS

JBP3.0,MAIN

MOVR1,#09H

KEY2_UP:

DJNZR2,KEY2_UP

K3按键按下处理程序;

K3:

JBP3.2,MAIN

DECR1

KEY3_UP:

DJNZR2,KEY3_UP

CJNER1,#0FFH,KEY3

KEY3:

K4按键按下处理程序;

K4:

JBP3.3,MAIN

INCR1

KEY4_UP:

DJNZR2,KEY4_UP

CJNER1,#00AH,KEY4

KEY4:

延时程序;

DELAY10MS:

MOVR6,#015H

DE1:

MOVR7,#0F8H

DE2:

DJNZR7,DE2

DJNZR6,DE1

RET

END

动态数码管

1.动态扫描的原理

在实际的单片机系统中,往往需要多位显示。

动态显示是一种最常见的多位显示方法,应用非常广泛。

所有数码管段选都连接在一起的时候,怎么让数码管显示不一样的数字呢?

动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。

首先我们来看一下开发板上的电路原理图:

本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。

*实验名:

动态显示数码管实验

数码管使用P0,P2.2,P2.3,P2.4

数码管显示76543210。

*注意:

unsignedcharcodeDIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsignedcharDisplayData[8];

//用来存放要显示的8位数的值

voidDigDisplay();

//动态显示函数

unsignedchari;

for(i=0;

i<

8;

i++)

DisplayData[i]=DIG_CODE[i];

}

DigDisplay();

DigDisplay

使用数码管显示

voidDigDisplay()

unsignedintj;

switch(i)//位选,选择点亮的数码管,

case(0):

LSA=0;

LSB=0;

LSC=0;

break;

//显示第0位

case

(1):

LSA=1;

//显示第1位

case

(2):

LSB=1;

//显示第2位

case(3):

//显示第3位

case(4):

LSC=1;

//显示第4位

case(5):

//显示第5位

case(6):

//显示第6位

case(7):

//显示第7位

GPIO_DIG=DisplayData[i];

//发送段码

j=10;

//扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;

//消隐

在用C语言编程时,编码定义方法如下:

unsignedcharcodeDIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

编码定义方法与C语言中的数组定义方法非常相似,不同的地方就是在数组类型后面多了一个code关键字,code即表示编码的意思。

需要注意的是,单片机C语言中定义数组时是占用内存空间的,而定义编码时是直接分配到程序空间中,编译后编码占用的是程序存储空间,而非内存空间。

LJMPINIT

DB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071H

;

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

DAT0EQU30H;

要显示的八位数

DAT1EQU31H

DAT2EQU32H

DAT3EQU33H

DAT4EQU34H

DAT5EQU35H

DAT6EQU36H

DAT7EQU37H

LSAEQUP2.2

LSBEQUP2.3

LSCEQUP2.4

GPIO_DIGEQUP0

MOVDAT0,#03FH

MOVDAT1,#006H

MOVDAT2,#05BH

MOVDAT3,#04FH

MOVDAT4,#066H

MOVDAT5,#06DH

MOVDAT6,#07DH

MOVDAT7,#007H

CLRLSA;

显示第一位

CLRLSB

CLRLSC

MOVGPIO_DIG,DAT0

ACALLDELAY;

显示持续时间

MOVGPIO_DIG,#000H;

消隐

SETBLSA;

显示第二位

CLRLSC

MOVGPIO_DIG,DAT1

ACALLDELAY;

MOVGPIO_DIG,#000H

显示第三位

SETBLSB

MOVGPIO_DIG,DAT2

MOVGPIO_DIG,#00H

显示第四位

MOVGPIO_DIG,DAT3

MOVGPIO_DIG,#00H

显示第五位

SETBLSC

MOVGPIO_DIG,DAT4

MOVGPIO_DIG,#00H

显示第六位

SETBLSC

MOVGPIO_DIG,DAT5

显示第七位

MOVGPIO_DIG,DAT6

MOVGPIO_DIG,DAT7

LJMPMAIN

DELAY:

MOVR7,#0FFH

DJNZR7,$

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

当前位置:首页 > 医药卫生 > 药学

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

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