經常用led燈來觀察現象,甚至調試代碼,修改代碼時用0和1很不方便,而且閱讀性也不好,
故寫了個宏,用起來方便些.
今天嘗試控制燈的亮度. 先試試for循環控制,占空比調節...
源程序:
- //#include "my51.h"
- #include <reg52.h>
- 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<per)
- {
- 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%, 省電...
- }
- }
復制代碼
|