導航:首頁 > 操作系統 > 基於單片機的正向秒錶設計

基於單片機的正向秒錶設計

發布時間:2023-02-16 06:22:08

① 如何用單片機匯編語言設計一個秒錶

C51 http://..com/question/42921479.html?fr=qrl&cid=192&index=1

http://..com/question/29519178.html?fr=qrl&cid=192&index=2
1.基於單片機的設計
2.計時精度:百分之一秒
2.5鍵操作完成 清除 啟動 停止 設置初值 程序退出的功能
採用LED顯示時、分、秒、百分之一.PROTEL圖最好也有

用89C51,外接晶振,復位電路,二個數碼管,二個按鍵,做一個電子秒錶,具體要求為用按鍵起停電子表,可用按鍵設計倒計時時間(如10S,20S,60S),並啟動倒計時功能。能用按鍵選擇以上兩功能之一。
三、程序代碼:
A_BIT EQU 20H
B_BIT EQU 21H
TEMP EQU 22H
MOV P3,#0FFH
MOV P0,#0FFH
CLR F0
CLR F1
MOV DPTR,#NUMTAB
MOV P3,#0FFH
MOV P0,#0FFH
START:JB P3.6,START1
ACALL DELAY10
JB P3.6,START
JNB P3.6,$
LJMP GN1
START1: JB P3.7,START
ACALL DELAY10
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
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
LCALL DPLOP1
C1: JB P3.6,B1
ACALL DELAY10
JB P3.6,C1
JNB P3.6,$
CPL F0
ZT1: ; MOV P3,#0FFH
JB P3.6,$
ACALL DELAY10
JB P3.6,ZT1
JNB P3.6,$
LCALL DPLOP1

B1: JB P3.7,LOOP1
ACALL DELAY10
JB P3.7,B1
JNB P3.7,$
AJMP OVER
LOOP1: DJNZ R3,TIME1
DJNZ R2,JS1
INC TEMP
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1

ACALL OVER
RET
GN2: MOV A,#14H
MOV TEMP,A
MOV P3,#0FFH
MOV P0,#14H
GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
MOV DPTR,#NUMTAB
DPLOP2: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0,A

CLR P2.5
ACALL DELY1
SETB P2.5
MOV A,B_BIT
MOVC A,@A+DPTR

MOV P0,A

CLR P2.6
ACALL DELY1
SETB P2.6
C2: JB P3.6,B2
ACALL DELAY10
JB P3.6,C2
JNB P3.6,$

ZT2: MOV P3,#0FFH
JB P3.6,$
ACALL DELAY10
JB P3.6,ZT2
JNB P3.6,$

B2: JB P3.7,LOOP2
ACALL DELAY10
JB P3.7,B1
JNB P3.7,$
AJMP OVER
LOOP2: DJNZ R3,TIME2
DJNZ R2,JS2
DEC TEMP
MOV A,TEMP
JNZ GOON2
ACALL OVER
RET

OVER: AJMP START
DELY1: MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0,A

CLR P2.5
ACALL DELY1
SETB P2.5
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
ACALL DELY1
SETB P2.6
RET
END

② 基於單片機的秒錶設計原理程序

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit key = P3^0;

sbit key1 =P3^1;

sbit spk =P3^2;

uchar i,a;

static uchar second;

bit aa,b;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};

void delay(uint z)

{

uint x,y;

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

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

}

/***************顯示子程序**********************/

void display(uchar sun)

{

uchar shi,ge;

ge=table[sun/10];

shi=table[sun%10];


P2=0xff;

P0=shi;

P2=0x55;

delay(5);


P2=0xff;

P0=ge;

P2=0xaa;

delay(5);



}

/*****************清零函數************************/

void crl(void)

{

display(0);

}

void main()

{ aa=1;spk=0;

TMOD=1;

TH0=-50000/256;

TL0=-50000%256;

EA=1;

ET0=1;

TR0=1;

second=99;


while(1) {

if (key==0) { spk=1;delay(10);spk=0; aa=~aa;

//EA=0;

}

if (key1==0){ spk=1;delay(10);spk=0; second=99;

}

if(aa==1) { EA=1;

ET0=1;

TR0=1;

display(second);


}


else if(aa==0){ EA=0; ET0=0; TR0=0; display(second);

}

}

}

uchar count;

/*****************中斷服務函數*******************/

void T0_time() interrupt 1

{

TH0=-50000/256;

TL0=-50000%256;

count++;

if (count==20)

{

count=0;

second--;//秒減1

}

}

③ 單片機秒錶課程設計,急求!!!!

原理圖如下,

程序如下:

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

;寄存器分配定義

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

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


④ 用51單片機做秒錶設計

