单片机简单快速入门篇 第四章 点亮一个LED灯
看到这个标题,想起了墨镜王电影的一句台词,“凭一口气,点一盏灯,有灯就有人”,不知道是不是所有的单片机教程,第一个实验都是点亮一盏LED灯。希望每一个点亮LED灯的初学者都能学有所成,“念念不忘,必有回响”!
上节我们已经建立了一个事例工程文档,现在就不必要再重新建一个了,直接把例程文件夹复制粘贴一个,把文件夹名称改为“LED实验”,然后进入文件夹打开工程文件,.uvproj文件,点击如图所示的图标
在弹出的对话框里面,选择“output”,在“Create HEX”选项前面打✓,打钩后,编译时才能生产.HEX程序烧写文件,在“Name...”里面输入HEX文件的名称“LED”。
OK,软件的准备工作已经完成,下面是准备硬件,单片机一定要中西医结合,才能疗效快,不对,是软硬件结合才能见效快。学习单片机一定要买一块开发板(我不是卖开发板的,只是陈述一个事实)或者动手焊一块单片机最小系统。光看不练假把式!要实干!要实干!要实干!重要事情说三遍!毕竟俗话说的好,阅片千遍不如约女一日。在这里我要强调一下这是一篇非常严肃的技术教程。好了废话不多说,要点亮一个LED灯,除了单片机最小系统外,只要一个电阻和一个LED,如图所示,LED阳极接5V电压,阴极接电阻,电阻另一端接单片机P2.0脚。
图中LED1如何点亮呢?很简单电阻R1的1端电压为0V,电流从高电压流向低电压,LED1亮。当R1的1端电压为5V时,LED1熄灭。那么单片机如何才能输出0V和5V。上节已经讲过了,单片机的世界只有0和1,对于单片机而言0代表低电平,也就是0V,1代表高电平,也就是5V,至于3.3V单片机和单片机管脚对高电平和低电平的识别范围,我们在这里先不讨论。那么现在又回到程序上来了,怎么把低电平0输出到单片机的P2.0脚呢?
我们每个人都有一个名字,别人叫你名字就知道是找你了,当然你的名字也许并不只有一个,比如花名,据说阿里巴巴每个员工都要取一个花名,很多时候花名更加能代表一个人的特性,也更容易记。以上并不是废话,要想学好编程就必须要爱上取花名。马云说,不喜欢取花名的程序员不是好的阿里巴巴员工。好像又偏题了。还是直接上图吧,点击编译后,在main.c的文件左边会出现一个➕号,点击➕号,就可以看到一个STC89C5XRC.H的文件,双击打开,可以看到一大堆“等式”,这里面=的右边就是所有stc89c5x系列单片机所能使用的资源,=的左边就是stc官方给取的花名。
我们找到P2,其中,P2^0就是P2.0在程序里的名称,P20则是官方指定花名。
那么,给P2.0脚输出低电平,点亮LED1就很简单了P20=0,=号在这里不是P20等于0的意思,而是把0赋值给P20,通俗来讲就是P20就像一个框,把0装到框里面,当然,这个框比较小,只能装下0或者1,并且一次只能装一个。程序如下图
或者
这两个有什么区别呢?对于结果来说,似乎是没有区别的,都能点亮LED1,对于单片机的执行来说,是有区别的,一次和无数次的区别。也就是1中单片机的CPU只执行一次P2.0的赋值操作,而2中则赋值了无数次。所以我选程序2,无数次嘛,反正不要钱。(再次强调一下,这是非常严肃的技术教程!)通常来说,两个都可以,但是,在有些强干扰环境下,比如产品要过安规或者EMC时,LED1可能会受干扰而熄灭,所以程序1可能熄灭后不亮了,而程序2在干扰结束后会重新点亮,如果干扰信号时间比较短,短到人的眼睛反应不过来时,在肉眼看来,LED1是没有熄灭的。可能现在说安规和EMC对于初学者来说还太过遥远,但是现在先有个印象,养成个好习惯,以后真遇到问题时,回想起来,可以多个思路。
好了,编译下载,LED1灯亮,课程结束!NO!NO!NO!先别急,作为一个优秀的程序员,怎么能不取花名就结束了呢!这不是为了装2号字母,而是从开始就要养成好的习惯,不能因为程序简单就敷衍了事,好的习惯是从一点一滴做起的。顺便再说一句,刚开始的计算机程序就是真的只有0和1的,这就是机器语言,后来因为0/1的机器语言太难读懂,所以把其中的一些0/1组成的指令取了一个简单的花名,就成了汇编语言,然而,汇编语言还是比较难用,又把一个汇编指令或者几个汇编指令一起取了一个更加简单明了的花名,就成了C语言。可见取花名的重要性。
至于程序中的那句注释,请听我解释。以前不会编程之前,看到别人满篇都是英文的程序,觉得好劝退,英语不好怎么办?能不能学编程啊?后来才知道真正的C语言的语句就那么几句,还是很简单的英文单词,不会英语也很容易记住并熟练掌握。所以满篇的英文其实都是程序员自己定义的。如果英文不是很好,而程序又不用给外国人看的话,用汉语拼音也是一样一样的。至于说用英文更加高大上,呵呵,骚年,现在都已经2021了!
最后一定要把编译好的LED.HEX文件下载到单片机里,看运行效果。我自己都把这个程序烧写下去执行了。不要觉得这么简单,光看就会了,再次强调一下,学习单片机一定要动手实践!动手实践!动手实践!不实干,永远也不知道自己是几分几秒!再再次强调一下,本文是一篇非常严肃的技术教程!
未完待续。。。
单片机汇编语言利用查找表法实现任意LED闪烁
单片机汇编语言利用查找表法实现任意LED闪烁,要点提示:
访问ROM指令--查表指令
MOVC A,@A+DPTR
使用该指令时要事先设置:
(1)表格地址指针,并对地址指针赋初值;
(2)查表计数器,并对计数器赋初值。
(3)设置表格,用到DB汇编伪指令。
(4)完整程序:
相关问答
汇编语言 单片机 一个开关控制一盏 LED 的亮灭-ZOL问答不知道你用什么样的单片机,百度一下吧。很多的。3条回答:【推荐答案】ORG0000H;复位启动AJMPSTART;;主控程序========================START:S...
单片机 用 汇编 语言编写用一个控制器控制8个 LED灯亮 ?ORG0000HLJMPMAINORG000BHLJMPT0ISRORG0030HMAIN:MOVTMOD,#01HMOVTH0,#HIGH(65536-50000)MOVTL0,#LOW(65536...
单片机 数字钟毕业中期检查表中的一个问题 - 沈禾欣子 的回答...你问什么问题??淮安信息职5261业技术学院综合毕业实践说明4102书(论文1653)2009-2010学年系专业摘要:数字电子时钟电路设计系统,以AT89C51单片机为...
单片机 为什么可以读懂 汇编 和C语言?每个芯片都有其支持的指令集(二进制码,在计算机内部以高电平和低电平表示),芯片本身是不“认识”汇编语言和C语言的,所有高级语言和汇编语言编写的代码都会...
单片机 INCR0得到什么结果?寄存器寻址:就是指令中将指定的寄存器的内容作为操作数。INCR0R0是51单片机的一个特殊寄存器。INCR0的意思是将R0中的数自加一。单片机汇编指令...寄存器...
单片机 用C语言编程很好学,为什么还要用 汇编 呢?现在一般单片机都支持C语言和晦涩难懂的汇编语言,在许多介绍单片机应用技术的教材中有相当一部分是用汇编语言编写的这说明汇编语言在学习单片机和编写单片机程...
问两个关于 单片机汇编 指令的题!1、若A=78H,R0=34H,(34H)=DCH...[最佳回答]1(1)A=ACH,Cy=0;(2)A=54H,Cy=1;(3)A=23,Cy=1;(4)A=CE,Cy=0;2(1)~~~~~~~~~~太多了没耐心写下去了,挺简单就是按位与然后把结果存放到前面的变...
51 单片机汇编 语言中的“$”代表什么意思?代表当前的指令所在的地址举个例子来说,在0050H处定义了几个字节数据0050H:01H,02H,03H,04H那么下一条指令的地址应该为0054H,若下一条语句为COUNTEQU$-00...
Ac是什么意思 单片机 ?单片机AC(PSW.6)是辅助进位或辅助借位,用于BCD码的十进制调整运算。OV(PSW.2)是溢出位。在执行算术指令时,指示运算是否产生溢出。单片机汇编语言中YC(PS...
【从这两段 单片机汇编 程序来看,RR,RL和RRC,RLC在这里区别不...[最佳回答]不一样,不带C的循环,就A里的8位数据自循环,移动8次,循环一周.带C的就不一样,移动一次,C的状态会移入A,而A的移出的位会移进C.就是C参与了移动,所以C...