51单片机学习笔记:写了个led宏,并尝试控制led灯的亮度
扫描二维码
随时随地手机看文章
经常用led灯来观察现象,甚至调试代码,修改代码时用0和1很不方便,而且阅读性也不好,
故写了个宏,用起来方便些.
今天尝试控制灯的亮度. 先试试for循环控制,占空比调节...
C代码
//#include"my51.h"
#include
typedefunsignedcharu8;
typedefunsignedshortintu16;
#ifndef_51LED_
#define_51LED_
#defineledP1//P1总线连8个led灯,灯连573锁存器,P1置低电平点亮
#defineLEDled
#defineON(x)P1&(~(1<<(x)))//打开某个灯,开多个灯用ON(m)&ON(n)
#defineOFF(x)P1|(1<<(x))//关闭某个灯,关多个灯用OFF(m)|OFF(n)
#defineon(x)ON(x)//包含大小写
#defineoff(x)OFF(x)
#defineledon0//某个灯,打开
#defineledoff1//某个灯,关闭
sbitled0=P1^0;
sbitled1=P1^1;
sbitled2=P1^2;
sbitled3=P1^3;
sbitled4=P1^4;
sbitled5=P1^5;
sbitled6=P1^6;
sbitled7=P1^7;
sbitledLock=P2^5;//锁定当前8个led的状态,0锁定,1不锁定
#endif
voidledCtr(u8ledX,u8per)//参数1是某个灯,参数2是亮度
{
u8i=1;
for(i=1;i<=100;i++)
{
if(i { led=on(ledX);//打开灯 } else { led=off(ledX);//关闭灯 } } } voiddelayms(u16ms)//毫秒级软延时函数 { u16i,j; for(i=ms;i>0;i--) { for(j=113;j>0;j--) {} } } voidmain()//测试 { 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%,省电... } }