導航:首頁 > 操作系統 > 秒錶倒計時單片機程序

秒錶倒計時單片機程序

發布時間:2025-04-24 23:10:01

❶ 基於51單片機的999倒計時C語言程序。

/*************************************
要求是能進行9999秒倒計時
用C語言實現
*************************************/
#include<at89X51.h>

#define uchar unsigned char
#define uint unsigned int
uchar num_qian,num_,num_shi,num_ge;//定義千位,百位,十位,個位。
uint time;//要顯示的時間0~9999
uint tcnt;//計時單元
//*****************//
//以下是埠定義
//*****************//
sbit key_qian=P1^0;//按鍵"千加1"
sbit key_ =P1^2;//按鍵"百加1"
sbit key_shi =P1^4;//按鍵"十加1"
sbit key_ge =P1^6;//按鍵"個加1"
sbit laba =P3^1;//喇叭

void delay(unsigned int z)//1毫秒延時子函數
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

//*****************//
//以下是七段數碼管驅動程序
//*****************//
/**************************************************
** 功能描述: 中斷接受字元串驅動程序
**佔用引腳資源 P30
**佔用系統資源 串口中斷;中斷向量4
***************************************************/
#define DUAN P0
#define WEI P2

unsigned char code dispcode[]=
{
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
}; //共陰段碼表
//0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,NULL,-
uchar code dispbitcode[]=
{0xef,0xdf,0xbf,0x7f}; //共陰位碼表

uchar dispbuf[4],dispcount;//開辟四個顯示緩沖區

void ledinit()/***初始化子函數,定時器0刷新顯示內容***/
{
TMOD|=0x01; // 定時器0方式1
TH0=(65536-5000)/256; //定時器16位模式
TL0=(65536-5000)%256; //溢出時間:5ms
TR0=1; //開啟定時器0
ET0=1; //使能定時器0
EA=1; //系統使能
}

void leddisp()//固定顯示某些數字
{
dispbuf[0]=time/1000;
dispbuf[1]=time%1000/100;
dispbuf[2]=time%100/10;
dispbuf[3]=time%10;
}

void keytest()//按鍵檢測程序
{
if(!key_qian)//如果千位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_qian)//如果千位按鍵的確按下了
{
num_qian++;//千位數字加一
while(!key_qian);//等待按鍵松開
}
time+=num_qian*1000;//千位數字加1
}
if(!key_)//如果百位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_)//如果百位按鍵的確按下了
{
num_++;//百位數字加一
while(!key_);//等待按鍵松開
}
time+=num_*100;//百位數字加1
}
if(!key_shi)//如果十位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_shi)//如果十位按鍵的確按下了
{
num_shi++;//千位數字加一
while(!key_shi);//等待按鍵松開
}
time+=num_shi*10;//十位數字加1
}
if(!key_ge)//如果千位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_ge)//如果個位按鍵的確按下了
{
num_qian++;//千位數字加一
while(!key_ge);//等待按鍵松開
}
time+=num_ge;//個位數字加1
}
}

void main()//主程序
{
ledinit();//數碼管中斷初始化,定時器0刷新顯示內容
while(1)//大循環
{
if((!key_qian)||(!key_)||(!key_shi)||(!key_ge))//如果四個按鍵中的任何一個被按下
keytest();//執行按鍵檢測程序
leddisp();//不斷的刷新顯示內容
}
}

//*************************************************
//以下是定時器0刷新數碼管顯示內容驅動程序
//*************************************************
/**************************************************
** 功能描述: 七段數碼管驅動程序
**佔用引腳資源: 數碼管段選,數碼管位選
**佔用系統資源T0
***************************************************/

void t0(void) interrupt 1 //using 0
{
TH0=(65536-5000)/256; //5ms中斷
TL0=(65536-5000)%256; //16位定時器模式
WEI=0xff;//關位選
DUAN=dispcode[dispbuf[dispcount]]; //段選
WEI=dispbitcode[dispcount]; //開位選
dispcount++;
if(dispcount==5)
dispcount=0;

tcnt++; //計數個數加一
if(tcnt==5*200)//滿足1S了
{
tcnt=0;//計數個數歸零
time--;//時間減一
if(time==0)//時間
while(1);
}
if(time<10)//時間小於10
laba=~laba;//聲音報警
}

這是9999秒倒計時的

❷ 單片機設計秒錶倒計時

#include<reg51.h>

unsignedcharmsec,sec;

voiddelay()

{unsignedchari;

for(i=0;i<100;i++);}

voidT0_INT(void)interrupt1

{

TH0=0x3c;

TL1=0Xb0;

msec++;

if(msec==20)

{

msec=0;

sec++;

if(sec==60)

{

sec=0;

}

}

}

voidmain()

{

unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedchartemp;

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

P3=0xff;

while(1)

{

P2=0x01;

P0=led[sec/10];

delay();

P2=0x02;

P0=led[sec%10];

delay();

temp=~P3;

temp=temp&0x07;

if(temp==0x01)

TR0=1;

if(temp==0x02)

TR0=1;

if(temp==0x04)

{TR0=0;sec=0;msec=0;}

}

}

