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

單片機10秒秒錶

發布時間:2024-03-17 07:25:02

『壹』 51單片機數字秒錶設計用4位數碼管分別顯示十秒,秒,百毫秒,十毫秒計時范圍為10ms到99s

/***************************************************************************/

#include <reg51.h>

sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//數碼管位選埠

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管顯示編碼

void YS(char hs); void XS(int xm,int xs); void Time1(void);int n,i,m,s;

/***************************************************************************/

void main(void){Time1();while(1){XS(m,s);}}//主函數

/***************************************************************************/

void int1() interrupt 1 //定時器中斷

{

TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;

if(n>1000){n=0;s++; if(s>59){s=0;m++;if(m>59){m=0;}}}

}

/***************************************************************************/

void Time1(void)//定時器初始化

{

TH0=(65536-921)/256; TL0=(65536-921)%256;

TMOD=0x01; EA=1; ET0=1; TR0=1;

}

/***************************************************************************/

void XS(int xm,int xs) //數碼管顯示

{

char d1,d2,d3,d4;

d1=(xs/1)%10; d2=(xs/10)%10; d3=(xm/1)%10; d4=(xm/10)%10;

P0=table[d1]; Axs=0; YS(10); Axs=1;//個位顯示

P0=table[d2]; Bxs=0; YS(10); Bxs=1;//十位顯示

P0=table[d3]; Cxs=0; YS(10); Cxs=1;//百位顯示

P0=table[d4]; Dxs=0; YS(10); Dxs=1;//千位顯示

}

/***************************************************************************/

void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延時函數

/***************************************************************************/

數碼管的埠用的可能不一樣,自己改下

『貳』 51單片機做一個10秒倒計時的程序

C語言
#include
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
p27=P2^7;//數碼管位選端定義
uchar
c,i;
//數碼管解碼表
unsigned
char
code
NumDecode[]
=
{
0XC0,//;0
0XF9,//;1
0XA4,//;2
0XB0,//;3
0X99,//;4
0X92,//;5
0X82,//;6
0XF8,//;7
0X80,//;8
0X90,//;9
};
void
main()
{
i=0;//10秒計時設置
c=0;//中斷次數計數
p27=1;//數碼管位選端關閉
TMOD=1;//設置定時器0為工作方式1
TH0=(65536-46080)/256;//定時50ms高8位求模
TL0=(65536-46080)%256;//定時50ms低8位求余
EA=1;//開總中斷
ET0=1;//定時器0中斷
TR0=1;//啟動定時器0
while(1)
{
if(c==20)//50ms中斷20次
{
c=0;
i++;//倒計時總數每秒減1
}
if(i<10)
{
p27=0;//數碼管位選選通
P0=NumDecode[i];//顯示數據
}
else
//循環計時設置
{
i=0;
}
}
}
void
timer0()
interrupt
1//定時器0中斷入口
{
TH0=(65536-46080)/256;//定時器重新賦初值
TL0=(65536-46080)%256;
c++;//中斷次數
}

『叄』 51單片機十秒簡易計時器

因為樓主說,(不要太大面積修改)。
所以,就沒有敢進行大面積的修改。

只簡單的改改,未必能好用,僅供參考:

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

sbit key1=P2^7;
sbit key2=P2^6;
sbit weiH=P3^0;
sbit weiM=P3^1;
sbit weiL=P3^2;

uint num=0,ge=0,shi=0,fen=0,k;
//num用來計數,ge為各位顯示,shi為十位顯示,fen為分鍾顯示

void delayms(uint xms) //i=xms即延時約xms毫秒
{
uint i,j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}

uchar key1scan()
{
if(key1==0) {
delayms(10);
if(key1==0) {
while(!key1) showtime();//等待釋放期間,也進行顯示
return 1;
}
}
return 0;//添上了返回值
}

uchar key2scan()
{
if(key2==0) {
delayms(10);
if(key2==0) {
while(!key2) showtime();
return 1;
}
}
return 0;//添上了返回值
}

