當前位置:編程學習大全網 - 編程語言 - 單片機秒表課程設計,急求!!!!

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

原理圖如下,

程序如下:

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

;寄存器分配定義

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

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

END

  • 上一篇:C# 語言後面的井字該怎麽讀阿?
  • 下一篇:學互聯網有哪些出路?
  • copyright 2024編程學習大全網