C语言按键蜂鸣器响灯亮,AT89C52单核A2单片机按下独立按键蜂鸣器响流水灯左移松开按键蜂鸣器不响流水灯右移...

该程序使用定时器1中断在微控制器上实现0.1秒间隔的数码管字符滚动显示,并在显示结束后触发蜂鸣器报警。程序初始化了定时器1为方式1,设置了中断允许,并定义了字形码表。在中断服务子程序中,更新数码管显示并控制蜂鸣器状态。
摘要由CSDN通过智能技术生成

ADRLED        EQU        8700H                ;LED工作地址

ORG         0000H

LJMP         MAIN

ORG        1BH

JMP        T1INT                ;定时器1中断入口地址

ORG         0100H

MAIN:        MOV         SP,#60H

MOV        R0,#0AH                ;R0为0.1秒的次数

ANL        TMOD,#0FH        ;定时器1置为方式1

ORL        TMOD,#10H

MOV        TL1,#0B0H        ;置定时器1的中断时间为0.1S

MOV        TH1,#3CH

ORL        IE,#88H                ;允许定时器1中断

MOV        R2,#0                ;置R2初值,R2对应显示字符的字形码相对地址

MOV        R5,#16                ;置显示的字符数初值

SETB        P3.4                ;使蜂鸣器的负端为高不鸣叫

CLR        P3.5                ;使数码管的共阴极为低电平

NEXT:        MOV        DPTR,#TAB        ;置字形码表首地址

MOV        A,R2

MOVC        A,@A+DPTR        ;取出相应的字形码

MOV         DPTR,#ADRLED        ;数码管段码地址

MOVX         @DPTR,A                ;送数码管段码(字形码)

SETB        TR1                ;启动定时器1

LOOP:        CJNE        R0,#00H,LOOP        ;不够1秒,转LOOP

INC        R2

MOV        R0,#0AH                ;重置R0为10

DJNZ        R5,NEXT                ;16个字符没有显示1遍,转NEXT显示下一字符

CLR        P3.4                ;使蜂鸣器的负端为低其鸣叫

MOV        A,#0FFH                ;报警之后数码管显示全亮

MOV         DPTR,#ADRLED        ;数码管段码地址

MOVX         @DPTR,A                ;送数码管段码(字形码)

CLR        TR1                ;定时器停止计数

SJMP        $                ;死循环

T1INT:        CLR        TR1                ;定时器1中断,首先停止计数

DEC        R0                ;次数减1

MOV        TL1,#0B0H        ;重置定时器1时间常数

MOV        TH1,#3CH

SETB        TR1                ;恢复定时器1计数

RETI

TAB:        DB        3FH,06H,5BH,4FH,66H,6DH,7DH,07H                ;字形码表

DB        7FH,6FH,77H,7CH,58H,5EH,79H,71H

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值