历史上的今天
返回首页

历史上的今天

今天是:2025年12月08日(星期一)

正在发生

2022年12月08日 | 面向单片机编程(二)-开端,点亮第一个LED

2022-12-08 来源:zhihu

上一章中我们已经认识了单片机,并且完成了开发环境的搭建,这章中我们正式开始进入单片机编程的学习,本章的学习目标是点亮一盏LED灯。


一、创建一个Keil工程

1、双击运行Keil uVision5,选择Project->New uVision Project新建一个工程


2、入工程名,【注意】不要用中文,最好路径也不含中文,否则可能会出现未知错误!

3、工程新建后,会弹出一个窗口,让你选择设备信息,由于我们要用的51单片机STC89C52和AT89C52引脚完全兼容,硬件连接基本一样,所以我们可以搜索AT89C52

4、接下来,Keil软件会询问你是否添加STARTUP.A51到当前工程,这个一个用汇编代码写的文件,又叫启动文件,作用是可以让单片机从初始状态进入你的C代码程序。这时,工程已经创建好了,接下来我们写一个简单的main函数,首先选择New,新建一个空白文件


5、新建的文件可以直接点击保存到工程文件夹中,填写文件名称,文件名必须要加上.C后缀。

二、编写C程序代码

C文件创建成功后,即可开始在编辑界面编写程序代码了,首先我们需要开始编写一个简单的主程序:

#include 
sbit led_out = P1^0; //将单片机的P1.0端口定义为led_out
void main()
{
        led_out = 0; //P1.0端口设置为低电平(点亮LED)
        while(1)
        {

        }                
}

reg52.h:表示你调用了52或者51单片机的资源,也就是可以直接对单片机的相关寄存器与引脚进行操作


sbit led_out = P1^0;:sbit是定义特殊功能寄存器的位变量(bit和sbit都是C51扩展的变量类型,即C51特有的,而不是C语言标准变量类型),这里我们只需要把sbit当成一个类型即可,就像char、int,只不过char指的是一个字节,而sbit指的是字节里的一个位。


上面还提到特殊功能寄存器(SFR),SFR是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据,SFR(sfr)也是一种扩充数据类型,占用一个内存单元(1字节)。上面式子中的P1就是一个SFR,在reg52.h中,定义了P1寄存器的地址,如果我们对P1进行赋值,就等同于对51单片机的特殊功能寄存器赋值,而P1对应的功能就是单片机P1.0~P1.7这8个IO引脚的状态(高低电平)。


知道了sbit和P1的含义,那么理解sbit led_out = P1^0;就不难了,即定义P1.0引脚的状态为led_out,P1^0也是C51的特有用法。


^在C语言中是按位异或的作用,但在C51中它多了一个作用,即可以指定寄存器的某一位,前面提到P1是一个1字节的变量,它有8个位,分别对应P1.0~1.7,如果直接对P1赋值,那就等同于同时控制单片机的8个IO端口状态,但是使用P1^x(0<=x<=7),就能单独控制单片机的某一个IO端口。


led_out = 0;:从上面的内容我们可以得知led_out代表了单片机端口P1.0的状态,所以我们对它赋值,就等同于控制P1.0这个IO的电平状态,通过查看开发板的原理图,我们发现如果将P1.0端口置为低电平,那么LED1的正负极就能形成压差,从而实现点亮LED。


while(1){}:这是一个死循环,由于单片机上电后要不停的工作,所以我们不能让main函数结束,而是让它不停地执行while函数内部的工作。


那么说到LED的点亮是通过改变其正负极电压,使之形成压差从而实现LED的点亮,那LED是什么?


三、LED的特性

LED也称为发光二极管,是一种常用的发光器件,它在照明领域应用广泛。 发光二极管可高效地将电能转化为光能,在现代社会具有广泛的用途,如照明、平板显示、医疗器件等。


这种电子元件早在1962年出现,早期只能发出低光度的红光,之后发展出其他单色光的版本,时至今日能发出的光已遍及可见光、红外线及紫外线,光度也提高到相当的光度。而用途也由初时作为指示灯、显示板等;
随着技术的不断进步,发光二极管已被广泛地应用于显示器和照明。——百度百科

上图就是LED的电路符号,通过符号就可以判断出正负极位置,由于电路回路中电流是从正极流向负极的,那么对应上图中三角形箭头剑尖所指向的左边方向就是负极,反之右边就是正极。


使用51单片机点亮LED,我们可以选择用单片机IO端连接LED的负极或正极,如果接LED的负极,那么IO端默认电平需要设置为高电平,LED另一个引脚需要接+5V,10k电阻作用是上拉,当需要点亮LED时,将51单片机对应的IO拉低即可。

四、编译烧录代码

在编译代码之前,我们还要开启生成hex文件的选项,该文件就是我们用来烧录的文件。


接下来就是编译代码,点击Build按纽即可完成编译(从左边数,第一个是预编译,第三个重新编译,第四个是链接,最后一个是停止编译),保险起见,新手在编译时,可以把前三个全部点一遍。

编译结果可以在Build Output窗口查看,这里显示的内容主要包括各个空间的大小

