51單片機秒錶計時器課程設計
1. 基於51單片機的秒錶設計
遇到懶學生了,這個不就是一個定時器加顯示嗎,有什麼難的,自己翻翻微機原理內書容就可以做 了,也就四五十行匯編語言就行了,用C就更加簡單,具體的方法:用定時器定時0.2ms,定時到了就給固定的一個變數加1,然後判斷這個變數是不是到了500,到了就清零然後把秒的變數加1,就是1s了,(分和時也是如此,秒為60,秒清零,分加1);主程序就只管顯示和按鍵,按鍵隨便用中斷還是查詢,我建議你查詢,因為程序簡單,顯示程序就是查個表,自己把數碼顯示的斷碼表編好就可以了,把秒的數值查表對應顯示,完了就查詢按鍵,按鍵累加,值為0是沒按,1是按1次,2是按2次,3是按3次,同時清零,很簡單的
2. 單片機秒錶課程設計,急求!!!!
原理圖如下,
程序如下:
;=================================================
;寄存器分配定義
;=================================================
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
3. 單片機 秒錶課程設計 要求:利用51單片機設計一秒錶計時電路,能夠顯示分、秒
很簡單的,在網路上搜下就能搜到了
4. 51單片機的秒錶計時器設計,求大神幫忙設計電路圖和C語言程序!!
這個程序可以實現秒的計時,按鍵控制開始、暫停、清零功能,更多功能自己在看清程序的基礎上進行改進。
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
5. 單片機電子秒錶課程設計
高估我啦,你上csdn上找找把
6. 用51單片機做秒錶設計
遇到抄懶學生了,這個不就是一個定時器襲加顯示嗎,有什麼難的,自己翻翻微機原理書就可以做 了,也就四五十行匯編語言就行了,用C就更加簡單,具體的方法:用定時器定時0.2ms,定時到了就給固定的一個變數加1,然後判斷這個變數是不是到了500,到了就清零然後把秒的變數加1,就是1s了,(分和時也是如此,秒為60,秒清零,分加1);主程序就只管顯示和按鍵,按鍵隨便用中斷還是查詢,我建議你查詢,因為程序簡單,顯示程序就是查個表,自己把數碼顯示的斷碼表編好就可以了,把秒的數值查表對應顯示,完了就查詢按鍵,按鍵累加,值為0是沒按,1是按1次,2是按2次,3是按3次,同時清零,很簡單的
7. 51單片機秒錶課程設計
你好,我空間裡面來有源的正好可以使用
強調一下,此文實為轉載,原因就是東西搞的不錯,放心使用
http://hi..com/lyzhangxiang/blog/item/c37397ef363abd2e2df53431.html