遇到懶學生了,這個不就是一個定時器加顯示嗎,有什麼難的,自己翻翻微機原理書就可以做 了,也就四五十行匯編語言就行了,用C就更加簡單,具體的方法:用定時器定時0.2ms,定時到了就給固定的一個變數加1,然後判斷這個變數是不是到了500,到了就清零然後把秒的變數加1,就是1s了,(分和時也是如此,秒為60,秒清零,分加1);主程序就只管顯示和按鍵,按鍵隨便用中斷還是查詢,我建議你查詢,因為程序簡單,顯示程序就是查個表,自己把數碼顯示的斷碼表編好就可以了,把秒的數值查表對應顯示,完了就查詢按鍵,按鍵累加,值為0是沒按,1是按1次,2是按2次,3是按3次,同時清零,很簡單的

⑤ 基於51單片機的電子秒錶設計

這個是 數碼管顯示計數器程序。稍加更改 既滿足要求

要精確定時,必須使用自裝載方式。這里我們使用T2定時器,讓它工作在16bit自動裝載方式,這時,有另一個位置專門裝著16位預裝載值,T2溢出時,預裝載值立即被置入。這就保證了精確定時。
但是,即使是16位定時器,最長的溢出時間也就幾十毫秒,要定時一秒,就需要一個變數來保存溢出的次數,積累到了多少次之後,才執行一次操作。這樣就可以累加到1秒或者更長的時間才做一次操作了。
T2定時器有個特殊的地方,它進入中斷後,需要自己清除溢出標記,而51的其他定時器是自動清除的。請參考51單片機相關書籍。
如果使用T2定時器實現1秒精確定時
下面我們就來計算:
模擬器的晶振是22118400HZ,每秒鍾可以執行1843200個機器周期。而T2每次溢出最多65536個機器周期。我們盡量應該讓溢出中斷的次數最少,這樣對主程序的干擾也就最小。
選擇每秒中斷24次,每次溢出1843200/24=76800個機器周期,超出65536,無效。
選擇每秒中斷30次,每次溢出1843200/30=61440個機器周期
選擇每秒中斷32次,每次溢出1843200/32=57600個機器周期
選擇每秒中斷36次,每次溢出1843200/36=51200個機器周期
選擇每秒中斷40次,每次溢出1843200/40=46080個機器周期
從上面可以看到我們可以選擇方式有很多,但是最佳的是每秒中斷30次,每次溢出61440個機器周期。也就是賦定時器T2初值65536-61440=4096,換成十六進制就是0x1000。
從上面的計算也可以看出晶振2118400Hz的好處,它可以整除的倍數多,要准確定時非常方便。更常見的應用是在串口波特率上,使用22118400HZ可以輸出最多准確的標准波特率。

如果是其他頻率的晶振 按照上面的方法計算即可

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

#include <reg52.h> //包括一個52標准內核的頭文件
#include<intrins.h>
/****************************聲明函數*****************************/

void x8led(unsigned long ddd);
void delay882us(void);

/*****************************定義IO******************************/

sbit P20=P2^0;
sbit P21=P2^1;
sbit S16=P3^0;
sbit S15=P3^1;
sbit S14=P3^2;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
bit f=0;//位變數

/***************************定時器2中斷**************************/

timer2() interrupt 5
{
static unsigned char t;
TF2=0;
t++;
if(t==30) //T2的預置值0x1000,溢出30次就是1秒鍾,晶振22118400HZ 這里晶振頻率不同則會有所不同
{
t=0;
f=1;//每次長時間的溢出,就置一個標記,以便主程序處理
}
}

/*****************************數碼管掃描**************************/

