经常用led灯来调查现象,乃至调试代码,修正代码时用0和1很不便利,并且阅览性也欠好,使用个宏,用起来便利些。
今日测验操控灯的亮度. 先试试for循环操控,占空比调理…
c代码
//#include my51.h
#include
typedef unsigned char u8;
typedef unsigned short int u16;
#ifndef _51LED_
#define _51LED_
#define led P1 //P1总线连8个led灯,灯连573锁存器,P1置低电平点亮
#define LED led
#define ON(x) P1(~(1(x))) //翻开某个灯,开多个灯用 ON(m) ON(n)
#define OFF(x) P1|(1(x)) //封闭某个灯,关多个灯用 OFF(m)| OFF(n)
#define on(x) ON(x) //包括大小写
#define off(x) OFF(x)
#define ledon 0 //某个灯,翻开
#define ledoff 1 //某个灯,封闭
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
sbit ledLock=P2^5; //确定当时8个led的状况,0确定 ,1不确定
#endif
void ledCtr(u8 ledX,u8 per) //参数1是某个灯,参数2是亮度
{
u8 i=1;
for(i=1;i=100;i++)
{
if(i
{
led=on(ledX) ; //翻开灯
}
else
{
led=off(ledX); //封闭灯
}
}
}
void delayms(u16 ms) //毫秒级软延时函数
{
u16 i,j;
for(i=ms;i>0;i–)
{
for(j=113;j>0;j–)
{}
}
}
void main() //测验
{
led6=ledon; //翻开6号灯,亮度100%
led=on(0); //翻开0号灯,亮度100%
led=on(1) on(5); //翻开1号和5号灯,亮度100%
delayms(2000);
led0=ledoff; //封闭0号灯
led=off(6)|off(1)|off(5);//封闭1,5,6号灯
while(1)
{
ledCtr(2,5); //仅翻开2号灯,亮度5%, 省电…
}
}