3044|0

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

这个程序用在2051要怎么改 [复制链接]

芯片: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上面用 应该怎么修改 ?
此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表