void x8led(unsigned long ddd)
{
unsigned char q,r=0;
unsigned char l[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
//0-9的欄位碼
unsigned char xx[8]={0,0,0,0,0,0,0,0};
unsigned char y[8]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
xx[0]=ddd%10;
xx[2]=ddd/10%10;
xx[1]=ddd/100%10;
xx[3]=ddd/1000%10;
xx[4]=ddd/10000%10;
xx[6]=ddd/100000%10;
xx[5]=ddd/1000000%10;
xx[7]=ddd/10000000; //求出八位數,分別放在八個變數中

for(q=0;q<8;) //循環掃描
{
q++;
r++;
if(r==8)r=0;
P1=y[r];
P21=1;
delay882us();
P21=0;

P20=1;
P1=l[xx[r]];
delay882us();
P1=0xff;
P20=0;
}

}

/*******************************延時882us*************************/

void delay882us(void)
{
unsigned char i;
for(i=0;i<255;i++)
{
_nop_();
}
}

/*****************************主程序******************************/

void main(void)
{

unsigned long a=0;
RCAP2H =0x10; //賦T2的預置值0x1000,溢出30次就是1秒鍾
RCAP2L =0x00;
TR2=1; //啟動定時器
ET2=1; //打開定時器2中斷
EA=1; //打開總中斷

while(1)
{

if(f)//發現標記進入處理
{
f=0;//清除標記
a++;
if(a>99999999)a=0;
}
x8led(a);//將a的值送到數碼管顯示
}

}

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

⑥ 基於C51單片機的秒錶設計。要求:1.用2位數碼管顯示秒數。 2. 有啟動、停止、清零功能 。

選 。共陽數碼管 16M晶振。
STRT EQU P2.5
STP EQU P2.6
CLRR EQU P2.7

ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H

MAIN: MOV R0,#20
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV DPTR,#TABLE
SETB EA
SETB ET0

k1: LCALL DISP
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START

k2: JB STP,K3
LCALL DISP
JNB STP,STOP

K3: JB CLRR,K1
LCALL DISP
JNB CLRR,CLEAR
AJMP K3

START: SETB TR0
AJMP K1

STOP: CLR TR0
AJMP K2

CLEAR: CLR TR0
MOV 40H,#0
AJMP K1

T0INT: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#20
MOV A,40H
CJNE A,#99,ADD1
MOV 40H,#00H
CLR TR0
AJMP RTI

ADD1: ADD A,#01H
MOV 40H,A

RTI: RETI

DISP: MOV A,40H
MOV B,#10
DIV AB ;//當前值除以10
MOV 20H,A ;//得出的商送給十位
MOV 21H,B ;//得出的余數送給個位

CLR P2.0
SETB P2.1
MOV A,20H ;//十位顯示
MOVC A,@A+DPTR
MOV P0,A

LCALL DELAY

CLR P2.1
SETB P2.0
MOV A,21H ; //個位顯示
MOVC A,@A+DPTR
MOV P0,A

RET

DELAY: ;誤差 0us
MOV R6,#01H
DL0:
MOV R5,#61H
DJNZ R5,$
DJNZ R6,DL0
RET

TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;//共陽極0-9顯示代碼
DB 92H,82H,0F8H,80H,90H

END

⑦ 51單片機完成簡易秒錶的設計

硬體電路簡單,我說下軟體部分
用一個定時器定時中斷做鍵盤掃描,數碼管用動態掃描的方法,數碼管顯示和按鍵處理都放在主程序中進行

⑧ 單片機秒錶設計

用AT89C51設計一個2位的LED數碼顯示作為「秒錶」,這應該是一個模擬題,可用兩位一體的共陰數碼管,用定時器T0定時,得到1秒計時。

⑨ 單片機 秒錶的設計

顯示部分由於硬體連接狀態不明,無法提供程序,有些硬體方案要求一次發送所有的顯示內容,這種可以直接參考我下面的部分。有些硬體方案可以分別更改每一位的顯示內容,這樣可以利用DispFlag的不同位代表不同的顯示字元位置,並且在相應計數部分程序中置位,送入主程序顯示,當然顯示執行完畢後清零相關位是必須的。否則主程序會不斷的運行,出問題了。

unsigned char DOT,SEC,MIN,HOU,DispFlag;

//T0中斷服務程序
{
//計數部分
DOT++;
if (DOT == 9) {
SEC++;
DOT=0;
}
if (SEC == 59) {
MIN++;
SEC=0;
}
if (MIN == 59) {
HOU++;
MIN=0;
}
if (HOU == 100) {
DOT=0;
SEC=0;
MIN=0;
HOU=0;
}
//置位顯示標志
DispFlag = 1;
}

//主程序部分
int main(void) {
//初始化埠
//啟動定時器
//開中斷
while (1) {
if (DispFlag) {
//顯示函數
DispFlag = 0;
}
}
}

⑩ 單片機秒錶設計!!

題目:秒錶(9999秒)
(1)採用定時器...,利用開發板上的按鈕,...
--------
樓主應該給出你的開發板上的顯示電路和按鍵電路。

閱讀全文

與基於單片機的正向秒錶設計相關的資料

熱點內容
32單片機的重映射哪裡改 瀏覽:814
為什麼前端不用刷演算法題 瀏覽:706
對稱加密系統和公鑰加密系統 瀏覽:428
歷史地理pdf 瀏覽:604
物聯網雲伺服器框架 瀏覽:646
sybaseisql命令 瀏覽:181
android權威編程指南pdf 瀏覽:661
哪些軟體屬於加密軟體 瀏覽:644
文件夾75絲什麼意思 瀏覽:468
最便宜sop8單片機 瀏覽:964
圖解周易預測學pdf 瀏覽:418
c盤莫名奇妙多了幾個文件夾 瀏覽:169
貴州花溪門票優惠app哪個好 瀏覽:801
如何說話不會讓人有被命令的感覺 瀏覽:438
哪裡可下載湘工惠app 瀏覽:265
福特python 瀏覽:312
pdf轉換成word表格 瀏覽:351
無線遠端伺服器無響應是什麼意思 瀏覽:670
兩位整數倒序輸出python 瀏覽:783
為什麼我的世界天空伺服器進不去 瀏覽:262