51单片机基础入门(2)点灯大师:单个LED点亮、多个LED点亮、流水灯(附程序代码、解析) |
您所在的位置:网站首页 › 用51单片机实现红外遥控灯闪烁 › 51单片机基础入门(2)点灯大师:单个LED点亮、多个LED点亮、流水灯(附程序代码、解析) |
点亮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 |