如何用单片机点亮一个LED灯(入门基础篇)
这几天主要为大家分享一些元件的基础知识以及在电路的应用,一开始没直接就写单片机之类的,对于单片机来说的,需要我们有一些基础,在应用中不但涉及到模拟电子技术也包括数字电子技术,对于从未接触这方面的人员来说,理解起来是有些难度的,为了能让大家都明白,我们还是先学习下它的基础应用。
今天我们使用的单片机芯片为STC89C52,他和俗称51单片机使用方法一样,就是内存大小不一样而已,在我国大部分人入门单片机是从51开始的,在国外用的最多的是Arduino,这也不是绝对的,考虑到大部分人群,我们今天就用51单片机来讲解。
一提到单片机,没有接触过的会产生一个疑问 ,什么是单片机?
STC89C52芯片
官方解释为:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
简单的理解他就是一个集成电路(内部有很多复杂电路),他能控制许多模块,单片机就像人的大脑,我们做什么是都是由大脑控制,因此单片机的发明使自动化智能化更近了一步。
如果问你如何让一个LED亮的话,可能你想到最直接的方法就是把LED的正极连在VCC,负极连在GND,如果电流太大,可以串联一个电阻起到限制电流的作用;在单片机中道理也是如此,通常我们把LED正极经过串联一个电阻直接连在电源正极,然后另一端接在单片机上。
由原理图可以看出,只要我们把P1^0这个端口接地就行了,因此我们所做的工作就是用单片机能够理解的语言把P1^0这一个端口接地,这就得需要编程,这里就不多介绍编程,回来专门写一篇文章关于编程的文章,这里把程序直接展示出来。
#include<reg52.h>
sbit LED=P1^0;
main()
{
while(1)
{
LED=0;
}
}
这个程序很简单,单片机会一直循环执行LED=0这个语句(在数电中可以简单理解为=0就是接电源负=1就是接电源正),意思就是让P1^0这个端口接地,这样就能使LED一直点亮。
用的贴片展示的效果
一开始学单片机的时候都会从点亮一个LED灯开始做起,就像我们学编程输出一个HELLO WORD一样,大家也不要小瞧LED灯,其实我们生活中很多地方都用到了,像流水灯,交通信号灯,广告牌,甚至连显示屏都会用到LED灯,如果你能够足够熟练操作LED,还是前途无量的。
单片机入手还是比较容易的,如果想熟练应用的话,还是有一定难度的,但是只要我们坚持下来,我相信你就能够熟练开发应用,我会每天发布一些这方面的文章,大家可以关注下,我祝大家能够取得成功!
单片机简单快速入门篇 第四章 点亮一个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灯,首先需要将LED连接到单片机的一个IO口上。然后,通过编程设置该IO口为输出模式,并将其输出电平设置为高电平。下面是一个基于51单...
51 单片机LED灯点亮 的c语言编程方法?/*程序详细功能介绍:*利用取表的方法,使端口P0做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。*在用表格进行程序设计的时候,要用以下的.../*...
单片机 流水灯8盏 LED灯 用汇编语言实现p1口首先 点亮 3,4,5,6。后向左移动,间隔时间1.4s?先做个1.4s的延时子程序;再设计主程序,一个一个的实现8个LED的闪亮。先做个1.4s的延时子程序;再设计主程序,一个一个的实现8个LED的闪亮。
求 单片机 89C52编程要求是,P1口的四个 LED灯 循环 点亮 , 点亮 时间为1秒,用定时计数器实现延时1秒的 程序 ?没分的话就不答具体的了,你随便找本书都有模块,你要是P1口接LED再接限流电阻,最后把所有电阻都连在5V电压的话,那就先给11111110给P1,用RR来循环,再写一个...
51 单片机 c语言编程 led灯 1,3,5,7和2,4,6,8交替闪烁?假设你的8个LED是通过低电平来点亮,即LED负极连接P口,正极连接电源:1.当1,3,5,7亮时,我们的P2口状态以二进制表示应该是10101010,也就是0xAA,程序应该写成...
求 单片机 设计8个 led灯 同时闪烁的 程序 ?八个灯接在单片机的P1口(P0,P2,P3,P4都一样)while(1){delay(你想要延时的时间);P1=0xff;delay(你想要延时的时间);P1=0;}注意led最好加驱...
单片机 C51语言如何实现用P2口控制8只 LED 左循环流水灯亮?soeasy。P2=0x01,然后P2=_cror_(P2,1);delayMS(uintx);这就行了soeasy。P2=0x01,然后P2=_cror_(P2,1);delayMS(uintx)...
单片机 控制的 LED 动态扫描显示原理?现已DS8为个位来讨论,十、百、千为分别为DS7、DS6、DS5。1、首先要了解的是此数码管为共阴极数码管,即三极管Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相...
求 单片机 通过串口控制 LED 小灯亮灭的 程序 ,求源码,谢谢?题意没说的太清楚,随便写一个吧。#includesbitled=P1^0;main(){unsignedchardat;TMOD=0x20;TH1=0xfd;TL1=0xfd;...
单片机 如何控制一个 LED灯 闪烁频率不断加快?暂时想到两种解决方案:1.最简方案——利用延时函数:进入主函数后,初始化LED,设置一个延时初始值,然后进入while循环,里边只做四件事,打开LED,利用键盘返回...