|
芯片:89c51
工作晶振:12Hz
功能:
1、按遥控器上的"1"键,对应1号灯就点亮,2和3键对应另外两只灯,"关"将关闭所有灯。
由于这批灯泡的功率较大,考虑到器件的发热,设计中同一时间内只能亮一只灯。
2、调光功能。如要对灯进行调光,可按如下方法操作:如要对1号灯进行亮度调节,按住1号键一直不放,
可以看到灯会由亮变暗,如果一直按着,然后到熄灭,最后又会从暗变亮(注意这个操作时间要长一点才可以看出来)。
当达到你所需要的亮度时,只要松开按键,这时对应的亮度就是你所要的亮度。
日期:2010-3-31
CAN
*/
#include
#include
//按键对应的引脚
sbit K_BUTTON_1 = P1^1;
sbit K_BUTTON_2 = P1^2;
sbit K_BUTTON_3 = P1^3;
sbit K_BUTTON_OFF = P1^4;
//灯对应的引脚
sbit LED_1 = P1^5;
sbit LED_2 = P1^6;
sbit LED_3 = P1^7;
//灯对应的开关
#define ON 0
#define OFF 1
//按键扫描用的define
#define BUTTONS P1
#define KEY_base 0xf0
#define KEY_no 0xff
#define K__1 0xfe// 0b11111110
#define K__2 0xfd// 0b11111101
#define K__3 0xfb// 0b11111011
#define K_TURN_ALL_OFF 0xf7// 0b11110111
unsigned char Pwm_led=0;//记录按下的按键
unsigned char Counter=50;//记录PWM的占空比
//读引脚前先置一
void out()
{
K_BUTTON_1 = 1;
K_BUTTON_2 = 1;
K_BUTTON_3 = 1;
K_BUTTON_OFF = 1;
}
//读引脚
unsigned char scan_key()
{
unsigned char key_s = 0x00;
out();
key_s = BUTTONS | KEY_base; // 屏蔽其他引脚
return key_s;
}
//延时子程序
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
//timer1的中断,计数时间由TH1和TL1决定
//PWM的周期由counter_timer决定,占空比由Counter决定。
void timer1() interrupt 3
{
static unsigned char counter_timer=0;
TH1 = 0xff;
TL1 = 0x9b;
counter_timer++;
if(counter_timer<=Counter)
{
switch(Pwm_led)
{
case K__1:
LED_1=ON;
LED_2=OFF;
LED_3=OFF;
break;
case K__2:
LED_1=OFF;
LED_2=ON;
LED_3=OFF;
break;
case K__3:
LED_1=OFF;
LED_2=OFF;
LED_3=ON;
break;
case K_TURN_ALL_OFF:
LED_1=OFF;
LED_2=OFF;
LED_3=OFF;
break;
}
}
else
{
LED_1=OFF;
LED_2=OFF;
LED_3=OFF;
}
if(counter_timer>100)
counter_timer=0;
}
//调节Counter,从而调节占空比
void pwm_counter()
{
static char timer=0;
static bit direct=0;
timer++;
if(timer>=10)
{
timer=0;
if(direct==1)
Counter++;
else
Counter--;
if(Counter>=100 || Counter<=0)
{
direct=~direct;
}
}
}
void main()
{
unsigned char key_s;
TMOD = 0x10; // 定时器1工作模式1, 16位定时方式
TH1 = 0xff;
TL1 = 0x9b;
IE = 0x88; // 使能timer1中断
TR1 = 1;
while(1)
{
key_s = scan_key();
if(key_s != KEY_no)
{
//delayms(10);
key_s = scan_key();
if(key_s != KEY_no)
{
Pwm_led = key_s;//记录哪个按键按下!!
pwm_counter(); //负责修改PWM的占空比
}
}
}
}
这个程序是基于89C51编写的 请问要再2051上面用 应该怎么修改 ?
|
|