一位数码管循环显示0到9实验程序

一位数码管循环显示0到9实验程序,第1张

具体程序如下:

#include <reg51.h>

#define uchar unsigned char

sbit P20=P2^0

void delay_ms(unsigned int ms) //1ms延时

{

uchar a

while(ms--)

for(a=123a>0a--)

}

uchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,

0x6D,0x7D,0x07,0x7F,0x6F}

void main()

{

while(1)

{ uchar b

P20=0

P0=tab[b]

delay_ms(1000)//1s延时

b++

if(b==10)

b=0

}

}

扩展资料:

数码管原理

数码管常用段数一般为7段有的另加一个小数点,还有一种数码管是类似于3位“+1”型。数码管位数有半位,1,2,3,4,5,6,8,10位等。数码管根据LED的接法不同分为共阴和共阳两类,了解数码管的这些特性,数码管对编程是很重要的。

因为不同类型的数码管,除了数码管的硬件电路有差异外,数码管编程方法也是不同的。数码管的发光原理是一样的,只是数码管的电源极性不同而已。

数码管颜色有红,绿,蓝,黄等几种。数码管广泛用于仪表,时钟,车站,家电等场合。选用数码管时要注意产品尺寸颜色,功耗,亮度,波长等。下面将介绍常用数码管内部引脚图片。

数码管引脚定义每一笔划都是对应数码管一个字母表示数码管DP是小数点。数码管透过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是数码管动态驱动。每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应。

尽管实际上各位数码管并非同时点亮LED数码管,但只要数码管扫描的速度足够快,数码管给人的印象就是一组稳定的显示资料,数码管不会有闪烁感,数码管动态显示的效果和静态显示是一样的,数码管能够节省大量的I/O口,而且数码管功耗更低。

一位数码管循环显示1-9的汇编程序

ORG

00H

:单片机启动地址

START:MOV

R2,#0

;要显示的第一个数为0

MOV

R5,#10

;要循环显示的次数10次

MAIN:

MOV

DPTR,#TAB

;显示编码表格首地址

MOV

A,R2

取要显示的数在R2种

MOVC

A,@A+DPTR

;查表

求要显示的数的编码

MOV

P3,A

;送P3口驱动7段数码管显示

INC

R2

;修改要显示的下一个数

LCALL

DELAY

调用延时子程序(稳定显示)

DJNZ

R5,MAIN

;循环显示次数减1

不等于0

继续显示

JMP

START

;从新转主程序

开始新一轮的显示

DELAY:MOV

R0,#5

;延时子程序

DELAY0:MOV

R7,#200

DELAY1:MOV

R6,#250

DJNZ

R6,$

DJNZ

R7,DELAY1

DJNZ

R0,DELAY0

RET

TAB:DB

DB

0C0H,

0F9H,

0A4H,0B0H,99H,92H,82H,0F8H,

DB

80H,

90H,;0~9的显示编码表格

END

;结束汇编、

#define u8 unsigned char

#define u16 unsigned int

u8 code table[] = {

    0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 

    0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e,

}

void delay(u16 t)

{

    u16 i

    for(t>0 t--)

        for(i=100 i>0 i--)

}

void main(void)

{

    u8 num = 0

    while(1) {

        P1 = table[num]

        delay(1000)

        num++

        if(num>9)

            num = 0

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11103793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存