void showtime() //時間顯示
{

//這里去掉了while(1) ,避免了死循環

P1=0xff; weiL=1; P1=table[ge]; delayms(5); weiL=0;//顯示秒的個位
P1=0xff; weiM=1; P1=table[shi]; delayms(5); weiM=0;//顯示秒的十位
P1=0xff; weiH=1; P1=table[fen]; delayms(5); weiH=0;//顯示分鍾,
}

『肆』 求單片機大神 寫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;
}

『伍』 單片機 按鍵秒錶

秒錶的設計程序
用89C51,外接晶振,復位電路,二個數碼管,二個按鍵,做一個電子秒錶,具體要求為用按鍵起停電子表,可用按鍵設計倒計時時間(如10S,20S,60S),並啟動倒計時功能。能用按鍵選擇以上兩功能之一。
三、程序代碼:
A_BIT EQU 20H ;數碼管個位數存放內存位置
B_BIT EQU 21H ;數碼管十位數存放內存位置
TEMP EQU 22H ;計數器數值存放內存位置 ;開機初始化
MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
MOV P0,#0FFH;使顯示時間數碼管熄滅
CLR F0
CLR F1
MOV DPTR,#NUMTAB ;指定查表啟始地址
;等待按鍵輸入
;根據按鍵的輸入判斷執行什麼功能;按鍵1按下則執行功能1
MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
MOV P0,#0FFH;使顯示時間數碼管熄滅
START:JB P3.6,START1;循環判斷開始按鈕K1是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.6,START;如果是干擾就返回
JNB P3.6,$;等待按鍵松開
LJMP GN1 ;按鍵2按下則執行功能2START1: JB P3.7,START;循環判斷開始按鈕K2是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.7,START1;如果是干擾就返回
JNB P3.7,$
LJMP GN2;數碼管顯示秒錶時間的程序
GN1: ;先初始化
S1:MOV A,#0
MOV TEMP,A
GOON1: MOV R2,#2
JS1: MOV R3,#250
TIME1: MOV A,TEMP ;將TEMP中的十六進制數轉換成10進制
MOV B,#10 ;10進制/10=10進制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;個位在B LCALL DPLOP1 ;插入一段判斷定時過程中是否有按鍵輸入的程序段
C1: JB P3.6,B1
ACALL DELAY10;延時10毫秒消抖
JB P3.6,C1
JNB P3.6,$;等待按鍵松開
CPL F0
ZT1: ; MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
JB P3.6,$;循環判斷開始按鈕K1是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.6,ZT1;如果是干擾就返回
JNB P3.6,$;等待按鍵松開
LCALL DPLOP1

B1: JB P3.7,LOOP1
ACALL DELAY10;延時10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按鍵松開
AJMP OVERLOOP1: DJNZ R3,TIME1 ;2毫秒循環執行250次,時間約0.5秒
DJNZ R2,JS1 ;循環執行2次,時間為1 秒鍾INC TEMP;滿一秒鍾對時間加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判斷TEMP的數值是否為60?不為60循環
ACALL OVER
RET
GN2: MOV A,#14H ; 設定倒計時的時間20S
MOV TEMP,A;數碼管顯示倒計時時間的程序
;初始化
MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
MOV P0,#14H;使顯示時間為設定的倒計時時間 GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP ;將TEMP中的十六進制數轉換成10進制
MOV B,#10 ;10進制/10=10進制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;個位在B MOV DPTR,#NUMTAB ;指定查表啟始地址
DPLOP2: MOV A,A_BIT ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
MOV P0,A ;送出個位的7段代碼

CLR P2.5 ;開個位顯示
ACALL DELY1;顯示1毫秒
SETB P2.5;關閉個位顯示,防止鬼影
MOV A,B_BIT ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.6 ;開十位顯示
ACALL DELY1;顯示1毫秒
SETB P2.6;關閉十位顯示,防止鬼影 ;插入一段判斷定時過程中是否有按鍵輸入的程序段
C2: JB P3.6,B2
ACALL DELAY10;延時10毫秒消抖
JB P3.6,C2
JNB P3.6,$;等待按鍵松開

