51單片機學(xué)習(xí)筆記:寫了個led宏,并嘗試控制led燈的亮度
經(jīng)常用led燈來觀察現(xiàn)象,甚至調(diào)試代碼,修改代碼時用0和1很不方便,而且閱讀性也不好,
故寫了個宏,用起來方便些.
今天嘗試控制燈的亮度. 先試試for循環(huán)控制,占空比調(diào)節(jié)...
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))//關(guān)閉某個燈,關(guān)多個燈用OFF(m)|OFF(n)
#defineon(x)ON(x)//包含大小寫
#defineoff(x)OFF(x)
#defineledon0//某個燈,打開
#defineledoff1//某個燈,關(guān)閉
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;//鎖定當(dāng)前8個led的狀態(tài),0鎖定,1不鎖定
#endif
voidledCtr(u8ledX,u8per)//參數(shù)1是某個燈,參數(shù)2是亮度
{
u8i=1;
for(i=1;i<=100;i++)
{
if(i { led=on(ledX);//打開燈 } else { led=off(ledX);//關(guān)閉燈 } } } voiddelayms(u16ms)//毫秒級軟延時函數(shù) { 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;//關(guān)閉0號燈 led=off(6)|off(1)|off(5);//關(guān)閉1,5,6號燈 while(1) { ledCtr(2,5);//僅打開2號燈,亮度5%,省電... } }