0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51单片机使用C语言点亮闪烁LED灯

天才小狸花 来源:Sigle_chip 作者:Sigle_chip 2022-08-16 08:59 次阅读

导语

下面是点亮51单片机使用C语言闪烁LED灯的的一段代码,也是我们迈入C51的第一步。我们将从头开始,一步步讲解下面的程序。

#include

#define uchar unsigned char
#define uintunsigned int

sbit LED= P1^0;

void main()
{
LED=0;
while(1)
{
LED=0;
delay(1000);
LED=1;
delay(1000);
}
}

void delay(uchar ms)
{
uint x=0, y=0;
for(x=xms;x>=0;x--)
for(y=110;y>=0;y--);
}

.C to .Hex

在从编写的上述文本程序到实际烧录到单片机的Hex二进制机器语言,keil这个大家伙帮我们做了很多的东西。

单片机可以看作是一个功能完全的计算机,同计算机一样,单片机只能识别机器语言。也就是用二进制代码表达指令,但更确切一点来说,机器语言是由高低电位构成的,指定高电位为1,低电位为0,而我们对电路进行一定的设计后,电路中高低电位的输入输出正好与2进制状态相符,所以我们也就看到了 1、0的那种表现形式。

同时,为了简化二进制的表现形式,我们使用16进制来表示,即Hex文件。

但编写机器语言太过繁琐,人们开始用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。这就是汇编语言,但低级,不具有移植性,能直接访问计算机硬件,效率高,占用资源少,学习入门较为困难,切移植性差。

C语言是一种高级编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示,有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。

所编写的C语言通过Keil进行预处理,编译,链接等就生成了Hex文件,我们将Hex文件烧录到单片机中,复位就运行起来了。

预处理

预处理以#开头,在从.C到 .hex之前,扩展C语言程序设计的环境。

#include 的作用将 reg52.h文件复制到编译的源文件中,使用<>或" "包含文件名。

#define uchar unsigned char的作用是将unsigned char替换为uchar。

也常用#define定义一些函数宏、常量等。如#define PI 3.14、#define ABS(x) (x)<0?-(x):(x)

还有更多的预处理方式,暂无必要,勿增新知。

变量

变量格式

[存储种类]数据类型[存储器类型]变量名表 赋值;

其中存储种类和存储器类型在初学时不必了解,编译器会自动的赋予默认值。

变量名是C51区分不同变量,为不同变量取的名称。在C51中规定变量名可以由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。

数据类型用于向单片机申请内存大小,也决定了变量的数值范围。在单片机的内部是以字节为操作,一个字节八个位,即一个字节所表示的数据范围在 0000 0000到 1111 1111;在此,二进制没有符号位,于是人为的使用最高位表示符号位,1为负,0为1;即表示范围为 1111 1111到 0111 1111,即十进制的-128到127。但大多数时候,单片机很少用到赋值,因此我们在数据类型前加上修饰符unsigned来去掉符号位。

在C语言中,无法直接去操作变量中的单独的某一位,但C51中添加了bit位,是 c51编译器的一种扩充数据类型,利用它可定义一个位标量,它的值是一个二进制位,不是 0就是 1,sbit同样是单片机c语言中的一种扩充数据类型,利用它能访问芯片内部的 RAM中的可寻址位或特殊功能寄存器中的可寻址位。

函数

void main()和 void delay(uchar ms)都是函数;

返回类型函数名(数据类型形参名称...){
功能代码;
}

函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、方法。

void表示没有返回值,大多数的情况下,我们将使用void修饰的函数,也可以使用有返回值的方式返回uint等;

其中main()是每一个函数中最重要的,单片机开机复位后将运行main()函数,当他执行完后,程序将会从头开始,我们不希望这样,因此我们添加了

while(1){

}

这时一行循环语句,并且是一个死循环,即会一直循环{ }内的程序。

delay()是一个延时函数,我们向括号中填写ms,程序便会赞同多少ms,他用于实现的延时的子功能;

运算符

LED=0;

给led赋值0,即将右边的值填入左边,填入的值不应超过数据类型的表示范围。

y--

运行过后,y将减少1;

y>=0

