51里用一个2ms定时器扫描数码管电子钟和键盘,用另一个50ms定时器进行1s几时做的电子钟,为什么运行

51单片机使用定时器进行数码管动态扫描程序及Proteus仿真实例 - 下载频道
- CSDN.NET
&&&&51单片机使用定时器进行数码管动态扫描程序及Proteus仿真实例
51单片机使用定时器进行数码管动态扫描程序及Proteus仿真实例
51单片机使用定时器进行数码管动态扫描程序及Proteus仿真实例
http://blog.csdn.net/jzj1993/article/details/8572476
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行单片机实现对按键的定时扫描 哪位高手能帮忙把下面按键扫描程序改成用定时器对按键进行定时扫描啊,我用的_百度知道
单片机实现对按键的定时扫描 哪位高手能帮忙把下面按键扫描程序改成用定时器对按键进行定时扫描啊,我用的
key0=lie: key3(),赋值后P3的值为;对键值赋值
case 0xde:
case 0判断键值(那一个键按下) { case 0x7d;/*键盘扫描*&#47!=0xf0){delay();temp=P1: key6();key=hang+lie=P1;/ //
case 0void judge(void){P1=0xf0;
default我用的是51单片机&#47: key5(): key2();假设第二行第三列按下{lie=P1; //if(while( /
case 0x7e;if(
case 0xbe: key4()!=0xf0) /&#47!=0xf0) / break: key1(),因为第二行被按下为低电平hang=P1&0x0f;/等待按键松开{temp=P1; //
case P1=key0|0x0f; / 实际上按键还没断开的话;lie=lie&0xf0; break: key7(): key8();/
switch ( key ) &#47
提问者采纳
P1=0xf0!=LastKey))
&#47,也可稍微改动下完成,此处取掉、不满足抖动条件;(200/
static unsigned char LastKey=0;// P1=key|0xf。
if((key==LastKey)&&(dd&lt。【个人认为;
TL0=(-50000)&0
LastKey=0。如果需要连续处理;/新键按下
{LastKey=key、直接把你编写的这部分程序拷到中断服务中,dd=0;void ISRForT0(void) interrupt 1{
unsigned char key办法1。在main主程序中分支语句处理CurrentK
P1=key|0&#47.
dd=0,欢迎砸砖】unsigned char CurrentKey,50为实际定时时间。办法2;/
if((键值CurrentK8、针对你的设计,但解决的不够完美;/
&#47。楼上兄弟意识到这个问题;}
/2;保存新的按键;键松开处理
&#47。通过判断按键次数来去抖;
&#47,注意变量的声明、假设200mS抖动;50)) &#47。风险是按住键不松开的话,我的比较精炼点;无需延时;&#47。
CurrentKey=LastKey,注意其他位置不好调用keyi()和delay()了;1;&
TH0=(-50000)&gt,我写了个50mS中断扫描做的行反转读键;&#47,退出时预置,你调调看,松开时处理;&#47,会影响中断的时间;简单延时
if(key==0xff)
/ P1=key|0/&#47,处理完后清零即可;100))
key=P1; P1=key|0xf!=0xff)&&(key
其他类似问题
为您推荐:
您可能关注的推广
定时器的相关知识
其他2条回答
/ ///若键扫描执行时间太长则不适用直接调用;/* if(keyboard_mark)
{ judge();void main (){
system_set(); /端口初始化
time_init(); }void time_0(void) interrupt 1{
TH0=(65536-t)&#47以TR0为例void time_init(void){
TMOD=0x11;
judge();/定时器初始化
TH0=(65536-t)//键扫描/time ms
TL0=(65536-t)%256;//
EA=1;}*&#47,加入扫描指针}bit keyboard_/256;键扫描
keyboard_mark=1;///time ms
TL0=(65536-t)%256;keyboard_mark=1;
ET0=1;//256
楼主的那个程序我看不太懂:不过根据你的大概意思更改了一下程序,希望对你有帮助!下面是我的程序代码:/*********************************************************************&文件名&&:&矩阵键盘.c*&描述&&&&:&&该文件实现了&4&*&4&键盘的试验。通过数码管的最后一位来显示
&当前的按键值。*********************************************************************/#include&reg51.h&#include&intrins.h&#define&uint&unsigned&int#define&uchar&unsigned&charuchar&code&table[16]&=&{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};&//用于数码管显示&本程序未用uchar&K&&//读出的键值/*********************************************************************&名称&:&Delay_1ms()*&功能&:&延时子程序,延时时间为&1ms&*&x*&输入&:&x&(延时一毫秒的个数)*&输出&:&无***********************************************************************/void&Delay_1ms(uint&i)//1ms延时{ uchar&x,j; for(j=0;j&i;j++) for(x=0;x&=148;x++); }/*********************************************************************&名称&:&delay()*&功能&:&延时,延时时间大概为140US。*&输入&:&无*&输出&:&无***********************************************************************/void&delay(){ int&i,j; for(i=0;&i&=10;&i++) for(j=0;&j&=2;&j++);}/*********************************************************************&名称&:&Keyscan()*&功能&:&实现按键的读取。下面这个子程序是按处理&矩阵键盘&的基本方法处理的。*&输入&:&无*&输出&:&按键值***********************************************************************/uchar&Keyscan(void){ uchar&i,j,&temp,&Buffer[4]&=&{0xef,&0xdf,&0xbf,&0x7f}; for(j=0;&j&4;&j++) {
P1&=&Buffer[j];
temp&=&0x01;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
for(i=0;&i&4;&i++)
if(!(P1&&&temp))&
return&(i+j*4);
&&//这里返回的是按键牌排列值!
temp&&&=&1;
}}/*********************************************************************&名称&:&InitTimer0()*&功能&:&用于定时器初始化。*&输入&:&无*&输出&:&***********************************************************************/unsigned&int&Timer_1s=0;//定时器中断响应次数变量//定时时间长度=定时中断响应时间*定时中断响应次数void&InitTimer0(){//&&&&AUXR=0x80; &//定时时钟为Sysclk,即晶振时钟&实用于具有单时钟周期的单片机系列 //特别的还需要注意时钟设置在其它模块中的设置,如波特率的定时器1时钟设置 TMOD&=&0x21;&//定时器0工作于方式1,,16位定时,定时器1为波特率发生器 //特别地,高四位控制定时器1,低四位控制定时器0, //所以此处需要注意程序中是否并存定时器1工作,如串口就需要定时1的设置为TMOD=0x20&&&&&&&&TH0&=&0x0B8; //定时装如初值 &&//定时1000us&即1ms&&&&TL0&=&0x00;
//定时其它值可由需要重新计算初值&&&&ET0&=&1;
//允许中断&&&&TR0&=&1;
//启动定时器}/*********************************************************************&名称&:&Timer0Interrupt()interrupt&1*&功能&:&定时器中断。*&输入&:&无*&输出&:&***********************************************************************/void&Timer0Interrupt()&interrupt&1{&&&&TR0&=&0;
//关闭定时器 TH0&=&0x0B8; //重装初值&&&&TL0&=&0x00;&&&&Timer_1s++;
//中断响应次数自加1 if(Timer_1s=20) //可以在此处调节按键的扫描时间 {
/*一下是扫描按键并带返回值的结果*/
P1&=&0xf0;
if(P1&!=&0xf0)
Delay_1ms(15); //按键消抖
if(P1&!=&0xf0)
Key&=&Keyscan();
} TR0&=&1;
//启动定时器 }/*********************************************************************&名称&:&Main()*&功能&:&主函数*&输入&:&无*&输出&:&无***********************************************************************/void&Main(void){&&&&&&&&&&&&&&&&InitTimer0();//初始化定时器&&&&&&&&&EA&=1;&&&&&&&//开中断 while(1) {
switch&(Key)&//判断键值(那一个键按下)
case&0:&/*加入需要执行该按键下的程序*/;&&&//假设0号按键被按下
case&1:&/*加入需要执行该按键下的程序*/;&&
case&2:&/*加入需要执行该按键下的程序*/;&&
case&3:&/*加入需要执行该按键下的程序*/;&&
case&4:&/*加入需要执行该按键下的程序*/;&&
case&5:&/*加入需要执行该按键下的程序*/;&&
case&6:&/*加入需要执行该按键下的程序*/;&&
case&7:&/*加入需要执行该按键下的程序*/;&&
case&8:&/*加入需要执行该按键下的程序*/;&&
case&9:&/*加入需要执行该按键下的程序*/;&&
case&10:&/*加入需要执行该按键下的程序*/;&&
case&11:&/*加入需要执行该按键下的程序*/;&&
case&12:&/*加入需要执行该按键下的程序*/;&&
case&13:&/*加入需要执行该按键下的程序*/;&&
case&14:&/*加入需要执行该按键下的程序*/;&&
case&15:&/*加入需要执行该按键下的程序*/;&&
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁热门版块:
助理工程师
用定时器中断实现数码管的动态扫描!
/*==========================================================
* 开发人员:laowang
* 当前版本:V1.0
* 创建时间:11/21/2013
* 修改时间:
* 功能说明:用定时器中断实现数码管的动态扫描,大家可以对比用普通的delay()函数来实现动态扫描有什么区别
*==========================================================*/
#include &reg52.h& //52[color=rgb(68, 68, 68) !important]头文件
sbit dula = P3^4;& & & & //段选
sbit wela = P3^5;& & & & //位选
unsigned char num1;& & & & //定义一个变量,用来对定时器中断进行计数
unsigned char code table1[]=& & & & //数码管(共阴)的段选编码,范围是0-F
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
unsigned char code table2[]=& & & & //数码管的位选编码,范围是1-8
0xfe,0xfd,0xfb,0xf7,& & & & //例如,0xfe= 点亮第一个数码管
0xef,0xdf,0xbf,0x7f
/*==========================================================& &
*函数名称:Init()
*功& & 能:对定时器进行初始化
*入口参数:
*出口参数:
*说& & 明:定时器0,工作方式为1
*==========================================================*/
void Init()
& & TMOD = 0x01; //& & & & 定时器工作方式为1
& & TH0 = ;& & & && &//赋初值,此处设定的中断时间为2ms,()/256
& & TL0 = ;
& & EA = 1;& & & & //开总中断
& & ET0 = 1;& & & & //打开定时器0中断
& & TR0 = 1;& & & && &//开启定时器
void main()
{& & & &&&
Init();& & & && & //初始化
while(1);& & & && &//程序一直在空循环,如果有中断发生,则去执行中断(进行数码管显示),
//平时执行空循环
/*==========================================================& &
*函数名称:Timer0()
*功& & 能:定时器中断服务内容
*入口参数:
*出口参数:
*说& & 明:
*==========================================================*/
void Timer0() interrupt 1&&& & & & //中断序号为1
TH0 = ;& & & & //每次中断发生后,先进行赋初值
& & TL0 = ;
//以下部分为数码管的显示部分
P1=table1[num1+1];& & & & //段选信号,将这一语句放在前面有消影的作用
P1=table2[num1];& & & & //位选信号
num1++;& & & && &//对定时器的中断进行计数,每中断一次,数码管更换一次内容
if(num1==8)& & & &&&
模块化思想,中断可以降低功耗.
这种思路可以。
助理工程师
{:1:}{:1:}{:1:}{:1:}{:1:}{:1:}{:1:}
我也在写这个,可是,仿真不通过,扫描信号函数有问题,数码管不能同时点亮
我也在写这个,可是,仿真不通过,扫描信号函数有问题,数码管不能同时点亮
看看楼主分享了这么多的资料,果断的顶起!!!
这个程序短了很多
但是占用了一个定时器
站长推荐 /5
既是硬件小鲜肉,又是创业实力派,2015中国硬件创新大赛深圳赛区决赛火力全开!优秀硬件项目激情路演,行业大牛精锐点评,最强PK,谁主沉浮?这场盛会,邀您共赏,报名>>
/baoming_sz/?referer=zhanzhangtuijian
Powered by51单片机同时使用两个计时器的问题-中国学网-中国IT综合门户网站
> 51单片机同时使用两个计时器的问题
51单片机同时使用两个计时器的问题
转载 编辑:李强
为了帮助网友解决“51单片机同时使用两个计时器的问题”相关的问题,中国学网通过互联网对“51单片机同时使用两个计时器的问题”相关的解决方案进行了整理,用户详细问题包括:8位数码管显示后4位)无法正常扫描;void display( ET0=1,0xbf,0x7d; TH0=()&#47,0 TR1=1; TL1=()%256; EA=1; if(num&gt,0x07;uchar code POSITION[]={0 DATAPORT=TEMP[i],0x7f;256;1000]; weima=1; while(1) { TEMP[0]=NUMBER[num/ TEMP[2]=NUMBER[num&#47,0x6f};sbit weima=P2^3,0x7f}?#include& num++,0 weima=0;100%10];sbit duanma=P2^2,0xf7; DATAPORT=POSITION[i+first];uint num,0 DATAPORT=0 TL1=()%256;reg52; ET1=1,请问该如何修改; weima=0; duanma=1;256,0
} }void TIMER0() interrupt 1{ TH1=()/ if(i==total) i=0; weima=1; }void TIMER_ini(){ TMOD |=0x11; i++;256; TEMP[1]=NUMBER[num/ TEMP[3]=NUMBER[num%10]。以下面程序为例;9999) num=0,4); TH1=()/ TR0=1,0x4f;10%10],0x06; duanma=0; TL1=()%256; display(4,0x5b,下面程序结果数码管(从0开始自加;256,0x66;uchar TEMP[4].h& }void TIMER1() interrupt 3{ TH1=()/#define uchar unsigned char#define uint unsigned int#define DATAPORT P0uchar code NUMBER[]={0x3f; TL0=()%256,0x6d,uchar total){ }void main(){ TIMER_ini()遇到的问题是两个内部计时器同时使用会造成数码管无法正常扫描,具体解决方案如下:解决方案1:同时用两个中断肯定会冲突定时器1完全可以不用,主程序只管显示就行,定时器0中断程序中更新计时数值还可以尝试在定时器0的中断程序里关闭定时器1,交且将定时器0的中断优先级设高解决方案2:不是,这个程序只是方便演示,其实是我在做超声波测距的时候遇到这个问题。请问用两个中断如何避免冲突呢?做数字钟的时候也遇到过这个问题。解决方案3:如果在定时器1的中断程序中关闭定时器0,会造成计时不准扫描数码管,快一点慢一点都无所谓,不必用定时器1,并且中断函数尽量简短我在红外线发射时用两个定时器时,一个是定时器0长定时MS级,另一个是定时器1短定时13US 短定时自动重装,只执行程序一个语句,使红外发射管电平翻转 长定时中断也就一个话句,将一个标志置1 其余的都交给主程序作总之是利用长定时控制短定时在某段时间内允许定时器1和红外管工作,另一段时间不允许允许定时1和红外管工作象你的定时器1的程序不是太长的话,可以夹在定时器0中断程序中,长的话加在主程序中void TIMER0() interrupt 1{ TH1=()/256; TL1=()%256;a++;if(a==25) { num++; a=0;} if(num&9999) num=0;display(4,4) }中断程序里干这么多事,也不会超2ms(或4ms),主程序还有时间来分离num最好还是将显示函数放在主程序中解决方案4:谢谢!解决方案5:你现在的程序可以正常扫描显示的呀,就会有闪烁的;100%10],你的主程序中有计算四位数的程序 TEMP[0]=NUMBER[num/ while(1) { TEMP[0]=NUMBER[num/TEMP[1]=NUMBER[num&#47,就是有点闪烁的效果,就在主程序中调用显示子函数就很好的; TEMP[2]=NUMBER[num/ 这是很费时的。最后就一句?这样改,这个时间足够显示一位的延时了,中断一次显示一次;TEMP[3]=NUMBER[num%10]; TEMP[1]=NUMBER[num&#47。这样void main(){ TIMER_ini();1000],运行速度肯定比实物要慢;10%10],所以,4); display(4;1000]。其实; TEMP[3]=NUMBER[num%10],还是就是计数,那计数是很快了。但不知道,所以,何必还定时扫描呢,是每秒计一个数吗,要关掉定时器T1的中断,这可是仿真,数码管显示要用定时器定时,这是和谁学习的;10%10];100%10]; }}问题就解决了;TEMP[2]=NUMBER[num&#47解决方案6:谢谢,我的主要问题是数码管有闪烁。但请问一下同时用两个中断的话能否做到互不影响?这个问题是我在写超声波测距显示在数码管上的程序时碰到的,需要同时用两个中断,一个做计数器用来算时间一个做定时器用来扫描数码管。解决方案7:为什么非要“一个做定时器用来扫描数码管”呢?单片机的中断源不要做那些无关紧要的事情。数码管扫描放在主程序就能搞定的事,就不要用中断。当多个中断源,特别是扫描数码管的中断,因定时时间短,中断频繁,是会耗费单片机的时间的,各中断就会有影响的,得不偿失了。中断源互相影响这是克服不了的。如果是几个中断源都是必须的,可以分成不同优先级的。中断源多了,并不是一件好事。因单片机的运行速度毕竟是有限的,不能同电脑相比的。当然这里还有一个事实,就是用仿真来调试程序,因运行速度慢,运行的结果会与实物有很大区别的。如果你有实物板,或者就是为实际产品设计的程序,就不要用仿真来调试程序,就直接在实物上调试程序。就是算是在仿真里调试好了,但到了实物上运行结果还是不同的。所以,仿真调试程序等于走了弯路。就你上面的程序,放在实物上运行,应该是可以,效果肯定是不同的,不然你就试试,上实物板上运行一下看看。解决方案8:可以任意控制8位数码管亮几个,44即第5678个亮,08即全亮,02即前两个亮。数码管不是重点,主要是两个计时器同时工作导致我数码管无法正常扫描通过对数据库的索引,我们还为您准备了:问:遇到的问题是两个内部计时器同时使用会造成数码管无法正常扫描。 以下面...答:同时用两个中断肯定会冲突 定时器1完全可以不用,主程序只管显示就行,定时器0中断程序中更新计时数值 还可以尝试在定时器0的中断程序里关闭定时器1,交且将定时器0的中断优先级设高===========================================问:51单片机定时器TMOD寄存器中选择工作方式时TMOD后加0x是什么意思 比如TM...答:0x是16进制数的前缀。0x01的意思是后面的01是一个16进制数字,换算成二进制就是。意思就对TMOD寄存器依次赋值为。因为TMOD的每一位都是针对于定时器的设置,所以这句话的意思就是设置定时器1工作在方式0,而定时器0工作在方式1。===========================================问:小弟初学51昨天自己写了一个程序,功能:定时器1控制第一个LED灯灭1秒,...答:#include #define uchar unsigned char void init(); uchar aa, sbit D1=P1^0; void main() { init(); while(1) { D1=1; TR0=1; if(aa==20) aa=0; TR0=0; D1=0; TR1=1; if(bb==40) bb=0; TR1=0; } } void init() { aa=0; bb=0; TMOD=0X11; TH...===========================================问:同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频...答:是的,EA是用来开总中断的,如果EA=0则所有可用中断都无用。EA相当于使能信号。必须EA=1时中断才被打开。具体开那个还得看具体中断的使能信号,如定时的TR0,TR1信号。===========================================问:同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频...答:使用定时器首先要设置定时器的工作方式,在TMOD这个特殊寄存器设置,再设置初值,定多长时间,最后开定时器中断===========================================问:#include&reg52.h& //52单片机头文件 #include &intrins.h& //包含有左...答:如果同时中断的话,一定是T0先响应。===========================================问:#include&reg52.h& //52单片机头文件 #include &intrins.h& //包含有左...答:优先级高的能打断优先级低的,就是低优先级的正在执行的时候,优先级高的来了低的就会被打断。执行完高的 再来执行低的,存入65536,中断会出问题的。===========================================问:急!急!急!执行下列程序时,用KEIL调试时,总是不能进入定时器中断0 ...答:void timer0() interrupt 2 这是外部中断1的服务程序, 应该改为 void timer0() interrupt 1 才是T0中断的入口===========================================问:51单片机同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控...答:至少已经发现两个问题: 1,通过程序可以看出,Timer0的中断周期比Timer1的中断周期长,那么定时器0控制频率,定时器1控制这个频率持续的时间的说法可能有误; 2,uchar b,a,c;中的“b”最大值不会超过255,那么b=temp[c]能行吗?当c = 0时,temp[...===========================================这两个计时器是相互独立运行的.这里涉及一个中断嵌套的问题,普通的51只有两组中断优先级,高一级的中断可以中断低优生级的.但低的不能中断高的.&你用定时器1来产...===========================================器! void init_uart() void { TMOD = 0x20; //定时器T1使用工作方式2 TH1 = 253; // 设置初值 TL1 = 253; TR1 = 1; // 开始计时 SCON = 0x5...===========================================这个问题不难!51单片机中断源总共有5个,即2个外部中断、2个定时/计数器中断、1个串行口中断。 没有时钟中断,你说的时钟中断是指定时器中断吧。 中断优先级的设定主要...===========================================两个定时器使用没有什么特殊设置,但是有一个经验你必须明白,中断里面重新对定时器赋值的操作必须放在中断处理的头端,否则会有一个整个中断处理的时间延时。如: void ti...=========================================== 可以,3个都可以的。===========================================那是因为你的定时器设置有问题.===========================================TMOD是管理定时器T0和T1的不是T1和T2的。 高四位是T1第四位是T0 左起第二位管定时或计数,0是定时1是计数,然后后两位依旧是模式。===========================================在定时器中断中通过设定flag标志位来触发事件,具体的事件的具体执行在中断外执行-------也就是在中断里只置位或清事件的标志位,中断里的程序执行时间尽可能小,越小两个定...=========================================== T0的中断程序执行完之后,若没有比T1的中断更高的中断,则执行T1的中断程序,因为,若不人为的清除T1中断标志位TF1,不执行中断程序,硬件不会清除TF1位 谢谢,希望对你有...===========================================定时器有高八位和低八位,用十六进制数为其高八位和低八位赋值也是可以的。当加到溢出时进入中断。说得明白点就是一样的,0xfe不是等于二进制数吗?把它换算一...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注基于单片机控制的专用定时器 定时时间1、1s~99s可调,2、1min ~99min可调3、所有时间数字均可调。_百度知道
基于单片机控制的专用定时器 定时时间1、1s~99s可调,2、1min ~99min可调3、所有时间数字均可调。
1、定器实现三间显示每间初值都改变2、用单片机定器计数功能单片机断使用及LED显示等技术
属于基本问题定器初始化设定count变量选择定器工作于式1装初值装65ms左右设置50ms引起断断20概1s写显示程序断计满1s秒变量加1秒计满60.钟变量++类推再写按键编码程序main函数始终检测键盘扫描程序
您给的C语言的编程,可我们要用单片机语言编,您能再给个单片机编的程序吗??谢谢!!
其他类似问题
为您推荐:
其他2条回答
#include&reg51.h&
#include &intrins.h&
//_nop_();延时函数用
unsigned char
unsigned int
//段码输出口
//LED小数点控制
sbit sperk=P2^6; //蜂鸣器
sbit key=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/* 共阳LED段码表
&9& &不亮& &-& */
uchar data
dis_buff[6]={1,2,0,0,0,0};
//待显示单元数据,共6个数据
uchar data
t10ms=0,ts=0,thour=12;
/*************...
用一个状态机来完成,比如:TimeFlag,默认它是0,责表示是1-99s范围内,那就可以实现秒可调,如果秒大于99,责TimeFlag=1,那表示在min可调,至于怎么衔接,你可以秒到120之后再到分,你自己看。中断定时器就判断TimeFlag和现在的时间就可以了。不明白找我
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 用定时器控制数码管 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信