51单片机——LED模块
LED模块中有8盏灯,从左到右为D1,D2,...,D8
8盏灯以二进制存储在单片机中,它们共同组成一个二进制
0 0 0 0 0 0 0 0
----------------------------------------------
D8 D7 D6 D5 D4 D3 D2 D1
即0位表示D1,1位表示D2,...,7位表示D8
P2端口控制LED模块
1、点亮第一个LED
#include "reg52.h" //"reg52.h":51单片机的头文件
sbit LED1=P2^0; //sbit:数据类型
//P一定为大写,将P2.0管脚定义为LED1
//P2.0管脚默认是高电平(逻辑1)
void main(){
LED1=0; //LED1端口设置为低电平(逻辑0)
while(1){ //在51单片机程序开发中,main函数内通常都会有一个while循环,
//在循环体内不断执行我们所要实现的功能
}
}
2、LED 闪烁实验
#include "reg52.h"
sbit LED1=P2^0;
typedef unsigned char u8; //0-255
typedef unsigned int u16; //0-65535
//当传入ten_us=1时,大约延时10us
void delay_10us(u16 ten_us){
while(ten_us--);
}
//D1指示灯先亮一会后熄灭
void main(){
while(1){
LED1=0; //亮
delay_10us(50000); //大约500ms
LED1=1; //熄灭
delay_10us(50000);
}
}
在51单片机中最常使用unsigned int和unsigned char,其他数据类型不常使用
3、流水灯实验
使用移位和循环实现
#include "reg51.h"
#include "intrins.h"
#define LED_PORT P2 //使用宏定义P2端口
typedef unsigned char u8;
typedef unsigned int u16;
void delay_10us(u16 ten_us){
while(ten_us--);
}
/*
使用前引入"intrins.h"头文件
左移函数:_crol_(LED_PORT,1)
右移函数:_cror_(LED_PORT,1)
*/
void main(){
u16 i=0;
while(1){
LED_PORT=0XFE; //1111 1110
delay_10us(50000);
//8盏灯
for(i=0;i<7;i++){
//左移
LED_PORT=_crol_(LED_PORT,1);
delay_10us(50000);
}
for(i=0;i<7;i++){
//右移
LED_PORT=_cror_(LED_PORT,1);
delay_10us(50000);
}
}
}