ZT2: MOV P3,#0FFH;對P3口初始化,設置為高電平,用於按鍵輸入
JB P3.6,$;循環判斷開始按鈕K1是否按下?
ACALL DELAY10;延時10毫秒觸點消抖
JB P3.6,ZT2;如果是干擾就返回
JNB P3.6,$;等待按鍵松開

B2: JB P3.7,LOOP2
ACALL DELAY10;延時10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按鍵松開
AJMP OVERLOOP2: DJNZ R3,TIME2 ;2毫秒循環執行250次,時間約0.5秒
DJNZ R2,JS2 ;循環執行2次,時間為1 秒鍾DEC TEMP;滿一秒鍾對時間減1
MOV A,TEMP
JNZ GOON2;判斷TEMP的數值是否為0?不為0循環
ACALL OVER
RET
;結束定時
OVER: AJMP START;退到開機初始化狀態;1毫秒延時子程序
DELY1: MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET;10毫秒延時子程序
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET;實驗板上的兩位一體的數碼管0~9各數字的顯示代碼
NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1: MOV A,A_BIT ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
MOV P0,A ;送出個位的7段代碼

CLR P2.5 ;開個位顯示
ACALL DELY1;顯示1毫秒
SETB P2.5;關閉個位顯示,防止鬼影
MOV A,B_BIT ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
MOV P0,A ;送出十位的7段代碼
CLR P2.6 ;開十位顯示
ACALL DELY1;顯示1毫秒
SETB P2.6;關閉十位顯示,防止鬼影
RET
END

『陸』 單片機秒錶課程設計,急求!!!!

原理圖如下,

程序如下:

;=================================================

;寄存器分配定義

;=================================================

LED_BUF EQU 50H ;顯示數據首址

COUNTER_INT EQU 3BH ;中斷計數器

SECOND EQU 3DH ;秒單元

;=================================================

;常數定義

;=================================================

CN_COUNT_INT EQU 100 ;10ms * 100 = 1S

SET_MODEL EQU 0FFH ;完全解碼模式

SET_BRIGHT EQU 04H ;占空比為15/32;顯示亮度;

SET_LIMIT EQU 01H ;2位顯示方式;

SET_NORMAL EQU 01H ;測試模式

SET_START EQU 01H ;進入啟動工作方式?

;=================================================

;管腳分配定義

;=================================================

m7219_DIN BIT P3.0

m7219_LOAD BIT P3.1

m7219_CLK BIT P3.2

KEYSTART BIT P1.0

KEYRESET BIT P1.1

;============================================

;模擬主程序

;===========================================


org 0000h

ajmp main

ORG 000BH

LJMP Timer0Interrupt

org 0030h

main:

mov sp,#70h


lcall Init_M7219

lcall InitTimer0

; MOV SECOND,#95H ;TEST

Loop:

CALL disp

key_reset:

SETB KEYRESET

JB KEYRESET,key_start

; DELAY

NOP

NOP

NOP

JB KEYRESET,key_start

JNB KEYRESET,$

CLR TR0

MOV A,#0

MOV SECOND,A

MOV led_buf,A

MOV LED_BUF+1,A

JMP key_SCAN_END

key_start:

SETB KEYSTART

JB KEYSTART,key_SCAN_END

; DELAY

NOP

NOP

NOP

JB KEYSTART,key_SCAN_END

JNB KEYSTART,$

SETB TR0

key_SCAN_END:


JMP loop

;===========================================

InitTimer0:;10ms一次中斷

MOV TMOD,#01H

MOV TH0,#0D8H

MOV TL0,#0F0H

SETB EA

SETB ET0

RET

;===========================================

Timer0Interrupt:

PUSH DPH

PUSH DPL

PUSH ACC

MOV TH0,#0D8H

