在KEIL环境下的51编程LED两位数倒计时

在KEIL环境下的51编程LED两位数倒计时,第1张

#include<AT89X51.H>

unsigned char flag1=0

unsigned char counter=0

unsigned char first=0

unsigned char second=0

unsigned char code dptable[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}//段码表

main()

{

TMOD=0x10//定时首侍器T1,方式山芹族1

TH1=0xfa//晶振为3.6864MHz,每5ms进一次中逗弊断

TL1=0x00

TR1=1

ET1=1

EA=1

while(1)

{

P1_0=1//P1口为位选

P2=dptable[second]//P2口为段选

P1_0=0

while(flag1==0)//动态扫描,每个数码管亮5ms

flag1=0

P1_0=1

P2=dptable[first]

P1_1=0

while(flag1==0)

flag1=0

P1_1=1

}

}

void interT1() interrupt 3//5ms进一次中断

{

TH1=0xfa

TL1=0x00

flag1=1

counter++

if(counter==200)//定时至1s

{

counter=0

first--

if(first==255)

{

first=9

second--

}

if(second==255)

{

second=7

first=9

}

}

}

#include<reg52.h>

#define uchar unsigned char

#define duan P0 //共阴数码管的阳极端口

sbit wei1=P2^4 //共阴数码管的阳极端口,我的是四位的,下面语句中把1,2关了,只用到了3,4。

sbit wei2=P2^5

sbit wei3=P2^6

sbit wei4=P2^7

uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0~9的十六进制码

void delay(uchar xms)//软件延时

{

int i,j

for(i=xmsi>0i--)

for(j=125j>0j--)

}

void display(int tens,ones) //用来显示数字的函数,显示此时的十位,个亩尘位。

{

int i,j

for(i=2i>0i--)//通过改变i和j的值,可以改段掘变计时时间。

for(j=50j>0j--)

{

wei3=1//扫描原理。

wei4=0

duan=num[tens]

delay(5)

wei3=0

wei4=1

duan=num[ones]

delay(5)

}

}

void main()

{

int onesp=0,tensp=0//定义ones place和tens place。

wei1=0

wei2=0

while(1)

{

for(tensp=9tensp>=0tensp--)

{

for(onesp=9onesp>=0onesp--)

{

display(tensp,onesp)//调用函数握耐核显示此时的数字。

}

}

}

}

这个程序测试可用,从99计数到00。只用了比较简单知识,不涉及定时器和系统中断。不懂可以追问。

其实,这与keil 没什么关系,主要是取决于用什么语言写程序局罩,是汇编还是C语言,keil 不过是用来编译的软件。其次,既然是用数码管显示,就应该先画仿真图,或用实物开发板来显兆腊唯示,应该给开发板的原理图才好写程序。最先,至于倒计时就非常简单了,定义一个计时变量,作减法计数即可,每减一个数都送数族培码管显示出来。如下面仿真图,是两位倒计时的例子。


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

原文地址:https://54852.com/yw/12473814.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存