历史上的今天
返回首页

历史上的今天

今天是:2026年01月11日(星期日)

2023年01月11日 | 汇编的51单片机的跑马灯

2023-01-11 来源:zhihu

话不多说,先上程序

ORG 0000H

MAIN:MOV P1,#0O

LCALL DELAY

MOV A,#0FEH

SETB C

TO: MOV P1,A

LCALL DELAY

LCALL DELAY

RLC A

JC TO

MOV P1,A

LCALL DELAY

LCALL DELAY

TO1: RRC A

MOV P1,A

LCALL DELAY

LCALL DELAY

JC TO1

AJMP TO

DELAY:MOV R2,#0FEH

TC1:MOV R3,#0FEH

TC2:DJNZ R3,TC2

DJNZ R2,TC1

RET

END

这个程序的目的是使8个LED循环点亮,还有一个状态是都不亮,我的LED是搭在P1口上,给低电平就亮。总的现象就是先全部亮一次,然后从左到右依次亮,然后全部灭掉,然后从右到左依次亮一遍,然后灭掉,然后就这样循环下去。


现在来对代码一步一步进行分析 我在前面讲过的知识点我就不重复了,会写的简略点,不懂的往前看。

ORG 0000H ;这个就不说了

MAIN:MOV P1,#00 ;让灯全部都亮

LCALL DELAY ;延时

MOV A,#0FEH ;11111110 赋给累加器A,累加器A就相当于c语言中的一个临时变量,临时的寄存器。

SETB C ;把进位标志位C置为1,它就相当于给八位加上了一位,这个可以让灯有个全灭的状态,等你理解完下面的全部东西再来看这个语句的作用,这样理解起来比较好。


TO: MOV P1,A ;这个语句标号为 TO,执行后是使最左边的灯亮起来

LCALL DELAY

LCALL DELAY

RLC A ;这个是新的语句,对A进行循环左移进位,RLC,我的理解就是recircle left carry ,转化为中文就是循环左移进位,意思就是把累积器A加上进位标志位C一起进行循环左移

相当于就是9个数在循环往复的移动,里面还有一个0,这个0移到哪里,哪个灯就亮了,移到进位标志位的时候就每个灯都不亮,因为进位标志位不控制灯的亮灭。


JC TO ;JC是意思是根据进位标志位C是否为1来判断是否转移,jump carry,如果C等于1,就跳到TO里面继续执行左移,否则就就执行后面的程序,而由于8个1和一个0在这九个位置移动,所以只有当0移动到进位标志位C这里它才会执行下面的程序,所以在它没有循环到全部熄灭的状态时,就会继续执行左移

MOV P1,A ;把进位标志位C为0的这个状态也赋给P1口,让灯全部熄灭。

LCALL DELAY

LCALL DELAY

TO1: RRC A ;RRC,recircle right carry,循环右移带进位 和RLC循环的方向相反,本质没有什么不同 ,从这个时候开始右边的第一个灯亮,一直亮到最左边

MOV P1,A

LCALL DELAY

LCALL DELAY

JC TO1 ;循环右移

AJMP TO ;移到最右边就又跳回到前面开始循环左移

DELAY:MOV R2,#0FEH ;下面就是延时函数

TC1:MOV R3,#0FEH

TC2:DJNZ R3,TC2

DJNZ R2,TC1

RET

END

你们可以试试RL和RC,这个不带进位标志位的,所以就不会有全部熄灭的状态了。如果有哪里讲的不对或者不到位的地方,还请大家多多指教,大家最好买个51或者52单片机玩着来学,不然就很没效果,自己去试试少了那些语句会怎么样,然后按自己的目标改变程序。


推荐阅读

史海拾趣

浙江凡华(FANHAR)公司的发展小趣事

对于计数型10键键盘编码译码显示电路,网友可能会有多个方面的问题,以下是一些常见问题及其回答:

一、设计基础与原理

问题1:计数型10键键盘编码译码显示电路的基本组成是什么?

