99秒倒計時課程設計
A. 99秒倒計時設計
什麽語言的?
B. 單片機99秒倒計時
用定時器,很簡單的,我這里有個程序你可以參考一下
#include "clock.h"
void delay(uint t)
{
uint i;
while(t--)
{
/* 對於12M時鍾,約延時1ms */
for (i=0;i<100;i++)
{}
}
}
void main()
{
initial();
P0=0x00;
sec=min=hour=0;
flag=1;
while(1)
{
while(flag)
{
display(0,hour/10);
display(1,hour%10);
//display(2,3);
display(3,min/10);
display(4,min%10);
//display(5,6);
display(6,sec/10);
display(7,sec%10);
flag=0;
}
}
}
void display(uchar digit,uchar num)
{
P2=0x00;
P1=n[num];
P2=m[digit];
delay(1);
}
void initial(void)
{
//--INT0的配置----------
IT0=1; // INT0為0低電平觸發(為1則為下降沿觸發)
EX0=1; // INT0中斷開,允許INT0中斷
//--T0的配置:定時器------------
TMOD = 0x11; //定時器0,1 定時,工作方式1(16位裝載方式)
TH0 = 0x3c;//定時50ms,12M晶體振盪器
TL0 = 0xb0;
TR0 = 1; //允許T0中斷
ET0 = 1;
EA=1; // CPU所有中斷開(IE最高位MSB)
}
void timer_0() interrupt 1 using 2
{
FT0++;
if(FT0==20)
{
sec++;
FT0=0;
}
if(sec>59)
{
min++;
sec=0;
}
if(min>59)
{
hour++;
min=0;
}
if(hour>24)hour=0;
TH0 = 0x3c;//定時50ms,12M晶體振盪器
TL0 = 0xb0;
flag=1;
}
//INT0中斷 由P3.2引腳產生
void int_0() interrupt 0 using 0
{
if(key1==0)hour++;
if(key2==0)hour--;
if(key3==0)min++;
if(key4==0)min--;
if(hour<0)hour=0;
if(min<0)min=0;
}
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar n[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar m[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar FT0,sec,min,hour,flag;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^6;
sbit key4=P3^7;
void display(uchar,uchar);
void timer_0();
void initial(void);
void int_0(); //外部中斷0
C. 數字電路課程設計「短跑計時器」,1分59秒99
TRJRTNHJNNTBRJSNBVMA;LML;ED,;LAWmefc;mawLVNKVNNV WNkNV EWl 我可冷肯v
D. 99秒倒計時器數字電路模擬圖
給你個參考
555脈沖發生器電路,就請你自己去完成好了
E. 99秒倒計時電路圖
可鍵盤設置倒計時時間
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitp20=P2^0;
sbitp21=P2^1;
sbitp30=P3^0;
sbitp31=P3^1;
sbitp32=P3^2;
#definekey_00x18
#definekey_10x14
#definekey_20x12
#definekey_30x11
#definekey_40x28
#definekey_50x24
#definekey_60x22
#definekey_70x21
#definekey_80x48
#definekey_90x44
#definekey_reset0x42
#definekey_stop0x88
#definekey_start0x84
#definekey_shi0x82
#definekey_ge0x81
uchart;
ucharct=10;
uchardh=1,dl=0;
uchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽極時的0~9
ucharkey_table[]={0x18,0x14,0x12,0x11,0x28,0x24,0x22,0x21,0x48,0x44};
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidinit(void)
{
TMOD=0x01;//選擇方式1
TH0=0x3c;//12M晶振,定時時間50ms
TL0=0xb0;
EA=1;//開啟總中斷
ET0=1;//開啟定時器0溢出中斷
TR0=1;//啟動定時器0
}
voiddisplay(void)
{
P0=tab[dh];
p20=1;
delay(2);
p20=0;
P0=tab[dl];
p21=1;
delay(2);
p21=0;
}
voiddisplay0(void)
{
P0=tab[dh];
p20=1;
delay(2);
p20=0;
P0=tab[dl];
p21=1;
delay(100);
p21=0;
}
voiddisplay1(void)
{
P0=tab[dh];
p20=1;
delay(100);
p20=0;
P0=tab[dl];
p21=1;
delay(2);
p21=0;
}
voidtimer0(void)interrupt1//定時器中斷
{
uchart;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
dh=ct/10;
dl=ct%10;
display();
if(t==20)//每秒進一次中斷
{
t=0;
ct--;
if(ct==-1)
{
TR0=0;
p32=1;p31=1;p30=0;
}
}
}
voiddlms(void)
{uchari;
for(i=200;i>0;i--)
{}
}
ucharkbscan(void)
{ucharscode,recode;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{dlms();
if((P1&0xf0)!=0xf0)
{scode=0xfe;
while((scode&0x10)!=0)
{P1=scode;
if((P1&0xf0)!=0xf0)
{recode=(P1&0xf0)|0x0f;
return((~scode)+(~recode));
}
else
scode=(scode<<1)|0x01;
}
}
}
return(0);
}
voidkey_process(ucharkey,uchar*dh,uchar*dl,uchar*ct)
{
staticuchark;
if(key==key_reset)
{*dh=0;
*dl=0;
*ct=(*dh)*10+(*dl);
p32=1;p31=1;p30=0;
}
if(key==key_0||key==key_1||key==key_2||key==key_3||key==key_4||key==key_5||key==key_6||key==key_7||key==key_8||key==key_9)
{k=0;
while(1)
{if(key==key_table[k])
break;
k++;
}
}
if(key==key_stop)
{TR0=0;
p32=1;p31=0;p30=1;
}
if(key==key_start)
{TR0=1;
p32=0;p31=1;p30=1;
}
if(key==key_shi)
{*dh=k;
display0();
*ct=(*dh)*10+(*dl);
}
if(key==key_ge)
{*dl=k;
display1();
*ct=(*dh)*10+(*dl);
}
}
voidmain()
{
ucharkey;
p32=0;p31=1;p30=1;
init();
while(1)
{
key=kbscan();
dlms();
if(key!=0)
{
//switch(key)
//{case0x18:n=0;break;
//case0x14:n=1;break;
//case0x12:n=2;break;
//case0x11:n=3;break;
//case0x28:n=4;break;
//case0x24:n=5;break;
//case0x22:n=6;break;
//case0x21:n=7;break;
//case0x48:n=8;break;
//case0x44:n=9;break;
//case0x42:n=10;break;
//case0x41:n=11;break;
//case0x88:TR0=0;break;
//case0x84:TR0=1;break;
//case0x82:n=14;break;
//case0x81:n=15;break;
//}
key_process(key,&dh,&dl,&ct);
//if(p26==0)
//{dh=n;display0();ct=dh*10+dl;}
//if(p27==0)
//{dl=n;display1();ct=dh*10+dl;}
}
//if(p26==0)display0();
//if(p27==0)display1();
//elsedisplay();
display();
}
}
源程序供你參考可以改動
F. 『求助』用51單片機定時器實現99秒錶倒計時
K1EQUP1.0
K2EQUP1.1
K3EQUP1.2
ORG0000H
LJMPMAIN
ORG000BH
LJMPT0ISR
ORG0030H
MAIN:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-10000)
MOVTL0,#LOW(65536-10000)
SETBET0
SETBEA
MOVR0,#9
MOVR1,#9
MOVR2,#0
MOVR3,#99
CLR00H
CLR01H
LOOP:
JBK1,LP01
JNBK1,$
CLR01H
INCR3
CJNER3,#100,LOOP0
MOVR3,#0
SJMPLOOP0
LP01:
JBK2,LP02
JNBK2,$
CLR01H
CJNER3,#0,LP011
MOVR3,#99
SJMPLOOP0
LP011:
DECR3
SJMPLOOP0
LP02:
JBK3,LOOP
JNBK3,$
SETB01H
SJMPLOOP
LOOP0:
MOVA,R3
MOVB,#10
DIVAB
MOVR0,B
MOVR1,A
SJMPLOOP
T0ISR:
CLRTR0
MOVTH0,#HIGH(65536-10000)
MOVTL0,#LOW(65536-10000)
SETBTR0
MOVDPTR,#TABLE
T0C:
CPL00H
JB00H,T001
MOVP3,#0FDH
MOVA,R1
MOVCA,@A+DPTR
MOVP2,A
SJMPT002
T001:
MOVP3,#0FEH
MOVA,R0
MOVCA,@A+DPTR
MOVP2,A
T002:
JNB01H,T0E
INCR2
MOVA,R2
CJNEA,#100,T0E
MOVR2,#0
MOVA,R0
JZT003
DECR0
SJMPT0E
T003:
MOVA,R1
JZT004
DECR1
MOVR0,#9
T0E:
RETI
T004:
CLR01H
MOVR4,#16
T005:
CPLP0.0
LCALLDELAY
DJNZR4,T005
RETI
DELAY:
MOVR6,#200
DLY:
MOVR7,#250
DJNZR7,$
DJNZR6,DLY
RET
TABLE:;共陰極數碼管顯示代碼表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6FH;56789
END
G. 求基於51單片機的99秒倒計時顯示程序
用什麼顯示?數碼管?倒計時到零了之後怎麼辦?從新開始倒?中間設置按鍵停止嗎?
H. 求一個99秒倒計時單片機程序和模擬,基於51單片機。
^#include "reg51.h"
sbit start=P3^2; //外部中斷0引腳 開始
sbit rst=P3^3; //外部中斷1引腳 復位
sbit breakk=P3^4; //暫停倒計時
sbit led=P3^5; //Led燈
sbit beep=P3^7; //蜂鳴器控制引腳
sbit P30=P3^0; //數碼管位選
sbit P31=P3^1;
void didi(void);
unsigned char code anma[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};
char time=99; //倒計時緩存
char flag_t=0; // 1秒輔助計時
char now=0; // 0停止 1 計時 2報警 3復位
unsigned char g=0,s=3,i=0;
void delay(unsigned int n)
{
while(--n);
}
void t0_srv() interrupt 1 using 1
{
TH0=0X3C;
TL0=0XB0;
flag_t++;
if(flag_t>=20){ //20*50ms=1s
flag_t=0;
time--;
if(time<=0){
// beep=0;
didi();
didi();
didi();
led=0;
TR0=0;
now=2;
time=0;
}
}
}
void button_start() interrupt 0 using 1 //外部中斷0
{
delay(1500);
if(start==0) {
now=1;
TR0=1;
}
else return;
while(start==0);
delay(1500);
}
void button_rst() interrupt 2 using 1
{
delay(1500);
if(rst==0) {
TR0=0;
time=99;// 3;
i=0;
led=1;
now=0;
}
else return;
while(rst==0);
delay(1500);
}
void disp()
{
g=time%10;
s=time/10;
g=anma[g];
s=anma[s];
P0=~g;
P31=0;
delay(250);
P31=1;
P0=~s;
P30=0;
delay(250);
P30=1;
}
void key()
{
if(breakk==0)delay(1500);
else return;
if(breakk==0) {
if(now==1){
i++;
if(i%2)TR0=0;
if(!(i%2))TR0=1;
}
}
else return;
while(breakk==0);
delay(1500);
}
/* 延時250us*k */
void delay250(unsigned int k)
{
unsigned int j,i;
for (i=0;i<k;i++)
{
for(j=0;j<25;j++);
}
}
void didi(void)
{
unsigned int j;
for (j=0;j<400;j++) //loop 400,響0.2s
{
beep=0;
delay250(2);
beep=1;
delay250(2);
}
delay250(800); //stop 0.2s
}
main()
{
TMOD=0X01;//定時器0工作在方式1,
EA=1;
IT0=1;
ET0=1;
TH0=0X3C;//在12M 晶振下,定時時間為50ms
TL0=0XB0;
EX0=1;
EX1=1;
//TR0=1;
while(1){
disp();
key();
}
}
I. 怎樣設計 一個計時器,實現1到99秒的倒計時。用兩個LED數碼管顯示十位和個位的計時時間
電子顯示就可以了
J. 求基於C51的99秒99倒計時牌程序,要求注釋詳細,附電路圖。
你好!
可以做程序和原理圖,電路圖不會。
打字不易,採納哦!