控制LED灯发光
LED:是发光二极管,一种半导体固体发光器件。对于普通发光二极管(又称LED)来说,红黄等暖色光LED一般是1.8至2.2V,蓝绿等冷色光LED一般是3.0至3.6V。
不过发光二极管一般需要注意的不是其工作电压,而是要限定工作电流。一般普通的指示用LED正常工作电流为5-10mA,过高的工作电流将会引起LED节温超限而烧坏。
LED工作原理:LED的工作是有方向性的,只有当正极接到LED阳极,负极接到LED阴极的时候才能工作,如果接反是不能正常工作的。在开发板上面LED的原理图如下,LED的阳极串联一个电阻,然后连接到电源VCC,而LED的阴极连接到单片机的P2口,如果你想点亮一盏LED,就得把单片机相对应的IO赋为低电平。
C语言程序简单框架:
#include "reg52.h" //将P20口赋给led变量 sbit led = P2^0; void main() { while(1) { //将P20端口置为低电平 led = 0; } }
程序书写完成,进行编译、生成hex文件;最后下载到开发板实际运行。
#typedef的使用:typedef unsigned char u8; typedef unsigned int u16;(后面要加分号)将unsigned char重命名为u8,将unsigned int重命名为u16。
重定义一些常用的关键词,可以增强程序的可移植性,因为在不同的编译软件上面,C语言的数据类型的关键词的位宽是不一样的。
LED灯闪烁的简单程序:
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit led=P2^0; //D1 void delay(u16 i) { while (i--);//循环一次大约10us } void main() { while(1) { led=0; delay(50000); //不可以超过65535 led=1; delay(50000); } }
利用仿真计算延时函数所用的时间:打开Target Options / Target / Xtal改为12.0(因为开发板上的晶振频率是12MHz),然后计算前后的时间差就可以了。
C语言常用的预处理命令:#define A P0(即用A表示P0)
循环左移右移函数:_crol_(a, b); 循环左移函数,a是左移的值,b是左移的位数。包含在instrins.h库函数里面。
_cror_(a, b); 循环右移函数,a是右移的值,b是右移的位数。包含在instrins.h库函数里面。
LED流水灯的简单程序:
#include "reg52.h" #include <intrins.h> //这两种方式都可以 typedef unsigned char u8; //占用一个字节 typedef unsigned int u16; //占用两个字节 #define led P2 void delay(u16 i) { while(i--); } void main() { u8 i=0; led=0xfe; delay(50000); while(1) { for(i=0;i<7;i++) { led=_crol_(led, 1); delay(50000); } for(i=0;i<7;i++) { led=_cror_(led, 1); delay(50000); } } }