技术资料>51单片机

基于51单片机之两键控制LED(调光台灯)实验例程

发布时间:2018-03-26   浏览量:

**************************  Copyright(C) CaKe  ****************************************
========================================================================================
==============**版权信息   : CaKen工作室                            ==============
==============**文件名     : main.c              ==============
==============**作者       : CaKen             ==============
==============**版本号     : V1.0              ==============
==============**时间       : 2014.08.23               ==============
==============**功能描述   : 16键电子琴实验测试         ==============
========================================================================================
****************************************************************************************
 
#include"reg52.h"
 
#define  CaKen_LED  P1             //设置LED连接的I/O组
 
#define  CaKen_PWM 501       //设置明亮的总级数(级数过大会出现闪烁)(值域:0~65535)
#define  CaKen_MAX 500       //设置最大亮度(值域:小于明亮总级数)
#define  CaKen_MIN 1       //设置最小亮度(值域:明亮大于等于1,小于最大亮度)
 
sbit     CaKen_KEY_ADD = P3^0;     //亮度加
sbit     CaKen_KEY_DEC = P3^1;        //亮度减
 
 
***************************************************************************************
函数名:延时程序
调  用:delay();
参  数:
返回值:
结  果:
备  注: 0.1ms延时程序(12MHz 10倍于51单片机速度时)
****************************************************************************************/
void delay (unsigned int a)
{
 unsigned char i;
   while( --a != 0)
   {
  for(i = 0; i < 12; i++);
   }         
}
 
 
***************************************************************************************
函数名:LED显示程序
调  用:Display();
参  数:CaKen
****************************************************************************************/
 
void Display(unsigned int CaKen) //显示程序(50ms的PWM宽度)
{
   CaKen_LED=0x00;                 //LED小灯亮
 delay(CaKen);                 //延时a的长度
 CaKen_LED=0xff;                 //LED小灯灭
 delay(CaKen_PWM-CaKen);         //延时总PWM长度减a
}
 
 
***************************************************************************************
函数名:main
备  注:
****************************************************************************************/
void main()
{
  unsigned int k=1;     //初始化LED的亮度 
  while(1)
   {  
      Display(k);
      if(CaKen_KEY_ADD==0)      //如果按键按下则继续
       {
         delay(20);        //消抖 延时20mS
         if(CaKen_KEY_ADD==0)     //如果按键按下则继续
   {
     k++;
     if(k>CaKen_MAX)
      {
        k=CaKen_MAX;
      }
   }
       }
 
    if(CaKen_KEY_DEC==0)   //如果按键按下则继续
        {       
         delay(20);     //消抖 延时20mS
         if(CaKen_KEY_DEC==0)  //如果按键按下则继续
    {
       k--;
      if(k
       {
         k=CaKen_MIN;
     
       }
    }
       }
   }
}