⑴ 单片机60秒倒计时程序怎么写啊!!!这个图的!!!急用啊!!!!
/*代码你可以参考一下,晶振按11.059200MHz写的。
提示一下,按你这仿真是不能做实物的,要加上限流电阻*/
#include"reg52.h"
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管段选
voidmain()
{
TMOD=0x01;
TH0=0xFC;
TL0=0x66;
EA=1;
ET0=1;
TR0=1;
while(1);
}
voidTimer0Interrupt(void)interrupt1
{
staticunsignedinti=0;
staticchartime=60;
TH0=0xFC;
TL0=0x66;
P3=table[time%10];
P2=table[time/10];
i++;
if(i>=1000)
{
i=0;
time--;
if(time<0)
{
time=60;
}
}
}
⑵ 单片机 60秒倒计时
我是用汇编语言做的,如果显示的速度不理想 你改下延时程序段的数值就OK了,课堂上这个60S倒计时的课题用了很多方法做过
ORG 0000H
LJMP START
ORG 0100H
START:MOV R0, #59
MOV DPTR, #TABLE
LOOP:LCALL DISPLAY
DEC R0
CJNE R0,#0,LOOP
JMP START
DISPLAY:MOV A, R0
MOV B, #10
DIV AB
MOV R1, A
MOV R2, B
MOV R3, #50
LOOP1:MOV A, R2
LCALL CHANG
CLR P2.6
LCALL DLY10MS
SETB P2.6
MOV A, R1
LCALL CHANG
CLR P2.7
LCALL DLY10MS
SETB P2.7
DJNZ R3, LOOP1
RET
CHANG:MOVC A, @A+DPTR
MOV P0, A
RET
DLY10MS:MOV R6, #256
D1:MOV R7, #256
NOP
NOP
NOP
NOP
DJNZ R7, $
DJNZ R6, D1
RET
TABLE:DB 28H,7EH,0A4H,64H,72H,61H,21H,7CH,20H,60H
END
⑶ 单片机六十秒倒计时程序
;数码管段选接P2口,位选接P3.0和P3.1,
;采用定时器T0定时10ms,60H为1s计数单元,计数100次为1sORG 0000H ;程序从0地址开始
LJMP MAIN ;跳到MAIN处执行
ORG 000BH ;定时器T0
LJMP TIME0
ORG 0030H
MAIN:MOV TMOD,#01H ;设置T0工作在模式1
MOV TH0,#0D8H ;赋初值,定时10ms
MOV TL0,#0F0H
MOV IE,#82H ;开CPU中断,开定时器0中断
MOV R3,#60
SETB TR0 ;启动T0定时器工作
MOV 60H,#100 ;给60H单元赋初值
CLR 4FH ;清零4FH单元
DISPLAY: ;显示子程序
MOV DPTR,#TAB ;DPTR指向编码表位置
MOV A,R3 ;将R3的内容复制到A
MOV B,#10
DIV AB ;A除B,商给A,余数给B
MOVC A,@A+DPTR ;根据A的值取出编码表中的编码
MOV P2,A ;由P1口输出A的内容
CLR P3.0 ;清零P2.0
SETB P3.0 ;置位P2.0 MOV A,B
MOVC A,@A+DPTR ;根据A的值取出编码表中的编码
MOV P2,A ;由P1口输出A的内容
CLR P3.1 ;清零P2.1
SETB P3.1 ;置位P2.1
JNB 4FH,DISPLAY ;判断1秒时间是否到,没有到,则跳转到DIAPLAY处
CLR 4FH ;1秒到,清4FH
LJMP DISPLAY ;调用显示子程序 TIME0:MOV TH0,#0D8H ;赋初值
MOV TL0,#0F0H
DJNZ 60H,TT ;60H单元自减1,判断是否为0,不为0则跳转到TT处
MOV 60H,#100 ;60H单元为0,则重新给其赋值100
SETB 4FH ;同时置位4FH单元
DEC R3 ;R3自加1
CJNE R3,#00H,TT ;判断R3是否为0,否则跳转TT处
CLR TR0
TT:RETI
TAB: ;编码表
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴
END ;程序结束
⑷ 如何用单片机做一个简单的倒计时器
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 <reg52.h>
#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%10]; //数码管个位
}