51单片机基础入门(2)点灯大师:单个LED点亮、多个LED点亮、流水灯(附程序代码、解析)

您所在的位置:网站首页 51单片机八个灯的流水灯代码keil 51单片机基础入门(2)点灯大师:单个LED点亮、多个LED点亮、流水灯(附程序代码、解析)

51单片机基础入门(2)点灯大师:单个LED点亮、多个LED点亮、流水灯(附程序代码、解析)

2024-07-11 13:22| 来源: 网络整理| 查看: 265

点亮LED 一、LED基本概念二、LED工作参数三、LED原理图分析四、实践编程

一、LED基本概念 什么是LED

LED(light-emitting diode): 发光二极管

是一种常用的发光器件

发光二极管可高效地将电能转化为光能,可以将电信号转换为光信号的发光器件

特点:功耗低、高亮度、色彩鲜艳、抗震动、寿命长

直插式

可以看出图片上的LED灯引脚有长短之分,记住口诀

长正短负(长的代表正极,短的代表负极)

贴片式

根据封装不同,实际大小不同

怎么看贴片式LED灯正负极呢?

LED灯有一头为绿色,就意味着这头是负极,另外一头就是正极

二、LED工作参数 LED工作参数

LED灯在电路图中的符号为:

它具有二极管的基本特性:正向导通,反向截止。要想点亮LED,那么需要从正向流过工作电流

普通发光二极管工作压降为:1.6v ~ 2.1v

工作电流为:1~20mA

三、LED原理图分析 LED原理图分析

通过电路原理图可以得出:要点亮开发板上LED灯,只需要控制P1口输出低电平即可(编程时,给P1口赋值“0”)

四、实践编程 keil4软件使用(建立工程、.c文件)

打开软件发现没有Project和Build Output怎么办?

如何在Keil4中进行编程

1、建立工程文件

2、建立一个.c文件

3、添加新建的C文件到工程中

点亮第一个LED灯

在Keil4中

在烧录软件中

根据自己单片机的型号进行选择 我的单片机是stc89c52选择自己usb的串口号(串口号可以百度怎么查 不知道怎么查 私信我)选择内部扩展RAM可用勾选所圈出的地方(2个地方都圈出来)打开之前在Keil uVision4中建立好的文件点击下载/编程就可以烧录进单片机了

点亮第一个LED

//引用51头文件 #include //位定义 sbit LED1 = P1^0; //主函数 void main() { LED1 = 0; }

开发板上第一个LED灯亮了

如果我们给LED1一个高电平呢?

//引用51头文件 #include //位定义 //sbit 标识符 = 地址值 //P必须为大写 sbit LED1 = P1^0; //主函数 void main() { LED1 = 1; }

发现只有电源指示灯是亮着的,LED1的灯熄灭

同时点亮LED2,LED3,LED5

#include sbit LED2 = P1^1; sbit LED3 = P1^2; sbit LED5 = P1^4; void main() { LED2 = 0; LED3 = 0; LED5 = 0; }

LED闪烁

常用的延时方法有:

软件延时:使用简单,但是耗费CPU时间

定时器延时:给定时器配值,到达指定时间后,执行熄灭

没有熄灭效果的LED

#include int main() { while(1) { //点亮P1口8个LED P1 = 0; } }

有熄灭效果的LED

#include int main() { while(1) { //点亮P1口8个LED P1 = 0; //熄灭P1口8个LED P1 = 0xff; } }

我们可以发现加了熄灭效果的灯会更暗一点(图片上显示不清,肉眼也很难看出来,但实际就是加了熄灭效果的会更暗一点)

LED闪烁

#include unsigned int i; //main函数自身就会循环 void main() { while(1) { i = 65535; P1 = 0; //while用于延时 while(i--); P1 = 0xff; //while用于延时 如果这里的while没有 就会造成熄灭的时间很短 通过肉眼很难察觉出熄灭 while(i--); } }

unsigned int i; 数据类型 变量名

变量是在程序执行过程中其值能不断变化的量。

在使用一个变量之前必须进行定义,用一个标识符作为变量名,并指出它的数据类型

while(1) {} 只有当while后面圆括号内条件表达式的值为真时,程序才会重复执行花括号内语句,当条件表达式为假时则不执行花括号内语句

IO口与一个字节位的对应关系

同时点亮LED2,LED3,LED5(利用IO口与字节对应关系)

#include void main() { while(1) { P1 = 0xe9; } }

流水灯 #define uchar unsigned char

利用define进行宏定义

注意宏定义后面不能加分号,它是预处理指令不是语句

“uchar”直接替换了"unsigned char"

此时,uchar i;等价于unsigned char i;

//函数定义 void delay(unsigned int z) { unsigned int x,y; for(x = z; x > 0; x--) { for(y = 114; y > 0 ; y--); } } //函数调用 delay(100);

函数就是将多条语句集合在一块,来完成一种特定功能

函数分为标准函数和用户自定义函数

标准函数库:keil编译器提供的,不需要用户进行定义

自定义函数:用户根据自己需要编写的函数,它必须在使用前先定义

void delay(unsigned int z)

void 函数返回类型

delay 函数名

unsigned int z 形式参数

unsigned int x,y 定义局部变量

**for(x = z; x > 0; x–) { for(y = 114; y > 0 ; y–); } ** 函数体语句

delay(100); 延时100ms

#include void test_crol (void) { unsigned char a; unsigned char b; a = 0xFE; b = _crol_(a,1); c = _cror_(a,1); }

#include 头文件,里面有一些库函数,包括

字符型循环左移函数_ crol _(a,b) a代表参与运算的数值 b代表循环左移的位数

字符型循环右移函数_ cror_(a,b)

a = 0xFE; b = a


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3