回答:计数型10键键盘编码译码显示电路主要由三部分组成:键盘编码电路、译码电路和显示电路。键盘编码电路负责将按键的输入转换为对应的编码信号;译码电路则将该编码信号还原为可识别的信息或数据;最后,显示电路将译码后的信息以可视化的方式呈现出来。

问题2:编码和译码在数字电路中的作用是什么?

回答:编码是将信息或数据转换为二进制代码的过程,以便在数字系统中进行监测、控制、传输等操作。而译码则是编码的逆过程,即将二进制代码还原为原始的信息或数据,以便进行显示或进一步处理。在计数型10键键盘编码译码显示电路中,编码和译码是实现按键输入到显示输出的关键步骤。

二、技术实现细节

问题3:如何实现10键键盘的编码?

回答:实现10键键盘的编码通常可以采用优先编码器。优先编码器能够识别多个输入信号中的最高优先级信号,并将其转换为对应的编码输出。在10键键盘中,可以将10个按键的输入信号接入优先编码器的输入端,通过编码器的内部逻辑处理,得到按键对应的编码输出。

问题4:译码器如何选择以满足显示需求?

回答:译码器的选择应根据显示需求来确定。对于计数型10键键盘编码译码显示电路,如果显示的是十进制数字,则应选择能够处理十进制数的译码器,如74LS48等。此外,还需要考虑译码器的输入位数、输出类型(如共阳极或共阴极)以及驱动能力等因素,以确保译码器能够满足显示电路的要求。

问题5:显示电路如何设计以兼容不同显示器?

回答:显示电路的设计应兼顾译码器、驱动器和显示器三部分。首先,根据译码器的输出选择合适的驱动器来驱动显示器。驱动器的选择应考虑显示器的类型(如七段数码管、LED点阵等)、工作电压和电流等因素。其次,根据显示器的特性设计显示电路,包括确定显示方式(如静态显示或动态显示)、设置显示亮度等。最后,通过连接译码器、驱动器和显示器,实现按键输入到显示输出的完整电路。

三、常见问题与解决方案

问题6:如何解决按键冲突问题?

回答:按键冲突是指多个按键同时按下时,电路无法正确识别所有按键的状态。在计数型10键键盘编码译码显示电路中,可以通过采用优先编码器来避免按键冲突问题。因为优先编码器能够识别最高优先级的按键信号,并忽略其他低优先级的按键信号。此外,还可以通过软件算法来进一步处理按键冲突问题,如设置按键去抖动时间、检测按键按下和释放的时间差等。

问题7:如何提高电路的抗干扰能力?

回答:提高电路的抗干扰能力可以从多个方面入手。首先,选择具有良好抗干扰性能的元器件和电路布局方式;其次,在电路设计中加入滤波、去耦等电路来抑制干扰信号;最后,通过软件算法来识别和排除干扰信号的影响。此外,还可以采用屏蔽、接地等外部措施来进一步提高电路的抗干扰能力。

以上是对计数型10键键盘编码译码显示电路中网友可能提出的问题及其回答的总结。在实际应用中,还需要根据具体需求和条件进行灵活调整和优化。

DIPTRONICS MANUFACTURING INC公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,圜达实业始终坚持创新发展。公司不断推出新产品、新技术,以满足客户的多样化需求。同时,公司还积极与国内外知名企业开展合作,共同研发新技术、新产品,推动电子开关行业的持续发展。

请注意,以上故事梗概仅基于公开信息和一般行业趋势进行编写,可能无法涵盖圜达实业发展的所有细节和具体情况。

芯联(CHIPLINK)公司的发展小趣事

芯联集成始终将技术创新作为公司发展的核心驱动力。公司不断加大研发投入,积极推动技术迭代,确保在行业内保持领先地位。同时,公司还注重知识产权保护,积极申请专利,为公司的技术成果提供了坚实的法律保障。这些努力使芯联集成在竞争中始终保持优势,赢得了市场的广泛认可。

EKIT公司的发展小趣事

