8只LED左右来回点亮 求程序

如题所述

送你一个我编写的遥控器控制的流水等花样,你要的花样都有,还有更多地.
IRCOM EQU 20H ;20H-23H IR使用 IRIN EQU P3.2
D1 EQU 30H ;流水灯移位数缓存
D2 EQU 31H
;--------------------------------------------------------------------------------
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中断INT0入口地址
AJMP IR_IN
;--------------------------------------------------------------------------------
MAIN:
MOV SP,#60H
MOV PSW,#00H
MOV A,#00H
MOV 20H,#00H
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
mov 30h,#00h
mov 31h,#00h
MOV IE,#81H ;允许总中断中断,使能 INT0 外部中断
MOV TCON,#01H ;触发方式为脉冲负边沿触发
SETB IRIN
loop1: mov p0,#00h
loop:
MOV A,b
JZ loop1 ;开机无遥控按键按下点亮所有二极管
RL A ;实现1~8倍乘(及1变2,2变4....)
MOV DPTR,#TAB_KEY
NOP
JMP @A+DPTR ;散转
TAB_KEY: AJMP LOOP
AJMP TAPE1
AJMP TAPE2
AJMP TAPE3
AJMP TAPE4
AJMP TAPE5
AJMP TAPE6
AJMP TAPE7
AJMP TAPE8

;------------------以下为花样灯显示样式--------------------TAPE1: MOV D1,#08H ;单灯点亮右移
MOV A,#0FEH
QQ0: MOV P0,A
ACALL YS
RL A
DJNZ D1,QQ0
ajmp loop
TAPE2: MOV D1,#08H ;单灯点亮左移
MOV A,#7FH
QQ1: MOV P0,A
ACALL YS
RR A
DJNZ D1,QQ1
ajmp loop
TAPE3: MOV D1,#08H ;暗点右移
MOV A,#01H
QQ2: MOV P0,A
ACALL YS
RL A
DJNZ D1,QQ2
ajmp loop
TAPE4: MOV D1,#08H ;暗点右移
MOV A,#80H
QQ3: MOV P0,A
ACALL YS
RR A
DJNZ D1,QQ3
ajmp loop
TAPE5: MOV D1,#08H ;亮点右左往返流动
MOV D2,#08H
MOV A,#0FEH
QQ4: MOV P0,A
ACALL YS
RL A
DJNZ D1,QQ4
AJMP NBA
NBA: RR A
MOV P0,A
ACALL YS
DJNZ D2,NBA
ajmp loop
TAPE6: MOV R5,#00H ;全亮后向右檫除,向左点亮
QQ5: INC R5
MOV A,R5
MOV DPTR, #NU_TAB1
MOVC A,@A+DPTR
MOV P0,A
ACALL YS
ACALL YS
CJNE R5,#11H,QQ5
ajmp loop
NU_TAB1: DB 00H
DB 00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH
DB 7FH,3FH,1FH,0FH,07H,03H,01H,00h

TAPE7: MOV R5,#00H ;模拟队列向左经过显示窗口
QQ7: INC R5
MOV A,R5
MOV DPTR, #NU_TAB2
MOVC A,@A+DPTR
MOV P0,A
ACALL YS
CJNE R5,#0FH,QQ7
ajmp loop
NU_TAB2: DB 00H
DB 7FH,0BFH,5FH,0AFH,57H,0ABH,55H,0AAH,0D5H
DB 0EAH,0F5H,0FAH,0FDH,0FEH,0FFH
TAPE8: MOV R5,#00H ;全亮后从两端往中间擦,再从两端往中间点亮
QQ9: INC R5
MOV A,R5
MOV DPTR, #NU_TAB3
MOVC A,@A+DPTR
MOV P0,A
ACALL YS
CJNE R5,#10H,QQ9
ajmp loop
NU_TAB3: DB 00H
DB 00H,81H,0C3H,0E7H,0FFH,0E7H,0C3H,81H,00H
DB 81H,0C3H,0E7H,0FFH,0E7H,0C3H,81H
;----------------------------灯点亮延时---------------------

