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

單片機秒錶程序

發布時間:2022-04-25 07:34:59

① 這是單片機秒錶的程序,請問這部分說的是什麼意思呢

單片機秒錶的程序,這是兩個按鍵的處理程序,按鍵K1,按下啟動計時,再按停止計時。按鍵K2,是清零鍵,按下秒計時回0,並停止計時。

② 單片機秒錶程序

以下程序使用定時器1計數,定時10ms,60H為妙計數單元,4FH單元為秒標示位,一秒時間到,置位4FH*********************************************************************************************************************** ORG 0000H ;程序從0地址開始
LJMP MAIN ;跳到STRAT處執行
ORG 001BH
LJMP JIA1
ORG 0030H
MAIN:MOV TMOD,#01H ;設置T1工作在模式1
MOV TH1,#068H ;賦初值,定時10ms
MOV TL1,#0F0H
MOV IE,#88H ;開CPU中斷,開定時器1中斷
SETB TR1 ;啟動T1定時器工作
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 P1,A ;由P1口輸出A的內容
SETB P2.0 ;置位P2.0
CLR P2.0 ;清零P2.0

MOV A,B
MOVC A,@A+DPTR ;根據A的值取出編碼表中的編碼
MOV P1,A ;由P1口輸出A的內容
SETB P2.1 ;置位P2.1
CLR P2.1 ;清零P2.1
JNB 4FH,DISPLAY ;判斷1秒時間是否到,沒有到,則跳轉到DIAPLAY處
CLR 4FH ;1秒到,清4FH
LJMP DISPLAY ;調用顯示子程序 JIA1:MOV TH1,#068H ;賦初值
MOV TL1,#0F0H
DJNZ 60H,TT ;60H單元自減1,判斷是否為0,不為0則跳轉到TT處
MOV 60H,#100 ;60H單元為0,則重新給其賦值100
SETB 4FH ;同時置位4FH單元
INC R3 ;R3自加1
CJNE R3,#60,TT ;判斷R3是否為60,否則跳轉TT處
MOV R3,#0 ;R3為60,則給R3賦0
TT:RETITAB: ;編碼表
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;編碼
END ;程序結束

③ 單片機秒錶計時器c語言程序圖 需要圖和程序

#include<reg51.h> // 時鍾與秒錶

#define uchar unsigned char

#define uint unsigned int

sbit qingling=P1^0; //清零

sbit tiaofen=P1^1; //調分

sbit tiaoshi=P1^2; //調時

sbit sounder=P1^7; //naozhong

uint a,b;

uchar hour,minu,sec, //時鍾

hour0,minu0,sec0, //秒錶

hour1,minu1,sec1;

h1,h2,m1,m2,s1,s2, //顯示位

k,s; //狀態轉換標志

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*****************函數聲明***********************/

void keyscan();

void init();

void delay(uchar z);

void display(uchar,uchar,uchar);

void sounde();

/*****************主函數*************************/

void main()

{

init();

while(1)

{

while(TR1)

{

keyscan(); // 掃描函數

while(s==1) // s是狀態標志,當s=0時,鬧鍾取消。s=1時,設定鬧鍾時間

//(也是通過調時,調分函數);

{ //s=2時,鬧鍾工作,時間與設定時刻一致時,鬧鍾響

// (一分鍾後自動關閉,可手動關閉)。再次切換,s=0.

keyscan(); //s狀態切換(0-》1-》2-》0)通過外部中斷1實現。

display(hour1,minu1,sec1); //鬧鍾時刻顯示

}

display(hour0,minu0,sec0);//時鍾表顯示

while(k) /*k是秒錶狀態(0-》1-》2-》0)通過外部中斷0實現。

0秒錶關;1秒錶從零計時;2秒錶停,顯示計時時間*/

{

display(hour,minu,sec); //秒錶顯示

}

}

}

}

/*****************初始化函數***********************/

void init()

