新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机打铃器设计

单片机打铃器设计

作者:时间:2013-03-12来源:网络收藏

;**** 设计 **************************************************
;* 编号:LRDZAVR0100 
;* 标题: 32点例程
;* 文件名:timecontr.asm
;* 版本: 1.0
;* 开始日期: 02.06.13
;* 目标MCU:
;* 技术支持: http://www.dianz.cn
;* 硬件结构: PA0-5对应6个LED数显管的位 ,PC0-7对应各LED数显管的段 ,PB4-7为键盘。
;* 软件描述: 上电后,时钟从00.00.00(时/分/秒)自动走时,在走时状态时 , 按PB4(设定
;* 键)超过3秒可循环选择调整时间/工作参数 ,接着按PB5以确定选择的操作 ,进入调整操作后 ,
;* 按PB5选择欲调整参数,按PB6(增加键)完成调整参数操作 。按PB7,进入时控运行,PB1亮,
;* 再按PB7停止时控运行,回显走时。在定时到时,PB0点亮。
;******************************************************

.device
.include "8515def.inc"
.equ DISBUF = $0060 ;显示缓冲区起始地址
.equ TIMEDIS = $0066 ;时钟时分秒存放单元
.equ XSDBZ = $0073 ;小数点位标志
.equ DISTBL = $0f00 ;显示字符编码表起始地址
.equ TIMECTR = $0010 ;32段时间控制表首址(EEPRON)
.equ TIMECBZ = $0080 ;控制时间到标志
.cseg
.org $0000
rjmp RESET
.org $0007
rjmp TIM0_OVF

;****设计主程序*****************************************************

.def cntms =r9
.def hour =r10
.def minute =r11
.def second =r12
.def EEdwr =r16
.def EEawr =r17
.def EEawrh =r18
.def EEdrd =r16
.def EEard =r17
.def EEardh =r18
.def temp =r20
.def temp1 =r21
.def temp2 =r22
.def temp3 =r23
.def temp4 =r24
.def TIM0INT =r19

.org $0020
RESET: ldi temp,low(ramend) ;设置堆栈指针
out spl,temp
ldi temp,high(ramend)
out sph,temp
ldi temp,0b11111111 ;设置各口线输入输出状态
out ddra,temp
ldi temp,0b00000011
out ddrb,temp
ldi temp,0b11111111
out ddrc,temp
ldi zl,TIMECBZ
clr zh
clr temp
st y,temp
clr r9 ;清各工作寄存器
clr r10
clr r11
clr r12
clr r13
clr r14
clr r15
clr r16
clr r17
clr r18
clr r19
clr r25
ldi temp,$5
out tccr0,temp ;T0设置ck/1024分频
ldi temp,256-195
out tcnt0,temp ;装T0时间常数
res1: ldi temp,$02 ;允许T0中断,并计时
out timsk,temp
sei ;开中断
res2: clr r6
clr r7
sbi PORTb,1
sbi PORTB,0
res3: ldi temp,$af
res4: rcall colodis ;时钟走时显示
dec temp
brne res4
sbis pinb,7 ;键扫描
rjmp PB7M
sbis pinb,4
rjmp BP4M ;去参数设置
rjmp res3

;****《系统功能程序》

.org $0080 ;定义系统功能程序存放区首址

;****32点打铃器工作程序*******************************************************

PB7M: cbi PORTb,1 ;置运行指示灯亮
clr r25
clr r7
GNCX11:ldi r17,TIMECTR ;首个控制点EEPRON地址
clr r18
lsl r25
lsl r25
add r17,r25 ;取得EEPRON中控制点地址(Aj=A0+4*j),A=(r17),j=(r25)
lsr r25
lsr r25
rcall EERead
cpi r16,0
breq GNCX12 ;r16=(r17)=0为“ON”
inc r25
cpi r25,31
brmi GNCX11
rjmp GNCX16
GNCX12:inc r17
rcall EERead
cp r16,r10
brne GNCX13
inc r17
rcall EERead
cp r16,r11
brne GNCX14
inc r17
rcall EERead
mov r7,r16
inc r7
cbi PORTb,0
rjmp GNCX15
GNCX13:dec r17
inc r25
rjmp GNCX11
GNCX14:dec r17
dec r17
inc r25
rjmp GNCX11
GNCX15:cpi TIM0INT,1
brne GNCX17
clr TIM0INT
dec r7
brne GNCX17
clr r7
sbi PORTb,0
rjmp GNCX16
GNCX17:rcall colodis
sbic pinb,7
rjmp GNCX15
rjmp res2
GNCX16:ldi temp,$5f
GNCX18:rcall colodis
dec temp
brne GNCX18
sbic pinb,7
rjmp GNCX11
rjmp res2

;****打铃器参数设置

BP4M: ldi temp3,$ff
ldi temp4,$f
BP4M1: nop
rcall colodis
sbic pinb,4
rjmp res1
dec temp3 ;PB4有按下
brne BP4M1
inc temp3
dec temp4
brne BP4M1
ldi temp3,$ff ;超3秒进入
ldi temp4,$f
BP4M2: clr yh
ldi yl,low(DISBUF) ;设置显示cloc.
ldi temp,25
st y+,temp
st y+,temp
ldi temp,18
st y+,temp
ldi temp,19
st y+,temp
ldi temp,20
st y+,temp
ldi temp,18
st y,temp
ldi zl,low(XSDBZ)
clr zh
ldi temp,0b00100000 ;b0-5对应LED自左到右1-6位的小数点,置“1”在该位置小数点。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