说明:
1、采用PWM调光实现该功能,周期为2.5ms,占空比有10个等级的变化,LED亮度也同样呈现10个等级
2、开发板电路图参照郭天祥单片机电路
3、流经LED的电流应不大于20mA,与LED串联的电阻采用270欧姆,而非1K,这样可使增加LED最大亮度
代码:
#include<reg52.h> char code table[]={ 0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77 }; unsigned int scale=1; //控制占空比 sbit led1=P1^0; sbit key1=P3^4; sbit dula=P2^6; sbit wela=P2^7; unsigned int num=0; void change(); void delay(int); void main(void) // 主程序 { TMOD=0x02; //定时器0,工作模式2(0000,0010),8位定时模式 TH0=0x06; //写入预置初值6到定时器0,使250微秒溢出一次(12MHz) TL0=0x06; //写入预置值 EA=1; //允许总中断 ET0=1; //允许定时器0中断 TR0=1; //启动定时器 wela=1; P0=0xc0; wela=0; while(1){ change(); dula=1; P0=table[scale-1]; dula=0; delay(200); //避免按键时间过长而导致scale变化过快 } } void timer0() interrupt 1 //定时器0中断服务程序 { num++; if(num==10){ //num=10 pwm周期为 250us x 10 即 2.5ms led1=0; num=0; } if(num==scale){ led1=1; } } void change(){ //用按键来改变占空比 scale if(key1==0){ delay(100); if(key1==0){ scale++; if(scale==10){ scale=1; } } } } void delay(int xms){ //延时程序,用于键盘防抖动 int i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); }