布尔运算,只有两个值,0或 1,大于0为真1,反之为0。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23234

    浏览量

    660469
  • 51单片机
    +关注

    关注

    274

    文章

    5702

    浏览量

    123460
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136615
收藏 人收藏

    评论

    相关推荐

    使用51单片机点亮LED的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机点亮LEDC语言程序免费下载。
    发表于 09-02 17:28 0次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>点亮</b><b class='flag-5'>LED</b>的程序免费下载

    51单片机的两种方法点亮LEDC语言程序免费下载

    本文档的主要内容详细介绍的是使用51单片机的两种方法总线操作和位操作点亮LEDC语言程序免费下
    发表于 08-19 17:31 1次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>的两种方法<b class='flag-5'>点亮</b><b class='flag-5'>LED</b>的<b class='flag-5'>C</b><b class='flag-5'>语言</b>程序免费下载

    使用51单片机闪烁LED的代码免费下载

    本文档的主要内容详细介绍的是使用51单片机闪烁LED的代码免费下载。
    发表于 07-03 17:41 2次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>闪烁</b><b class='flag-5'>LED</b><b class='flag-5'>灯</b>的代码免费下载

    使用单片机实现不同频率闪烁1个LEDC语言程序实例免费下载

    本文档的主要内容详细介绍的是使用单片机实现不同频率闪烁1个LEDC语言程序实例免费下载。
    发表于 11-06 17:11 9次下载
    使用<b class='flag-5'>单片机</b>实现不同频率<b class='flag-5'>闪烁</b>1个<b class='flag-5'>LED</b><b class='flag-5'>灯</b>的<b class='flag-5'>C</b><b class='flag-5'>语言</b>程序实例免费下载

    使用单片机实现不同频率闪烁多个LEDC语言程序实例免费下载

    本文档的主要内容详细介绍的是使用单片机实现不同频率闪烁多个LEDC语言程序实例免费下载。
    发表于 11-06 17:11 15次下载
    使用<b class='flag-5'>单片机</b>实现不同频率<b class='flag-5'>闪烁</b>多个<b class='flag-5'>LED</b><b class='flag-5'>灯</b>的<b class='flag-5'>C</b><b class='flag-5'>语言</b>程序实例免费下载

    使用单片机点亮多个LED的方法C语言程序实例免费下载

    本文档的主要内容详细介绍的是使用单片机点亮多个LED的方法C语言程序实例免费下载。
    发表于 11-06 17:11 17次下载

    单片机led闪烁实验总结_单片机学习之C语言点亮控制led

    C语言是学习单片机的过程中必须要经历的一个环节,但是并不是说学习单片机C语言就要像
    发表于 11-14 12:36 0次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>led</b><b class='flag-5'>灯</b><b class='flag-5'>闪烁</b>实验总结_<b class='flag-5'>单片机</b>学习之<b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>点亮</b>控制<b class='flag-5'>led</b><b class='flag-5'>灯</b>

    51单片机学习笔记之LED闪烁

    51单片机学习笔记之LED闪烁
    发表于 11-14 16:51 3次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>机</b>学习笔记之<b class='flag-5'>LED</b><b class='flag-5'>灯</b><b class='flag-5'>闪烁</b>

    51单片机如何跳出wile循环_51单片机闪烁LED

    闪烁LED 51单片机是较为简单的8位单片机,意思是一次能处理8位2进制数据。这一
    发表于 11-23 10:06 21次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>如何跳出wile循环_<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>闪烁</b><b class='flag-5'>LED</b><b class='flag-5'>灯</b>

    51单片机 LED点亮闪烁以及流水灯实现

    51单片机学习初体验,点亮第一只LED和让其闪烁,用四种方法实现流水灯。
    发表于 11-23 16:51 35次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>  <b class='flag-5'>LED</b><b class='flag-5'>点亮</b>、<b class='flag-5'>闪烁</b>以及流水灯实现

    51单片机——点亮一个LED

    51单片机——点亮一个LED文章目录51单片机——
    发表于 11-23 18:06 16次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>——<b class='flag-5'>点亮</b>一个<b class='flag-5'>LED</b><b class='flag-5'>灯</b>

    基于89C51单片机的不同频率闪烁1个LED源程序

    基于89C51单片机的不同频率闪烁1个LED源程序
    发表于 05-16 09:44 9次下载

    基于89C51单片机的不同频率闪烁多个LED源程序

    基于89C51单片机的不同频率闪烁多个LED源程序
    发表于 05-16 09:43 2次下载

    基于单片机点亮LED

    单片机点亮LED就像用C语言输出“hello world”一样,是入门的第一课。
    的头像 发表于 05-24 14:25 1811次阅读
    基于<b class='flag-5'>单片机</b><b class='flag-5'>点亮</b><b class='flag-5'>LED</b><b class='flag-5'>灯</b>

    怎么采用C语言编程序通过单片机的I/O端口点亮一个LED

    怎么采用C语言编程序通过单片机的I/O端口点亮一个LED? 
    的头像 发表于 09-02 17:05 3406次阅读