单片机秒表课程设计,急求!!!!
用AT89C51设计一个2位的LED数码显示作为“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“开始”键和一个“复位”键。
2. 实验原理
题目难点在于通过对键盘的扫描对时钟的走时/停止进行控制,项目采用定时器T0作为计时器,每10ms发生一次中断,每100次中断加1s。在此期间,如“开始”按键按下,程序方将TR0置为1,从而开启中断,时钟开始走时;如“复位”按键按下,程序将TR0置为0,同时将存储时间的变量清零,从而中断停止,并实现复位。
本题目采用专用数码管显示控制芯片MAX7219。MAX7219是美国MAXIM公司生产的串行输入/输出共阴极显示驱动器,该芯片最多可驱动8位7段数字LED显示器或个LED和条形图显示器。其引脚图及引脚功能参见有关参考资料。
如果能把程序编出来给我谢谢了,如果能帮我做以下的东西更是感激不尽,您的100金就到手了!!!!qq邮箱 791853880@qq.com
2 ***** 方案设计
控制系统总体介绍, 框图,工作原理。
2.1***********
2.2***********
3 ***** 硬件电路设计
重点介绍各部分的硬件电路设计:分块介绍,每部分电路要介绍清楚,一些关键引脚如何接线要进行说明,外围扩展电路的端口地址要写清楚,等等。
3.1***********
3.2***********
4***** 软件编程设计
分块重点介绍程序的功能与实现:主程序,中断程序以及子程序各自完成哪些任务?流程图要自己画。A/D、D/A转换程序,滤波程序等各种关键程序的源码与介绍。软件编程设计这一章不要附上全部源码,源码放在最后的附录里
能把这些全做了当然给100金,如果不能求把程序编好给我!!!!!!!!!!!!!!!!!
写不出来报告把程序编好了也可以啊!!!!!!!!!!!!!!!!!! 展开
原理图如下,
程序如下:
;=================================================
;寄存器分配定义
;=================================================
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
球球我吧
汇编,你会??