51单片机 编写4个LED数码管同时循环显示0—9的数字 的程序。

51单片机 编写4个LED数码管同时循环显示0—9的数字 的程序。,第1张

#include<reg51.h>

#define uchar unsigned char

uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}//0-9

uchar time,scanled,tiao

uchar disdat[6]="201803"

void delay(unsigned int x)

{

unsigned int i,j

for(i=0i<xi++)

for(j=0j<120j++)

}

void t0isr() interrupt 1 //秒计时

{

TH0=0x3c

TL0=0xb0

time++

if(time==20)

{

time=0

tiao++

tiao%=10

}

}

void t1isr() interrupt 3 //显示

{

TH1=0xec

TL1=0x78

P2=1<<scanled

P0=~ledtab[tiao]

scanled++

scanled%=4

}

main()

{

TMOD=0x11

TH0=0x3c

TL0=0xb0

TH1=0xec

TL1=0x78

TR1=1

TR0=1

ET0=1

ET1=1

EA=1

while(1)

}

可以用仿真图来实现,用两位共阳数码管,分别接在P0,P2口,组成两位静态显示电路。先做加法计数,计数到99,自动改为减法计数,计数到0,再变为加法计数。由此循环。

仿真图

程序如下

#include<reg51.h>

unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}

void delay()

{

unsigned int j

for(j=20000j>0j--)//修改j 的初值,可改变计数的速度

}

void main()

{

char n,x=1//先加法计数

while(1)

{

P0=tab[n/10]//显示十位

P2=tab[n%10]//显示个位

delay()

n+=x

if(n>=99)

x=-1//减法计数

if(n==0)

x=1//加法计数

}

}

动态显示的是有固定格式的,赋值,开显示,延时,关显示,假设p0口接数据显示位,p2口低4位接片选,

p2=tab[1]

//赋值

p3_0=0

//开第一位显示

for(i=0i<200:i++)//延时

p3_0=1

//关第一位显示

p2=tab[2]

p3_1=0

//开第二位显示

for(i=0i<200:i++)

p3_1=1

这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存