一盏灯照亮世界(点灯大法-照亮世界那盏灯)
一盏灯照亮世界(点灯大法-照亮世界那盏灯)参考实验3的项目创建流程,在桌面上“Experiment/Test4/”路径下创建名为【led】的项目工程;在桌面上的【Experiment】文件夹下创建名为【Test4】的文件夹,用于存放本次实验的项目文件关于电阻大小的选择:欧姆定律想必大家都清楚,U=IR,当发光二极管正常导通时,其两端电压约为1.7V,发光管的阴极为低电平,即0V,阳极串接一电阻,电阻的另一端为VCC 为5V,因此加在电阻两端的电压为5V-1.7V=3.3V,计算穿过电阻的电流,3.3V / 1000Ω=3.3mA,即穿过发光管的电流也为3.3mA,若想让发光管再亮一些,我们可以适当减小该电阻。查看原理图,可以知道:LED的正极通过限流电阻后接在VCC5V上,只要给了低电平,那么LED就会亮,低电平对应到单片机的逻辑就是0,只要单片机的某一个管脚输出0,那么对应的发光二极管就会亮。①查看实验平台的原理图,然后找到
编写led流水灯程序,编译并下载到单片机中,实现LED流水灯效果。LED流水灯就是一串LED灯依次点亮,起到变换闪烁的效果,又叫LED跑马灯。LED又称发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。
1、知识基础1.1 理解LED流水灯实现原理8位LED发光二极管电路原理图,如下图所示。
①贴片电阻:一般在都电阻上标有阻值号,如图1.1标号为102 就表示1000欧姆,即1K。102最后数字2表示有两个0,10表示基本数字,即10后面再加两个0=1000Ω。
还有的标号如3R0,表示阻值为3欧姆 4K7表示阻值为4.7KΩ R002表示阻值为0.002欧姆。②发光二极管:它具有单向导电性,通过5mA左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在3 mA-20mA之间。在这里,给发光二极管串联一个电阻的目的就是为了限制通过发光二极管的电流不要太大,因此这个电阻又称为“限流电阻”。当发光二极管发光时,测量它两端电压约为1.7V,这个电压又叫做发光二极管的“导通压降”。图1.2和图1.3分别为直插式发光二极管和贴片式发光二极管实物图。发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为阳极,短脚为阴极。仔细观察贴片式发光二极管正面的一端有彩色标记,通常有标记的一端为阴极。
关于电阻大小的选择:欧姆定律想必大家都清楚,U=IR,当发光二极管正常导通时,其两端电压约为1.7V,发光管的阴极为低电平,即0V,阳极串接一电阻,电阻的另一端为VCC 为5V,因此加在电阻两端的电压为5V-1.7V=3.3V,计算穿过电阻的电流,3.3V / 1000Ω=3.3mA,即穿过发光管的电流也为3.3mA,若想让发光管再亮一些,我们可以适当减小该电阻。查看原理图,可以知道:LED的正极通过限流电阻后接在VCC5V上,只要给了低电平,那么LED就会亮,低电平对应到单片机的逻辑就是0,只要单片机的某一个管脚输出0,那么对应的发光二极管就会亮。
1.3 熟悉硬件电路①查看实验平台的原理图,然后找到 LED发光二极管D4、D5、D6、D7、D8、D9、D10、D11电路以及跟单片机对应的I/O,同时在实验平台上找到相应的器件位置。
软件设计流程图如下图所示:
在桌面上的【Experiment】文件夹下创建名为【Test4】的文件夹,用于存放本次实验的项目文件
参考实验3的项目创建流程,在桌面上“Experiment/Test4/”路径下创建名为【led】的项目工程;
在桌面上“Experiment/Test4/”路径下新建名为【led.c】的项目文件,并将其添加至项目工程中;
编辑【led.c】项目文件,导入头文件,分别定义LED灯对应的单片机引脚;
#include <reg52.h>//此文件中定义了52的一些特殊功能寄存器 通用89C52头文件
sbit D4 = P2^0; //位定义,LED_D4 的引脚位
sbit D5 = P2^1; //位定义,LED_D5 的引脚位
sbit D6 = P2^2; //位定义,LED_D6 的引脚位
sbit D7 = P2^3; //位定义,LED_D7 的引脚位
sbit D8 = P2^4; //位定义,LED_D8 的引脚位
sbit D9 = P2^5; //位定义,LED_D9 的引脚位
sbit D10 = P2^6; //位定义,LED_D10的引脚位
sbit D11 = P2^7; //位定义,LED_D11的引脚位
注:实验中所有代码的编写,如需复制粘贴代码块代码,需要先自行创在桌面创建一个文本文档,使平台中的文档处于中文输入法模式,再将代码粘贴至文本文档(可自行在桌面创建),若文档中已有内容则直接替换原有内容,然后在复制文本文档中的内容粘贴至开发环境。
输入代码后点击保存按钮,保存程序。
3.2 编写延时函数编辑【led.c】项目文件,定义延时函数,为各LED的间隔显示提供时间延迟的功能;
/*******延时函数*************/
void delayms(unsigned int x) //延时
{
unsigned char i;
while(x--)
{
for(i = 0; i < 113; i );
}
}
输入代码后点击保存按钮,保存程序(如有弹框直接点“是”)。
3.3 编写主函数编辑【led.c】项目文件 编写主函数,通过控制LED灯对应引脚的高低电平在主函数中实现LED流水灯的功能;
***** 主函数 *****/
void main()
{
P2 = 0xff; //置P2口为高电平,关闭全部LED灯
while(1)
{
// LED_D4亮
D11 = 1; //关闭LED_D11
D4 = 0; //点亮LED_D4
delayms(500); //调用延时程序 延时500ms
// LED_D5亮
D4 = 1; //关闭LED_D4
D5 = 0; //点亮LED_D5
delayms(500); //调用延时程序 延时500ms
// LED_D6亮
D5 = 1; //关闭LED_D5
D6 = 0; //点亮LED_D6
delayms(500); //调用延时程序 延时500ms
// LED_D7亮
D6 = 1; //关闭LED_D6
D7 = 0; //点亮LED_D7
delayms(500); //调用延时程序 延时500ms
// LED_D8亮
D7 = 1; //关闭LED_D7
D8 = 0; //点亮LED_D8
delayms(500); //调用延时程序 延时500ms
// LED_D9亮
D8 = 1; //关闭LED_D8
D9 = 0; //点亮LED_D9
delayms(500); //调用延时程序 延时500ms
// LED_D10亮
D9 = 1; //关闭LED_D9
D10 = 0; //点亮LED_D10
delayms(500); //调用延时程序 延时500ms
// LED_D11亮
D10 = 1; //关闭LED_D10
D11 = 0; //点亮LED_D11
delayms(500); //调用延时程序 延时500ms
}
}
输入代码后点击保存按钮,保存程序(如有弹框直接点“是”或“确定”)。
4、编译项目程序,生成HEX文件并完成下载4.1 编译项目程序编译程序,完成生成HEX文件设置,并编译项目文件,得到【led.hex】文件;
点击【编译】后,查看软件最下方编译输出框,显示0个错误,0个警告,即为编译成功。编译成功后,在该工程编译输出文件夹中多出一个【led.hex】文件,即为编译生成的HEX文件,工程编译输出文件夹默认为工程文件(led.uvproj)所在的文件夹。如下图所示。