YS: MOV R7,#250 CBA: MOV R6,#250
DJNZ R6,$
DJNZ R7,CBA
RET
; IR 译码子程序
;--------------------------------------------------------------------------------
IR_IN:
CLR EA ;暂时关闭CPU的所有中断请求
PUSH ACC
PUSH PSW
SETB PSW.3 ;选择工作寄存器组1
CLR PSW.4
MOV R2,#04H
MOV R0,#IRCOM
I1: JNB IRIN,I2 ;等待 IR 信号出现
DJNZ R2,I1
JMP IR_OUT ;IR信号没出现,退出。
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,I1 ;确认IR信号出现
I21: JB IRIN,I3 ;循环等IR变为高电平 ;变高就过了9MS低电平引导区
CALL DEL
JMP I21
I3: MOV R3,#0 ;8位数清为0
LL: JNB IRIN,I4 ;等IR变为低电平,变低就过了4.5MS结束码
CALL DEL
JMP LL
I4: JB IRIN,I5 ;等 IR 变为高电平,过了0或1的0.56MS低电平区
CALL DEL
JMP I4
I5: MOV R2,#0 ;0.14ms 计数
L1: CALL DEL ;看高电平保持时间,即几个0.14MS
;"0"不超过(1.125-0.56)/0.14=4个
;"1"至少有(2.25-0.56)/0.14=12个
JB IRIN, N1 ;等 IR 变为高电平
;IR=0,检查R2中的计数值
MOV A,#8
CLR C
SUBB A,R2 ;判断高低位,R2小于8,C=0,R2大于8,C=1
;取5,6,7,8,9,10,11都可,中间数最保险
;若C=0说明R2小于8,说明收到的是"0"位
;若C=1说明R2大于8,说明收到的是"1"位
MOV A,@R0 ;R0=20H已被清0,及A=0
RRC A ;RRC后A内被一位一位C替代了,低位是第一个C的值
MOV @R0,A ;处理完一位,暂时存到20H
INC R3
CJNE R3,#8,LL ;需处理完8位,1,2,3,4,5,6,7,8位放入20H,第8位是最高位
MOV R3,#0
INC R0 ;换缓存21H,22H,23H,一个缓存存8位0,1组合
CJNE R0,#24H,LL ;收集到4字节了哦(用户反码=21H,键码=22H,键反码=23H)
JMP IR_COMP ;跳出准备处理纠错
N1: INC R2
CJNE R2,#30,L1 ;0.14ms计数过长则时间到自动离开

IR_OUT: POP PSW POP ACC
SETB EA
RETI
;--------------------------------------------------------------------------------
;键值比较与键值数据处理
;22H存入键码,23H存入键码的反码
;--------------------------------------------------------------------------------
IR_COMP:
;MOV A,20H
;XRL A,#00H ;不同遥控器用户码不同的,加上比较遥控就专用了
;JNZ,IR_OUT
;MOV A,21H
;XRL A,#0DFH ;同上,双保险
;JNZ IR_OUT
MOV A,22H
CPL A
XRL A,23H ;将22H取反后和23H比较
JNZ IR_OUT ;如果不等表示接收数据发生错误,放弃
MOV R1,#08H ;只用遥控的8个按键,看按下的按键是第几个
MOV DPTR,#TAB_REMOT ;指针指向遥控键值表
LOOKUP:
MOV A,R1
MOVC A,@A+DPTR
XRL A,22H
JZ REMBAK
DJNZ R1,LOOKUP
REMBAK:
MOV b,R1
nop
sjmp ir_out
;-------------------------遥控键值表---------------------------------------------
TAB_REMOT: ;其他6221/6222遥控器要先测码建立此表
DB 00H
DB 10H,03H,01H,06H
DB 09H,1DH,1FH,0DH ;只用遥控上排8个按键
;================================
;DT9122D 遥控器(伟纳电子)