(data——片内ram,

xdata——片外ram ,

code——程序存储区rom)及错误和警告的数量(如果存在,则显示它们所在位置和详情)。下面特别标识的信息表示成功创建hex文件(十六进制可执行文件),一般情况下,出现这行信息,说明程序编译通过(有些时候Error为0,但没生成hex文件,也算编译失败)。

将刚才生成的hex文件烧录到单片机中,即可看到LED亮起来了。

Proteus仿真效果


推荐阅读

史海拾趣

Bytes公司的发展小趣事

Bytes公司自成立以来,始终坚持以技术创新为核心竞争力。公司早期便投入大量研发资源,开发出一款具有划时代意义的电子产品,迅速在市场上占据一席之地。随着技术的不断进步,Bytes公司不断推出更新换代的产品,满足消费者日益增长的需求。同时,公司还积极与高校、科研机构合作,共同研发新技术,为公司的持续发展提供源源不断的动力。

Aromat Corp公司的发展小趣事

随着产品技术的成熟,Aromat Corp开始积极拓展市场。公司加大了对营销和宣传的投入,通过参加行业展会、举办产品发布会等方式提升品牌知名度。同时,Aromat Corp还积极与合作伙伴建立战略合作关系,共同开拓市场,进一步扩大了公司的市场份额。

BOOKHAM公司的发展小趣事

BOOKHAM公司自创立之初,就专注于光学元件的研发和生产。随着电子行业的快速发展,公司不断投入研发资源,终于在一次技术突破中,成功开发出一款高性能的光学元件。这款元件凭借其卓越的性能和稳定的品质,迅速获得了市场的认可,BOOKHAM公司也因此名声大噪,逐渐在电子行业中崭露头角。

思博科技(Cybermax)公司的发展小趣事

在2005年的一个阳光明媚的春天,思博科技(Cybermax)公司在硅谷正式成立。创始人李明,一位经验丰富的电子工程师,看准了当时电子市场蓬勃发展的机遇,决定创办自己的公司。起初,公司只有几名员工,主要致力于研发和生产高性能的电子元器件。通过不懈的努力和优质的产品,思博科技逐渐在市场上崭露头角。

乐鑫(espressif)公司的发展小趣事

面对物联网行业的快速发展和变化,乐鑫科技始终保持前瞻性的战略眼光。公司积极布局未来市场,加大在人工智能、云计算等领域的研发投入,以满足客户对更智能化、更高效的物联网应用的需求。同时,乐鑫科技还注重培养和引进优秀人才,为公司未来的发展提供有力的人才保障。

请注意,以上内容仅为概述性质的故事框架,具体细节和数据可能需要根据实际情况进行调整和补充。

Gore公司的发展小趣事
在电路设计时,合理选择元件参数和电路结构,以减少中点电位不平衡的发生。

问答坊 | AI 解惑

色艺俱佳,华丽丽的notebook们

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 现在在笔记本销售专柜看到笔记本在长相上几乎都差不多,见棱见角的设计、黑白银的配色甚至在体积 和重量上也相差无几。面对如此大众化的风格,现今的时尚男女们怎么能够接受呢?以下我们来看 ...…

查看全部问答>

以奇瑞汽车为例,怎么取出来车速的脉冲信号。

在搞一个试验,和车速有关的。怎么能把车速的脉冲信号取出来呢?在哪里取。别笑话我,我本来就是一外行。…

查看全部问答>

上班了,该收心了

今天我们正式上班了,来到办公室后,大家静悄悄的,每个人都在工作。整个上午,大家都是这样,基本上也没有聊天。看来每个人都进入状态了啊。不过也是,好多事情一下子堆过来,不忙不行啊。 这个年过得太快了,实在是有些意犹未尽。…

查看全部问答>

关于共享内存的理解

windows驱动的共享内存如何理解?谢谢各位…

查看全部问答>

大家用tms320f28335都开发那些产品啊?

你要开发产品? 选用tms320f28335是中意它那些特点啊?…

查看全部问答>

QEMU扯淡。。。。。

本人新手,最近看到QEMU的一些介绍,想扯淡耍一下。    网上关于这方面的资料看了不少,本人安的VMWARE,但一直感觉用起来不耍、 哪位哥子能上一点资料或心得。。。。。。。。。非常感谢了。。。。…

查看全部问答>

Ivor Horton的C++入门经典

当你看到 Ivor Horton时,我想,我说啥都是多余的。话说资源还真难找,费了不小的劲,然后再一次引发对CSDN的愤怒......最后这玩意不是在CSDN上下载的。它是扫描版,清晰度还行,不影响阅读,当然了,比不上那种文件版。挺大的,30来M,,我拆成几个 ...…

查看全部问答>

半导体知识之一(PN结,半导体基本概念,MOSFET)

内容 1.PN结原理: P-N 结的形成和能带 2.电子基本概念 30问:正解 and 误解 3.MOS器件的重要特性之15 个为什么? 上图 …

查看全部问答>

招聘嵌入式软件工程师 - 电池管理行业 - 深圳

职责: 编写软件及客户服务支持 要求: 1.至少5年嵌入式软件工程师经验 2.熟悉电池行业(应用于车载,通信,电力等行业) 3.英文可做为工作语言 4.熟练使用embedded C 5.有客户服务工作经验为佳 感兴趣的朋友,欢迎发送简历至judy.wang@tale ...…

查看全部问答>