{

a=0;

b=0;

k=0;

s=0;

hour0=0;

minu0=0;

sec0=0;

hour=0;

minu=0;

sec=0;

hour1=0;

minu1=0;

sec1=0;

TMOD=0x11; //定時器0,1工作於方式1;賦初值

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

EX0=1; //秒錶中斷

EX1=1; //鬧鍾設定中斷

ET0=1;

ET1=1;

IT0=1; //邊沿觸發方式

IT1=1;

PX0=1;

PX1=1;

TR0=0; //初始,秒錶不工作

TR1=1; //時鍾一開始工作

}

/*****************定時器0中斷*************/

void timer0_int() interrupt 1 //秒錶

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

a++;

if(a==2)

{

a=0;

sec++;

if(sec==100)

{

sec=0; //毫秒級

minu++;

if(minu==60)

{

minu=0; //秒

hour++;

if(hour==60) //分

{

hour=0;

}

}

}

}

}

/*************外部中斷0中斷函數************/

void ex0_int() interrupt 0

{

k++;

if(k==3)

k=0;

if(k==1)

{

TR0=~TR0;

if(TR0==1)

{

hour=0;

minu=0;

sec=0;

}

}

if(k==2)

{

TR0=~TR0;

}

}

/*************外部中斷1中斷函數************/

void ex1_int() interrupt 2

{

s++;

if(s==3)

s=0;

}

/*************定時器1中斷****************/

void timer1_int() interrupt 3 //控制時鍾工作

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

if(s==2)

{

if(hour1==hour0 && minu0==minu1)

sounde();

}

b++;

if(b==20)

{

b=0;

sec0++;

if(sec0==60)

{

sec0=0;

minu0++;

if(minu0==60)

{

minu0=0;

hour0++;

if(hour0==24)

hour0=0;

}

}

}

}

/*************鍵盤掃描****************/

void keyscan()

{

if(s==1)

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec1=0;

minu1=0;

hour1=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu1++;

if(minu1==60)

{

minu1=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour1++;

if(hour1==24)

{

hour1=0;

}

while(!tiaoshi);

}

}

else //調整時鍾時間

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec0=0;

minu0=0;

hour0=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu0++;

if(minu0==60)

{

minu0=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour0++;

if(hour0==24)

{

hour0=0;

}

while(!tiaoshi);

}

}

}

/*************顯示函數****************/

void display(uchar hour,uchar minu,uchar sec)

{

h1=hour/10;

h2=hour%10;

m1=minu/10;

m2=minu%10;

s1=sec/10;

s2=sec%10;

P0=0xff;

P2=table[h1];

P0=select[7];

delay(5);

P0=0xff;

P2=table[h2];

P0=select[6];

delay(5);

P0=0xff;

P2=0x40;;

P0=select[5];

delay(5);

P0=0xff;

P2=table[m1];

P0=select[4];

delay(5);

P0=0xff;

P2=table[m2];

P0=select[3];

delay(5);

P0=0xff;

P2=0x40;

P0=select[2];

delay(5);

P0=0xff;

P2=table[s1];

P0=select[1];

delay(5);

P0=0xff;

P2=table[s2];

P0=select[0];

delay(5);

}

/*************鬧鍾函數****************/

void sounde()

{

sounder=~sounder;

}

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

