c语言编程与嵌入式:单片机控制LED灯的完整代码示例

admin C语言 6


你是不是想试试嵌入式开发,却不知道从哪开始?看着别人用单片机控制 LED 灯闪来闪去,自己却连代码怎么写都摸不着头脑?其实啊,嵌入式入门没那么难,今天兔子哥就带你用 C 语言写一个控制 LED 灯的程序,从硬件连接到代码编写,一步一步来,保证新手也能看懂,一起往下看吧!

先搞清楚:控制 LED 灯需要哪些东西?


要让 LED 灯听单片机的话,硬件和软件都不能少。硬件方面很简单,你得准备这些:
  • 一块单片机开发板(比如 STC89C52,新手常用的)
  • 一个 LED 灯(红的绿的都行,随便选)
  • 一个 220 欧的电阻(保护 LED,别烧了)
  • 几根杜邦线(用来连接各个部件)
  • 一个 USB 下载器(把代码传到单片机里)

可能有人会问,为啥非得用电阻?因为单片机的引脚输出电流比 LED 能承受的大,不加电阻的话,LED 很容易被烧坏。这就像给水管装个阀门,控制水流大小,道理差不多。

硬件怎么接?看这张图就够了


连接方法其实很简单,记住这几点就行:
  1. LED 灯有正负极,长脚是正极,短脚是负极
  2. 正极接单片机的一个引脚(比如 P1.0)
  3. 负极接电阻的一端,电阻另一端接 GND(地线)

要是你怕记混,可以画个简单的接线图贴在旁边,接线的时候对着插,就不容易错了。兔子哥刚开始学的时候,总把正负极搞反,灯不亮还以为是代码错了,后来才发现是线接反了,特别尴尬。

C 语言代码怎么写?从初始化开始


单片机要控制 LED,得先告诉它哪个引脚接了 LED。用 C 语言写的话,第一步是定义引脚,比如我们用 P1.0 这个引脚,就可以这样写:
sbit LED = P1^0; // 定义 LED 接在 P1.0 引脚
然后写个主函数,让 LED 灯亮起来、灭下去,形成闪烁的效果。代码大概是这样的:
#include // 包含单片机寄存器定义
sbit LED = P1^0; // 定义 LED 引脚
// 延时函数,让灯亮一会儿再灭
void delay (unsigned int t) {
unsigned int i, j;
for (i = t; i > 0; i--)
for (j = 112; j > 0; j--);
}
void main () {
while (1) { // 无限循环,让灯一直闪
LED = 0; // 点亮 LED(0 表示低电平,LED 导通)
delay (500); // 延时 500 毫秒
LED = 1; // 熄灭 LED(1 表示高电平,LED 截止)
delay (500); // 再延时 500 毫秒
}
}

代码里的关键地方,得好好说说


可能你会问,为啥 LED=0 是亮,LED=1 是灭?这是因为我们把 LED 的负极接了地,当 P1.0 输出低电平(0)时,电流能从正极流到负极,LED 就亮了;输出高电平(1)时,两边电压差不多,没电流,灯就灭了。要是你接线的时候把正负极反过来,那代码里的 0 和 1 也得反过来,这点要注意。
那个 delay 函数是干嘛的?就是让程序停一会儿。要是没有延时,LED 亮灭太快,肉眼看起来就像一直亮着。j=112 这个数是怎么来的?其实是试出来的,大概能让延时差不多 1 毫秒,t=500 的话就是 500 毫秒,也就是半秒。

怎么把代码传到单片机里?


写好代码后,得用编译器(比如 Keil)生成.hex 文件,然后用下载软件(比如 STC-ISP)通过 USB 下载器传到单片机里。步骤大概是:
  1. 用 Keil 打开代码,编译成.hex 文件(没报错才行)
  2. 单片机开发板接电脑,打开 STC-ISP 软件
  3. 选对单片机型号,找到生成的.hex 文件
  4. 点击下载,然后给单片机上电,就传进去了

要是传不进去,看看是不是端口选错了,或者单片机没接好电。有时候线接触不良也会出问题,多试几次就行。

试试这些扩展功能,更有意思


学会了让 LED 闪烁,还可以试试这些:
  • 让 LED 闪烁得越来越快(改延时时间,每次减一点)
  • 多个 LED 轮流亮(接不同的引脚,依次控制)
  • 用按键控制 LED 开关(加个按键,检测按键状态再控制灯)

有个网友就分享说,他在这个基础上改了代码,让 8 个 LED 轮流点亮,做成了跑马灯效果,特别有成就感。你也可以试试,不难的。
兔子哥觉得,嵌入式开发最有意思的地方,就是能看到自己写的代码真的能控制硬件动起来。刚开始可能会遇到各种问题,灯不亮啊,代码传不进去啊,但只要慢慢排查,解决问题的过程就是进步的过程。
这个控制 LED 的程序虽然简单,但包含了嵌入式开发的基本思路:用 C 语言操作硬件引脚,通过循环和延时实现想要的功能。把这个搞懂了,再学控制电机、传感器什么的,就容易多了。
希望这篇文章能帮到你,赶紧找块开发板试试吧,看到 LED 按照自己写的程序闪烁,那种感觉真的很棒。

标签: 摸不着头脑 接单片机

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~