随着全球数字化进程的加速推进,华为坤灵(HUAWEI eKit)不断加快其全球市场拓展的步伐。通过与全球各地的分销伙伴紧密合作,HUAWEI eKit成功将其产品和服务推广到了世界各地。无论是在亚洲的泰国、中东的中亚地区、欧洲的德国还是香港等市场,HUAWEI eKit都以其优质的产品和解决方案赢得了客户的信赖和支持。同时,HUAWEI eKit还不断加大研发投入力度,推出更多创新产品和技术解决方案以满足不同市场的需求。这些努力使得HUAWEI eKit在全球电子行业中逐渐崭露头角并实现了快速发展。

请注意,由于这些故事是虚构的,可能并不完全符合实际的历史事实。但它们试图捕捉华为坤灵(HUAWEI eKit)在电子行业中的发展轨迹和关键里程碑。

台湾诚阳(BC)公司的发展小趣事

随着国内市场的逐渐饱和,台湾诚阳(BC)公司开始积极寻求海外市场的发展机会。公司通过参加国际展会、与海外企业建立合作关系等方式,不断拓展国际市场。同时,公司还针对不同地区的市场需求,推出定制化的产品和服务,进一步提升了其在国际市场中的竞争力。

CET Technology公司的发展小趣事

随着数字化转型的深入,CET Technology紧跟时代步伐,成功研发出数字化安全生产管控平台。该平台通过整合配电、给水、电梯、消防、空调、安防等各系统,建立统一的安全物联感知平台,实现对安全生产各要素的在线监测。利用3D可视化技术,关键信息得以直观呈现,为企业的安全生产管理提供了有力支持。此外,CET还引入了AI技术,对安全风险进行精准预测,助力企业防范和应对各类安全事件。

问答坊 | AI 解惑

protel dxp注册机

希望对大家有用!!!!!!!!…

查看全部问答>

招聘研发工程师

方向一: DSP6000 开发工程师   职位要求 1.        本科以上学历,电子、自动化等相关专业 2.        熟练掌握 C 语言,熟悉汇编语言。 3.        熟练掌握 DSP 的 ...…

查看全部问答>

Wince 6.0导出SDK成功,新建应用程序却找不到该SDK。

我使用的TQ2440定制WINCE6.0,镜像生成成功,导出SDK都是没有问题,我没有添加MFC的支持,安装SDK也没有问题, 但是在新建的工程里面却找不到,只有一个PLATFORM BUILDER(_TGTCPU),如下图: 后来我发现在OS Design 里面的配置管理器也是这样的 ...…

查看全部问答>

有谁能翻一下下面的术语,拜托了!

reentrant functions 这是什么意思啊!?…

查看全部问答>

借路,谢谢!本人长期从事数字电视及多媒体软件开发,对uClinux,linux系统的内核改造,驱动编写,应用程序等,有精炼的设计开发经验

本人长期从事数字电视及多媒体软件开发,对uClinux,linux系统的内核改造,驱动编写,应用程序等,有精炼的设计开发经验,现有如下服 务业务: 1.嵌入式系统的驱动程序编写。 2.linux系统类内核裁减改造等。 3.媒体类关于图片,电影, ...…

查看全部问答>

(80分请教):armcc 与 arm-elf-gcc的区别?

armcc 与 arm-elf-gcc有什么区别?有能够在Linux环境下使用的armcc吗?如果能提供,可以再加分。 …

查看全部问答>

请问香水城,STM32是否支持通过USB口IAP?

                                 如题.…

查看全部问答>

STM32为何用段时间后不能运行?

我一块板子,使用正常,但使用过一段时间后(1个月左右),就发现不能再运行了,因为没用JTAG,只有在系统刚开始还没配置时钟前就做了段点亮LED的方法,发现,LED既然都不亮,也就是说程序根本就没运行起来。 奇怪的是原来使用正常,现在是能 ...…

查看全部问答>

VHDL仿真时signal的问题

 ELSIF(romout(3 downto 0)=\"0111\")THEN                      dangwei<=temp1;        &nbs ...…

查看全部问答>