void delay(uchar z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

④ 單片機秒錶復位程序如何寫

秒錶就是一個計時的工具,為了保證精確度,一般顯示秒後面兩位,就是10ms位,在單片機定時器中,賦初值1ms,變數不停的累加上去, 累加到10的時候,秒錶加1,就是10ms了,
復位就是對秒錶的數據進行清零重置,這時就需要一個按鍵來進行人機交互功能了,這時候就要考慮有幾個按鍵了,一般的秒錶設計的時候有兩個按鍵,一個進行啟動停止,一個進行清零;
1.啟動和停止,啟動停止的按鍵,就是按一下讓標志位取反一次,
bit flag =0;
if(Key ==0)
{
delay(); //延時10ms;這個程序比較常見,就不寫出來了

if(key == 0)

{
flag = !flag; //消抖後檢測到按鍵還是按下狀態,就把標志位取反;

while(!Key); //等待鬆手
}

}
同時在定時器中斷里, 根據標志位對 及時變數進行累加
if(flag)

{
t++;

if(t >= 10)

{
t = 0;

ms++;

}

}

就這樣 標志位就表示的秒錶啟動停止的,

2 。 復位,復位顧名思義就是 返回到初始狀態,就是0 ; 一般復位是在秒錶停止的狀態對秒錶進行清零;
先在主程序里檢測按鍵

bit clc = 0;
if(key1 == 0)
{
delay(); // 延時10ms

if(Key1 == 0)

{
clc = 1;

while(!Key1); //等待鬆手

}
}

然後在定時器中斷里進行對變數的數值進行清零
if(!flag ) //在停止狀態
{
if(clc)

{
ms = 0;

clc = 0;
}
}
到此 秒錶的啟動停止 和復位就完成了 ,

⑤ 單片機的秒錶設計的程序

這個程序本身思路都已經非常清晰了呀,主要就是再把流程優化下即可了。定時器T0隻負責產生秒信號,用兩個計數單元來計數需要顯示的內容,在低位秒信號滿100後清零同時把高位單元加一,還有就是對按鍵的處理和顯示的處理問題上,比如兩個鍵同時按下如何處理,顯示是用鎖位來實現,還是不停的動態掃描實現等等

⑥ 求單片機大神 寫10s的秒錶程序,用三個按鍵分別控制秒錶啟動、停止、清零(要求:使用定時器0定時,

/*-----------------------------------------------
數碼管顯示,按鍵控制秒錶
中斷按鍵控制,數碼管顯示,中斷0控制計時和停止,中斷1清零
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

unsigned int second;//定義全局變數
bit GoFlag;//定義停止,計時標志

#define DataPort P0 //定義數據埠 程序中遇到DataPort 則用P0 替換
sbit LATCH1=P2^2;//定義鎖存使能埠 段鎖存
sbit LATCH2=P2^3;// 位鎖存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示段碼值0~9
unsigned char codedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
unsigned char TempData[8]; //存儲顯示值的全局變數

void DelayUs2x(unsigned char t);//函數聲明
void DelayMs(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
void Init_Timer0(void);
void CLR(void);
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char num=0;

EX0=1; //外部中斷0開
IT0=1; //IT1=0表示邊沿觸發
EX1=1; //外部中斷1開
IT1=1; //IT1=1表示邊沿觸發
Init_Timer0();
while (1) //主循環
{

TempData[0]=dofly_DuanMa[second/10];//分解顯示信息,如要顯示68,則68/10=6 68%10=8
TempData[1]=dofly_DuanMa[second%10];
//主循環中添加其他需要一直工作的程序

}
}

/*------------------------------------------------
顯示函數,用於動態掃描數碼管
輸入參數 FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數碼管開始顯示
如輸入0表示從第一個顯示。
Num表示需要顯示的位數,如需要顯示99兩位數值則該值輸入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;

DataPort=0; //清空數據,防止有交替重影
LATCH1=1; //段鎖存
LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位碼
LATCH2=1; //位鎖存
LATCH2=0;

DataPort=TempData[i]; //取顯示數據,段碼
LATCH1=1; //段鎖存
LATCH1=0;

i++;
if(i==Num)
i=0;

}
/*------------------------------------------------
定時器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
//TH0=0x00; //給定初值
//TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
static unsigned char num;
TH0=(65536-20000)/256; //重新賦值 20ms
TL0=(65536-20000)%256;

Display(0,8);
if(GoFlag)
{
num++;
if(num==5)
second++;//秒加1
if(second==10)
second=0;
}
}
/*------------------------------------------------
外部中斷0程序
------------------------------------------------*/
void ISR_INT0(void) interrupt 0
{
GoFlag=!GoFlag; //利用外部中斷打開和關閉定時標志 用於開始和停止計時
}
/*------------------------------------------------
外部中斷1程序
------------------------------------------------*/
void ISR_INT1(void) interrupt 2
{
if(GoFlag==0)//停止時才可以清零
CLR();
}/*------------------------------------------------
數值清零
------------------------------------------------*/
void CLR(void)
{
second=0; //利用外部中斷清零
msecond=0;
}

⑦ 求單片機秒錶程序、

秒錶1/100秒顯示單位,也就是10毫秒,用單片機的話你用定時器10毫秒中斷一次就OK了,以下是部分程序,顯示部分沒做。
second equ 30h ;存秒
sec100 equ 31h ;存1/100秒部分
org 0000h
ljmp start
org 000bh
ljmp timer0
org 0100h
start:
mov tmod,#01h
mov second,#0
mov sec100,#0
lcall initdis ;初始化顯示,自己編
mov th0,#0d8h
mov tl0,#0f0h
setb et0
setb tr0
sjmp $
timer0:
clr tr0
mov th0,#0d8h
mov tl0,#0f0h
setb tr0
inc sec100
mov a,sec100
cjne a,#100,comsec
comsec:
jc cmpend
mov sec100,#0
inc second
cmpend:
lcall display ;顯示部分,自己編
reti
end

⑧ 用匯編語言編寫一個51單片機程序,實現電子秒錶功能

;================================================================
;功能:本程序實現P0口的對數碼管動態顯示秒錶的分、秒、1/100秒;
; 計時程序由中斷服務程序實現,採用定時計數器T0工作方式1;
; P2口實現對數碼管的片選功能
;================================================================
;==========================初始化================================
SHUCHU EQU P2 ;定義P0口為輸出口
PIANXUAN EQU P1 ;定義P2口為片選口
MIAO EQU 30H
FEN EQU 31H
MIAO0 EQU 32H
SHUZI EQU 33H
C_0 BIT 20H.0
;======================系統程序開始==============================
ORG 00H
LJMP START
ORG 03H
LJMP ON_OFF
ORG 0BH
LJMP T0_1
ORG 13H
LJMP RESET
ORG 30H
START:
CALL INIT
SETB C_0
MOV MIAO,#00
MOV MIAO0,#00
MOV FEN,#00
MOV DPTR,#TAB
MOV R2,#5
MAIN:
JNB C_0,$
CLR C_0
LL: CALL DISPLAY
CALL SHIJIAN
JMP MAIN
;========================時間子程序=============================
;輸入:"30H、31H、32H"
;輸出:無
;實現的功能:分、秒、百分之秒的計算。
;===============================================================
SHIJIAN:
DJNZ R2,TIAOCHU
MOV R2,#5
INC MIAO0
MOV R3,MIAO0
CJNE R3,#100,TIAOCHU
MOV MIAO0,#00
INC MIAO
MOV R3,MIAO
CJNE R3,#60,TIAOCHU
MOV MIAO,#00
INC FEN
MOV R3,FEN
CJNE R3,#60,TIAOCHU
MOV FEN,#00
TIAOCHU:RET
;========================顯示子程序=============================
;輸入:"A"
;輸出:"P2口"
;實現的功能:顯示秒、分、百分之妙
;===============================================================
DISPLAY:MOV SHUZI,MIAO0
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#10H ;片選
CALL DELAY
MOV PIANXUAN,#00H

MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示個位
MOV PIANXUAN,#20H ;片選
CALL DELAY ;延時
MOV PIANXUAN,#00H

MOV SHUZI,MIAO
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#04H ;片選
CALL DELAY
MOV PIANXUAN,#00H

MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示個位
MOV PIANXUAN,#08H ;片選
CALL DELAY ;延時
MOV PIANXUAN,#00H

MOV SHUZI,FEN
CALL JISUAN
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#01H ;片選
CALL DELAY
MOV PIANXUAN,#00H

MOV A,B
MOVC A,@A+DPTR
MOV SHUCHU,A ;顯示個位
MOV PIANXUAN,#02H ;片選
CALL DELAY ;延時
MOV PIANXUAN,#00H
RET
;========================計運算元程序=============================
;輸入:30H
;輸出:"A和B"
;實現的功能:把33H中的數據十位和個位分離出來
;===============================================================
JISUAN:MOV A,SHUZI ;數據放在A中
MOV B,#10 ;除數放在B中
DIV AB ;商放在A中,余數放在B中
RET
;====================復位中斷服務程序============================
;輸入;無
;輸出: 無
;實現的功能:把30H、31H、32H中的數據清零。
;================================================================
RESET:PUSH ACC
MOV 30H,#00H
MOV 3H,#00H
MOV 32H,#00H
CALL DELAY
POP ACC
RETI
;====================啟停中斷服務程序============================
;輸入;無
;輸出: 無
;實現的功能:關閉定時器
;================================================================
ON_OFF:CPL TR0
CALL DELAY
RETI
;====================定時中斷0服務子程序========================
;輸入:無
;輸出:無
;實現的功能:實現定時20MS,影響標中斷志位C_0
;===============================================================
T0_1:MOV TL0,50H ;設置定時初值
MOV TH0,51H
SETB C_0 ;定時標志位清0
RETI
;========================中斷設置子程序=========================
;輸入:無
;輸出:無
;實現的功能:初始化設置定時器,設置初值,開中斷0、中斷1,定時器0.
;===============================================================
INIT:MOV TMOD,#01H ;定時器0工作方式1
MOV DPTR,#65536-20000
MOV 50H,DPL
MOV 51H,DPH
MOV TL0,50H ;設置定時初值
MOV TH0,51H
MOV IE,#87H ;開定時器中斷0
MOV TCON,#15H
RET
;======================延時程序==================================
;輸入;無
;輸出: 無
;實現的功能:延時一段時間
;================================================================
DELAY:MOV R6,#80
L7:MOV R5,#60
L8:DJNZ R5,$
DJNZ R6,L7
RET
;======================共陽查表數據==============================
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;===========================結束=================================
END

⑨ 單片機怎麼設計一個0-9的一位數秒錶,用定時器實現 c語言程序及其注釋

#include
#define
uchar
unsigned
char
uchar
distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar
times,num;
void
t0isr()
interrupt
1
{
TH0=(65536-50000)/256;
//重置初值
TL0=(65536-50000)%256;
times++;
if(times>=20)
//1秒是否到
{
times=0;
num--;
//1秒到後,計數值減1
P0=distab[num];
//顯示
if(num==0)num=9;
//到0後再賦值為9
}
}
main()
{
TMOD=0x01;
//定時器0為16為定時
TH0=(65536-50000)/256;
//50毫米中斷一次
TL0=(65536-50000)%256;
ET0=1;
EA=1;
num=9;
times=0;
TR0=1;
while(1);
}

⑩ 單片機 簡易秒錶

#include<REG51.H>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P2^0;
sbit k2=P2^1;
uchar a=0;//計中斷次數
uchar second=0,minute=0;
void delayms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
主程序:
void main(void)
{
TMOD=0X01;
TH0=(65536-50000)/256;//定時50ms
TL0=(65536-50000)%256;
ET0=1; EA=1;
TR0=1;
while(1)
{
if(K1==0)
{
delayms(10);
if(K1==0) { TR0=!TR0;while(K1==0);}//暫停/啟動
}
if(K2==0)
{
delayms(10);
if(K2==0) { a=0;second=0;minute=0;}//清0
}
display();//顯示函數,與硬體有關
}
}
中斷程序
void timer0 ()inretrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
second++;
if(second==60){second=0;minute++;}
}
}

閱讀全文

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

熱點內容
提高pdf清晰度 瀏覽:979
伺服器網卡mac地址怎麼查 瀏覽:114
裁決之地伺服器為什麼這么卡 瀏覽:597
民生app怎麼查保險 瀏覽:467
單片機藍牙驅動代碼 瀏覽:467
php實現多選後公開 瀏覽:645
map中的值為數組的怎麼編程 瀏覽:261
加密貨幣怎麼登錄 瀏覽:1002
如何看本機伺服器實例名 瀏覽:388
變頻器加密密碼 瀏覽:796
美國銀行加密市場 瀏覽:384
我的世界伺服器如何tp玩家 瀏覽:26
app下載統計怎麼找 瀏覽:264
荔枝app怎麼看適合自己的發型 瀏覽:371
魔獸世界client文件夾 瀏覽:541
解壓音樂輕松入睡 瀏覽:272
c盤文件夾卡頓怎麼辦 瀏覽:450
增量調制編解碼實驗數據 瀏覽:763
電流采樣信號進單片機 瀏覽:191
編程教育課程收費 瀏覽:417