;****** 红外遥控器键值表 ******
; 10 03 01 06; 09 1D 1F 0D
; 19 1B 11 15
; 17 12 16 4C
; 40 48 04 00
; 02 05 54 4D
; 0A 1E 0E 1A
; 1C 14 0F 0C
;================================
;--------------------------------------------------------------------------------
; DELAY R5*0.14MS
DEL:
MOV R5,#1 ;IR解码使用
DEL0: MOV R6,#2
DEL1: MOV R7,#32
DEL2: DJNZ R7,DEL2
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
;--------------------------------------------------------------------------------
DELAY1: ;数码管延时4MS

MOV R6,#20 DL2: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL2
RET
温馨提示:内容为网友见解,仅供参考
无其他回答

8051汇编语言8只LED左右来回点亮
XHCS: MOV 30H,#04H \/\/循环次数赋值子程序 RET END

单片机实验利用定时器控制八个LED灯每隔1S每四个为一组轮流点亮
} \/\/主程序 void main(){ uchari;

8只LED左右来回点亮 求程序
MOV A,b JZ loop1 ;开机无遥控按键按下点亮所有二极管 RL A ;实现1~8倍乘(及1变2,2变4...)MOV DPTR,#TAB_KEY NOP JMP @A+DPTR ;散转 TAB_KEY: AJMP LOOP AJMP TAPE1 AJMP TAPE2 AJMP TAPE3 AJMP TAPE4 AJMP TAPE5 AJMP TAPE6 AJMP TAPE7 AJMP TAPE8 ;---以下为花样灯显示...

利用单片机控制八个led灯,要求:全亮全灭 ,四亮四灭,以从右到左的 流 ...
void delay (int); \/*声明延迟子函数*\/ main(){ int i;while(1){ LED=0xfe;for(i=0;i<7;i++){ delay(100);LED=(LED<<1)|0x01; \/*最低位LED灯左移一位后进行或运算使得最低位不会为“0”*\/ } for(i=0;i<7;i++){ delay(100);LED=(LED>>1)|0x80; \/*最低位LED灯...

单片机C语言如何实现8个LED流水灯来回流动?
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:

8路流水灯汇编语言程序的写法
;假设1:D1~D8八个彩灯接在P1口,输出低电平发光 ;假设2:系统晶振为12MHz ;假设3:N = 5 ;程序如下:ORG 0000H MOV R3, #5 ;N=5 LOOP0:MOV A, #0FFH MOV P1, #0FFH ;开始时全灭 ;---逐个点亮 MOV R2, #8 LOOP1: CLR C RLC A MOV P1, A CALL DL500MS DJNZ R...

请用C语言编写程序:让8只发光二极管第一次亮1只,第二次亮2只,直至8只...
char a = 0;char delay = 20;for (i = 0; i < 8; i++){ a = a*2+1;\/\/引脚电平 开始为a=0 然后依次为1 3 7 15 ... 2^(i+1)-1 LED = a;\/\/将发光二极管点亮 for(j = 0; j < delay; j++);\/\/延时一小段时间 否则看不到灯亮 由于人的视觉效应引起的 } ...

跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
;假设通过P0口置低位控制二极管点亮MAIN: CLR CMAIN1: RRC A; MOV P0,A LCALL wait2 LJMP MAIN1;延时程序11.0592M的精震wait2: ;0.5s mov r5,#0ahwait22: mov r4,#5ah mov r3,#09bhwait21: djnz r3,wait21 djnz r4,wait21 djnz r5,wait22 ret 小石头198006 | 发布于2012-06-25 举报|...

8个LED循环点亮,延时程序
;实验目的:本程序主要实现一个简单的流水灯程序 ;即轮流点亮C口的8个灯(先点亮RC0,再熄灭RCO点亮RC1。。。);硬件要求:拨码开关S2全部置ON。include ;调用头文件 __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC ;芯片配置字,...

设计用8031单片机P1口为输出口控制8只发光二极管循环点亮。1、 画出接...
内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果---*\/#include<reg52.h> \/\/包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义\/*--- 延时子程序---*\/void delay(unsigned int cnt) { while(--cnt);}\/*---

相似回答