第一范文网 - 专业文章范例文档资料分享平台

51单片机实现数码管99秒倒计时

来源:用户分享 时间:2025/9/27 13:05:56 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。

目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。

定时器定时时间计算公式:初值X=M(最大计时)-计数值。

初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。

M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S

计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。

下面为实现99秒倒计时C语言源程序

/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/

/*数码管,12M晶振*/ #include

#define uchar unsigned char

sbit p11=P1^1; //连的是继电器。。

code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shiwei; uchar gewei;

void delay(unsigned int cnt) {

while(--cnt); }

void main() {

TMOD|=0x01; /*定时器0 16位定时器 X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms */

TH0=0xd8; TL0=0xf0;

IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时

TR0=1; //开定时器0

while(1) {

P0=shiwei; //99的十位 P2=0; //99的个位, delay(300); //动态扫描数码管延时 P0=gewei; P2=1;

delay(300); } }

void tim(void) interrupt 1 using 1 //定时器0中断 {

static uchar second=99,count; //99只是一个数,可以任意改,因为这里只学习怎样实现倒计时

TH0=0xd8; //定时10毫秒 TL0=0xf0; count++;

if(count==100) //10毫秒定时,10*100=1000(毫秒)=1秒 {

count=0; second--; if(second==0) {

p11=0; //这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。

second=99; //回到99再循环来,当然,可以做其他的控制, }

shiwei=tab[second/10]; //数码管10位 gewei=tab[second]; //数码管个位 } }

搜索更多关于: 51单片机实现数码管99秒倒计时 的文档
51单片机实现数码管99秒倒计时.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c30oa540ul56rgfk162co_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top