❸ 採用AT89C51單片機設計一隻電子秒錶,倒計時(60~1每間隔1秒倒數)

硬體電路 有2位數碼管可以顯示秒錶的時間 0~10秒

有3個按鍵 K1為開始計時 K2為停止計時 K3為清零

軟體設計:

K1按下則啟動定時器定時 每到1秒 顯示器緩沖單元內容加1

K2按下則停止定時器定時

K3按下則將顯示器緩沖單元內容清零。

❹ 單片機 C語言秒錶程序 求修改!倒計時結束後又開始計時了怎麼停下來

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0-9段碼

ucharcount,time;

sbitstart=P3^4;

sbitstop=P3^5;

sbitreset=P3^6;

/*****延時函數*****/

voiddelay(uchark)

{

uchari,j;

for(i=0;i<k;i++)

for(j=0;j<200;j++);

}

voidmain()

{

TMOD=0x01;//設置為定時器模式1

TH0=0x3c;//晶振6MHz,定時時間100ms

TL0=0xb0;

IE=0x82;//開全局中斷和定時中斷

time=24;

count=0;


while(1)

{

if(start==0)TR0=1;//啟動開關

if(stop==0)TR0=0;//停止開關

含棚if(reset==0)time=24;//復位開關


P2=0xfe;//顯示個位

談高則P0=seg[time%10];//取計時值個位送P0口

delay(2);

P2=0xfd;//顯示十位

P0=seg[time/10];//取計時值十位送P0口

delay(2);

}

}

voidtimer0()interrupt1

{

TH0=0x3c;

TL0=0xb0;

count++;

if(count==10)//中斷10次即1s=10×100ms

{

count=0;//計數次數清0

time--;//計時值減1

if(time==0)

{

time=24;//計時值減到念巧0則回初值

TR0=0;

}

}

}

編程實現倒計時的秒錶,2位LED數碼管顯示,延時採用硬體延時的方法

編程實現倒計時的秒錶,2位LED數碼管顯示,延時埋閉採用硬體延時的方法
用單片機的定時器T0定時,計時1秒,實現倒計時的秒錶的功能。
程序如下
#include<reg51.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數碼管段碼表
unsigned char second;//秒倒計時變數
unsigned char t0n;//T0中斷次數計數
sbit k1=P3^2;//定義按鍵
void delay()
{
unsigned int j;
for(j=400;j>0;j--);
}
void display()//顯示子程序
{
P2=0x01;
P0=tab[second/10];//顯示十位
delay();
P2=0x02;
P0=tab[second%10];//顯示個位
delay();
}
void main()
{
TMOD=0x01;//用T0定時,中斷方式
TH0 =0x3C;//晶振12M,定時50ms
TL0 =0xB0;
IE =0x82;
while(1)
{
display();//調顯示子程序
if(k1==0)//按鍵按下
{
if(TR0==0)
{
TR0=1;//啟動開始計時
second=60;//從60秒開始倒計時
}
else
TR0=0;
while(k1==0);/滲嘩/等待按鍵釋放
}
}
}
//T0中斷程序
void T0_int() interrupt 1
{
TH0 =0x3C;
TL0 =0xB0;
t0n++;
if(t0n>=20)/彎喊裂/1秒到
{
t0n=0;
second--;//減1秒
if(second==0)TR0=0;
}
}

❻ 用單片機製作倒計時秒錶的發現

顯示子程序中,有些語句邏輯不順暢,改了一些,如下:

;顯示倒計時器:
;入口:30H單元BCD碼十位數
; 31H單元BCD碼個位數
DIS:
MOV DPTR,#TAB
MOV A, 30H
MOVC A, @A+DPTR
CLR P3.0
CLR P3.1
MOV P1, A ;顯示十位
SETB P3.0
ACALL DELAY10
MOV A, 31H
MOVC A, @A+DPTR
CLR P3.0
MOV P1, A ;顯示個位
SETB P3.1
ACALL DELAY10
CLR P3.0
CLR P3.1
RET

閱讀全文

與秒錶倒計時單片機程序相關的資料

熱點內容
c入門pdf下載 瀏覽:277
linuxmongodb連接命令 瀏覽:247
程序員看球賽外賣員幫忙 瀏覽:715
51單片機二級鍵 瀏覽:650
超有財app下載在哪裡 瀏覽:620
顧家北詞伙pdf 瀏覽:516
彈幕記憶app安卓在哪裡下載 瀏覽:859
單片機pwm頻率計算 瀏覽:639
如何在手機中安代理伺服器 瀏覽:582
vnuc5網路版伺服器地址 瀏覽:760
android和pc通信 瀏覽:107
蕪湖ug編程培訓 瀏覽:679
如何打開cad命令行 瀏覽:782
編譯輸入錯誤圖片大全 瀏覽:688
在哪裡找騰訊app 瀏覽:373
智能管家如何與安卓互通 瀏覽:734
秒錶倒計時單片機程序 瀏覽:740
單片機小學期交通燈 瀏覽:593
如何查app文件在哪裡 瀏覽:65
美的美居app有什麼功能 瀏覽:410