MOV TL0,#0F0H

;========================

INC COUNTER_INT

MOV A,COUNTER_INT ;10ms 計數值加1

CJNE A,#CN_COUNT_INT,Timer0Interrupt_EXIT

MOV COUNTER_INT,#0

MOV A,SECOND

CJNE A,#99H,Timer0Int_sec

CLR TR0;關閉計時

JMP Timer0Interrupt_EXIT

Timer0Int_sec:

ADD A,#01 ;秒加1

DA A

MOV SECOND,A

SWAP A

ANL A,#0fH

MOV led_buf,A

MOV A,SECOND

ANL A,#0FH

MOV LED_BUF+1,A

;========================

Timer0Interrupt_EXIT:

POP ACC

POP DPL

POP DPH

RETI

;====================================================

; function:Init_M7219 ;初始化max719

; input: ------------

; output: ----------

; usage: a,b

;====================================================

Init_M7219: ;初始化Max7219

MOV a,#0bh ;設置掃描界限

MOV b,#set_limit ;設置位數

lcall w_7219

MOV a,#09h ;設置解碼模式

MOV b,#set_model ;00h非解碼模式;ffh為BCD解碼模式

lcall w_7219

MOV a,#0ah ;設置亮度

MOV b,#set_bright ;15/32亮度

lcall w_7219

MOV a,#0fh ;設置工作方式

MOV b,#set_normal ;正常工作方式

lcall w_7219

MOV a,#0ch ;進入啟動工作方式

MOV b,#set_start

lcall w_7219

RET


;===================================================

; function:disp ;顯示子程序

; input: r0

; output: -----------

; usage: r0,r3,r4,a,b

;===================================================

disp:

MOV r0,#led_buf

MOV r4,#01h

MOV r3,#set_limit

INC r3

disp1:

MOV a,@r0

MOV b,a

MOV a,r4

lcall w_7219

INC r0

INC r4

djnz r3,disp1

RET


;===================================================

; function:w_7219 ;顯示驅動程序;

; input: a ;傳送7219的地址

; b ;傳送7219的數據

; output:-------------

; usage: a,r2

;====================================================

w_7219:

CLR M7219_clk

CLR M7219_din

CLR M7219_load ;置load=0

lcall sd_7219 ;傳送7219的地址

MOV a,b

lcall sd_7219 ;傳送數據

setb M7219_load ;數據裝載

CLR M7219_din

RET

;=================================================

; function:sd_7219 ;向7219傳送數據或地址子程序

; input: a

; output: max7219

; usage: a, r2

;==================================================

sd_7219: ;向7219送地址或數據

MOV r2,#08h

c_sd:

CLR C

CLR M7219_clk

RLC a

MOV M7219_din,c ;准備數據

NOP

setb M7219_clk ;上升沿將數據傳入

NOP

NOP

CLR M7219_clk

djnz r2,c_sd

RET


閱讀全文

與單片機10秒秒錶相關的資料

熱點內容
論壇觸屏手機版文件夾是哪個 瀏覽:406
mac命令刪除文件夾 瀏覽:813
退休職工醫保怎麼演算法 瀏覽:739
免費愛情片中文字幕 瀏覽:566
linux判斷字元串為空 瀏覽:202
鬼片小電影在線 瀏覽:29
如何看搶版電影 瀏覽:967
粵語影視app推薦 瀏覽:465
電影營免費完整版 瀏覽:232
如何關閉app的推送通知 瀏覽:533
文件加密狗沒有密碼了 瀏覽:851
vs修改編譯時編碼 瀏覽:463
韓國音樂老師電影 瀏覽:523
校園喪屍爆發小說 瀏覽:100
動漫分娩片段 瀏覽:159
東方財富app怎麼查看股票發行價 瀏覽:549
鏟車空調壓縮機支架 瀏覽:348
寶書網手機版txt官網 瀏覽:888
java環境配置win8 瀏覽:892
聯通app28號怎麼簽到不了 瀏覽:150