#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编译不了的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)