历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2018年01月14日 | 单片机遥控控制的霓虹灯程序

2018-01-14 来源:eefocus

源程序如下:
;********************************************************************************
;* 标题: 遥控霓虹灯模拟显示 *

;* 硬件: top-2005 *
;* 文件: REMCONLED.asm *
;* 日期: 2003-1-18 *
;* 版本: 1.0 *
;* 作者: 张绍斌   转载请注明出处www.mcu51av.com 
;* 邮箱: shaobinz@163.com *
;********************************************************************************
;* 描述: *
;* 遥控控制发光二极管组花样显示 *
;* P0口为发光二极管的数据口,P3.2口接遥控接收头 *
;********************************************************************************

IRCOM EQU 20H ;20H-23H IR使用
IRIN EQU P3.2
D1 EQU 30H ;流水灯移位数缓存
D2 EQU 31H
NO_M EQU 44H

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
MOV NO_M,#00H
loop1: mov p0,#00h
loop: 
MOV A,NO_M
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 译码子程序
;---------------------------------------------------------
;转载请注明出处www.mcu51av.com 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 NO_M,R1
nop
sjmp ir_out
;-------------------------遥控键值表---------------------
TAB_REMOT:;其他6221/6222遥控器要先测码建立此表
DB 00H
DB 10H,03H,01H,06H
DB 09H,1DH,1FH,0DH;只用遥控上排8个按键
;------------------------------------------------
; 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
;-------------------------------------
END ;结束


推荐阅读

史海拾趣

Galaxy Microelectronics公司的发展小趣事

深圳市飞翼科技有限公司自2006年成立以来,一直致力于模拟与数字MCU混合芯片领域的研究、设计和开发应用。公司主攻电容式触摸感应按键芯片设计,凭借多项独有的专利技术,成功突破了行业内的技术难点。经过多年的努力,飞翼科技已成为该应用领域中技术最全面、市场份额最大的公司之一。其电容式触摸感应芯片广泛应用于各类电子产品中,为用户带来了更加便捷、智能的交互体验。

CET Technology公司的发展小趣事

在数字化转型的大背景下,CET Technology积极探索数字孪生技术在园区管理中的应用。公司提供的数字孪生与3D可视化服务,通过创建园区的虚拟实体,模拟、验证、预测和控制园区的运营状态,帮助园区实现智慧化管理、优化服务和提高生产效率。此外,CET的数字孪生服务还能监控园区内人员和车辆的通行情况,提升园区内部的交通效率,为园区的可持续发展提供了有力支持。

场效应半导体(Cmos)公司的发展小趣事

台湾积体电路制造股份有限公司(TSMC)在CMOS技术的发展中也有着不可忽视的贡献。作为一家专业的半导体制造企业,TSMC凭借其在生产工艺和质量控制方面的优势,成功地为全球众多知名半导体企业提供了优质的CMOS芯片制造服务。通过不断的技术创新和生产优化,TSMC的CMOS芯片品质得到了业界的广泛认可,使其在全球半导体制造市场上占据了重要地位。

Fedco_Batteries公司的发展小趣事

在快速发展的同时,Fedco_Batteries始终关注社会责任。公司积极参与公益事业,捐款捐物支持灾区重建、教育扶贫等项目。同时,公司还注重环保和可持续发展,致力于研发环保型电池产品,减少对环境的影响。这种关注社会责任的企业精神,让Fedco_Batteries在社会上树立了良好的形象。

三环(CCTC)公司的发展小趣事

近年来,三环(CCTC)公司更加注重产品品质和品牌建设。公司建立了完善的质量管理体系和检测手段,确保产品质量稳定可靠。同时,公司加强了品牌宣传和推广力度,提高了品牌知名度和美誉度。通过不断提升产品品质和加强品牌建设,公司赢得了更多客户的信任和支持,实现了可持续发展。

DS-IMP公司的发展小趣事

DS-IMP公司一直将研发创新作为企业发展的核心动力。在研发过程中,公司不断投入大量资金,引进先进设备和技术,并与国内外知名高校和研究机构建立合作关系。通过不懈努力,公司在多个领域取得了重大突破,成功研发出了一系列具有自主知识产权的高性能模拟混合电路产品。这些产品不仅满足了国内外客户的需求,还为公司赢得了良好的市场声誉。

问答坊 | AI 解惑

如何减少变压器对放大器的干扰

电源变压器可通过磁场、电磁感应和电路对放大器形成干扰,是音响机器中最大的干扰源。所以,要处理好它的工作状态和应用环境,才能有效地避免由电源变压器产生的干扰,使放大器得到优良的音效。下面我将对此与大家做一讨论。   1、电源变压器除 ...…

查看全部问答>

编译qt的最终命令:

来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)…

查看全部问答>

请问怎样让eboot能支持浮点运算?我想加入jpg格式的logo,功能完成后发布代码

使用jpg格式的LOGO文件会极大地减少程序空间,这在实现类似动画的LOGO显示时极为有用。 我找了个jpg2bmp的文件,正在移植到eboot上, 平台是:S3C2440,WINCE 5.0。 现在需要加入浮点运算,请问怎么做呢? 我完成后会把这部分代码贴出来,大家 ...…

查看全部问答>

第一次单片机软件开发主要需要注意什么?

各位前辈大家好~         本人是刚毕业的应届生,现在在一个以51单片机为处理芯片的仪表设计生产公司上班,由于公司规模不大,所以进来没有人带~要自己摸索,最近公司有个项目,想让我负责软件方面的设计,可是我从 ...…

查看全部问答>

求助:串口乱码问题?

  各位高手 ,有谁碰见过232串口转换电路出现乱码的吗?我没给232供电时 用串口助手也能看见乱码 不知道是怎么回事 哪位大侠帮帮忙吧…

查看全部问答>

BUSHound与虚拟串口的区别?

在调试虚拟串口的例子,用串口调试工具从PC发送64个字节数据时 STM收到了128个数据   但是用BUS Hound发送同样的64个数据  STM收到的是64字节,正常。     用串口调试工具发送一个文件,大小为2048&n ...…

查看全部问答>

lm3s6911的一些程序

本帖最后由 paulhyde 于 2014-9-15 09:35 编辑 自己lm3s6911的一些程序,开发工具为IAR,路劲为绝对路劲,工程打开需要自己更改。 希望对大家有所帮助。。。  …

查看全部问答>

【51征文】活动结果公布啦!

提及51,相信大家都有很多话说,所以文章个个都很出彩,为此,我们费了很大劲儿才做出了这个艰难的选择。   希望获奖的朋友继续加油,再创佳作;希望没获奖的朋友也别灰心,下次还有更多精彩的活动。   由于本人刚刚加入论坛没多久, ...…

查看全部问答>

哪位发现过官方那个LaunchPad_Temp_GUI第一次打开可能发现不了com口?

我试验了一下,新启动的电脑,可以用一段时间(但是不要插LaunchPad),然后第一次插LaunchPad,按按键转到应用模式,然后第一次打开LaunchPad_Temp_GUI.exe,这个时候发现不了LaunchPad对应的端口,只有电脑的其它端口。关闭LaunchPad_Temp_GUI, ...…

查看全部问答>

关于LM311比较器的使用

LM311没用上拉电阻(输出没接VCC+5V)输出高低电压为0.044V 和0.001V ,输出接51的IO口。 我想使其输出为便于51的IO口识别的 就是所谓的1 和0 要接多少的上拉电阻?(另外51的01电压界限是多少V?) 各位大侠····小弟拜谢了····…

查看全部问答>