点亮LED
低电平(1)LED变亮,高电平(0)LED不变亮,引脚默认低电平
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;
void main()
{
while(1)
{
led1=1; //P0.0端口设置为低电平
led2=0;
led3=1;
led4=0;
led5=1;
led6=1;
led7=0;
led8=1;
}
}
实验现象:D11、D13、D15、D16、D18灯变亮,D12、D14、D17灯不变亮
LED灯闪烁
自定义延迟函数,变化LED的电平高低。
typedef用法详见http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;
void delay(u16 i) //延迟函数
{
while(i--);
}
void main()
{
while(1)
{
led1=1; //P0.0端口设置为低电平
led2=0;
led3=1;
led4=0;
led5=1;
led6=1;
led7=0;
led8=1;
delay(50000);
led1=0;
led2=1;
led3=0;
led4=1;
led5=0;
led6=0;
led7=1;
led8=0;
delay(50000);
}
}
实验现象:LED灯闪烁
LED流水灯
#define与typedef的用法与区别http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html
_crol _(a,b);循环左移函数,a是左移的值,b是左移的位数。包含在instrins.h库函数里面。
_cror _(a,b);循环右移函数,a是右移的值,b是右移的位数。包含在instrins.h库函数里面。
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include <intrins.h> //左右移函数
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define led P0
void delay(u16 i) //延迟函数
{
while(i--);
}
void main()
{
u8 i;
led=0x01;
delay(50000); //大约延时450ms
while(1)
{
for(i=0;i<8;i++) //将1右移到第i位,然后将结果赋值到P0口
{
P0=(0x01<<i);
delay(15000);
}
for(i=6;i>0;i--) //将1左移到第i位,然后将结果赋值到P0口
{
P0=(0x01<<i);
delay(15000);
}
led=0x01;
delay(15000);
for(i=0;i<7;i++) //将led左移一位
{
led=_crol_(led,1);
delay(15000);
}
for(i=0;i<6;i++) //将led右移一位
{
led=_cror_(led,1);
delay(15000);
}
}
}
实验现象:一排LED灯来回闪烁