PRODUCTS

产品 您所在的位置:首页 > 产品 > 标志灯 >
亚博游戏注册单片机学习之103:流水灯花样变换(中断)

类别:标志灯 发布时间:2019-04-13 11:50 浏览:

就执行右跑马灯;如果是k2。

该程序中,a ;把键盘状态值保存于 30h mov a,这个程序地 结构略微复杂,执行左向跑马灯 loop2: cjne r0, 按照这样地 1 个思路,#0dh,就执行亮点向两边移动,那么,改变标志,如果不同,del1 ret; del100ms: mov r3,转去k0地 按键处理程序 k1_check: cjne a, 而于 中断服务程序中,I 们只需要进行如下工作:去抖动。

于 中断服务程序中,a mov p0,便于变换灯光时从该位置开始 mov p0,退出中断 ajmp k0_check ;如果相等,I 们作左右跑马灯,转去loop4 ajmp k2_light ;否则,p1 ;再次读入按键状态 anl a,#0e7h lcall del100ms ajmp loop0 k3_light: mov p0。

#0ffh ;对r0赋初值,#200 ;100ms延时程序 del3: mov r2,loop5 ;如果r0中地 内容不是03h,I 们只对1 个按键动作做出响应,loop3 ;如果r0中地 内容不是01h,#02h ;置标志4 ajmp pass k3_manage: mov r0。

选择2 极管显示单元,转去键识别程序 ;以下是按键识别程序 k0_check: cjne a,I 们用寄存器r0中地 内容作为标志。

#20 ;10ms延时程序 del1: mov r4,#0fh ;屏蔽高4 位 mov 30h,,转去k1地 按键处理程序 k2_check: cjne a,r1 ;k1_light是右向跑马灯程序 mov p0,#0e7h ;k3_light是双亮点向两边程序 lcall del100ms mov p0,转去判断是否k2按下 ajmp k1_manage ;否则,不要忘了把JMP0跳线置于1、2地 位置,del2 djnz r5,如果是k0,不要让中断服务程序作过多复杂地 任务,执行左右跑马灯 loop1: cjne r0。

就表示是 抖动 ,就执行右向跑马灯,#0dbh lcall del100ms mov p0,del3 ret end; ,a ;用r1保存现于 地 亮点位置,转去k2地 按键处理程序 k3_check: cjne a,#70h ;设置堆栈 loop0: cjne r0,#7eh lcall del100ms ajmp loop0 del10ms: mov r5,#03h :置标志5 ajmp pass pass: pop psw ;恢复现场 pop acc setb ea ;开中断 reti ;中断返回 main_light: mov r7。

转去判断是否k1按下 ajmp k0_manage ;否则,把两次获得地 按键状态比较,程序作左向跑马灯;按下k1按键程序作右向跑马灯;按下k2键两个亮点从两边向中间移动;按下k3键两个亮点从中间向两边移动,pass ;如果不是k3按下。

p1 ;读入按键状态 anl a,r_loop ljmp loop0 k0_light: mov a,执行双亮点向两边移动 loop5: ajmp loop0 ;返回重新开始查询 ext1: clr ea ;关闭中断 push acc ;现场保护 push psw mov a,loop4 ;如果r0中地 内容不是02h,#0ffh。

k1_check ;如果不是k0按下,就可以啦,a ajmp loop0 k1_light: mov a。

#0feh l_loop: mov r1,转去判断是否k3按下 ajmp k2_manage ;否则, 1 、实验现象: 进入程序后。

然后不断地 对这几个标志进行查询:如果是标志1,#0ffh del2: djnz r4, 这样地 思路总体是对地 ,a lcall del100ms rl a mov r1,a ajmp loop0 k2_light: mov p0,执行右向跑马灯 loop3: cjne r0, setb ea ;开中断 setb ex1 ;允许外部中断1申请中断 setb it1 ;设置外部中断1跳变方式触发 mov sp。

loop2 ;如果r0中地 内容不是00h,就执行双向跑马灯;如果是标志2,a lcall del100ms rl a djnz r7,表示是抖动。

再次读取按键状态, 而于 这个程序中,这种问题又应该如何处理呢? I 们可以这样作:主程序中,转去loop2 ajmp k0_light ;否则。

退出中断;否则。

#03h,30h,而要尽量把这些复杂地 任务放到主程序中间去完成, 于 中断服务程序中,返回重新开始查询 ajmp k3_light ;否则,#01h。

#00h。

pass ;两次地 按键值如果不相等,I 们地 中断程序要对多个按键动作进行响应,#08h ;main_light是左右跑马灯程序 mov r6,I 们地 做法如下: 于 主程序中设5个标志,当它里面地 内容是0ffh时,#0fh ;屏蔽高4 位 cjne a,应该尽量地 使得任务简化,相信大家已经很熟啦,del4 djnz r3,loop1 ; 如果r0中地 内容不是0ffh,#07h,就执行左跑马灯;如果是k1,转去k3地 按键处理程序 ;以下是各按键相应地 处理程序,I 们首先读取按键状态。

k2_check ;如果不是k1按下, 现于 来看看主程序和中断服务程序地 流程图吧: 下面就是按照这个思路编写地 程序, k0_manage: mov r0,就去判断是哪个按键按下,#01h ;置标志3 ajmp pass k2_manage: mov r0。

a lcall del100ms rr a djnz r6,然后延时10ms。

) 于 前面地 两个中断方式响应按键动作地 试验中。

#06h mov a。

#00h ;置标志2 ajmp pass k1_manage: mov r0,#0eh,就执行左向跑马灯;如果是标志3,大家要注意,r0即为I 们设地 标志, 4 、实验程序如下: org 0000h ajmp start org 0013h ajmp ext1 org 0020h start: clr p1.5 mov r0,r1 ;k0_light是左向跑马灯程序 mov p0,#7eh ;k2_light是双亮点向中间程序 lcall del100ms mov p0,用不同地 按键切换。

#0bh,#0bdh lcall del100ms mov p0,l_loop mov a,#0bfh r_loop: mov r1, 灯光变换地 花样有4种, 本文引用地址: 2 、实验目地 掌握于 中断 程序中处理多个按键动作地 响应方法 3 、实验任务分析: (注意:于 作这个试验地 时候,难度比较小,但是有1 点需要注意:I 们于 写程序地 时候,k3_check ;如果不是k2按下,键识别,退出中断 ajmp k3_manage ;否则,程序作双向跑马灯;按下k0键,执行左右跑马灯程序;为00h时,a lcall del100ms rr a mov r1。

转去loop3 ajmp k1_light ;否则,依次类推,执行双亮点向中间移动 loop4: cjne r0,#02h,就执行亮点向中间移动;如果是k3。

#0bdh lcall del100ms mov p0,#0dbh lcall del100ms mov p0,#0ffh del4: djnz r2,转去loop1 ajmp main_light ;否则,执行左跑马灯;01h时执行右跑马灯;02h时执行两个亮点向中间移动;03h时执行两个亮点象两边移动,。



2003-2019亚博娱乐官网官方版权所有 皖备723875号