#include "delay.h"
#include "delay.c"
#include
//脚位定义***********************************************************
#define key RA3 //按键输入
#define led RB0 //输出指示
//开关标志***********************************************************
persistent bit Sign; //开关标志
//占空比数据*********************************************************
persistent unsigned char data; //占空表值
const unsigned char PwmDat[10] = {0x19, 0x32, 0x4b, 0x64, 0x7d,
0x96, 0xaf, 0xc8, 0xe1, 0xfa};
//*******************************************************************
//函数名称:PortInit();
//输入参数:无
//输出参数:无
//功能描述:端口设置
//建造日期:2008.06.06
//*****************************************************************
void PortInit(void)
{
PORTA = 0xfd; //
TRISA = 0xfd; //A 口设置
PORTB = 0x00; //
TRISB = 0x00; //B 口设置
}
//*******************************************************************
//函数名称:KeyInt();
//输入参数:无
//输出参数:无
//功能描述:按键处理函数
//建造日期:2008.06.06
//*******************************************************************
void KeyInt(void)
{
static unsigned char count = 0; //长按计数
static bit valid = 0; //有效标志
static bit reach = 0; //长按标志
if (valid == 1)
{
if (key == 0) //按键有效
{
count++; //增加计数
if (count == 50)
{
count = 25; //长按加速
reach = 1; //长按置位
data++; //查表增加
if (data > 9) data = 0; //循环查表
}
}
else
{
if (reach == 0) Sign = !Sign; //取反状态
count = 0; //计数清零
valid = 0; //有效清零
reach = 0; //长按清零
}
}
else
{
if (key == 0) valid = 1; //有效置位
}
}
//*******************************************************************
//函数名称:LedPwm();
//输入参数:无
//输出参数:无
//功能描述:led 脉冲调宽输出
//建造日期:2008.06.06
//*******************************************************************
void LedPwm(void)
{
unsigned char PwmH, PwmL;
unsigned char i,Pwm;
Pwm = PwmDat[data]; //占空查表
if(Sign == 1) //是否开机
{
for (i = 0; i < 20; i++)
{
PwmH = Pwm; //脉冲高位
PwmL = 250 - PwmH; //脉冲低位
led = 1; //
while (PwmH--); //高位输出
led = 0; //
while (PwmL--); //低位输出
}
}
else
{
DelayMs(20); //关机延时
}
}
//*******************************************************************
//函数名称:main();
//输入参数:无
//输出参数:无
//功能描述:主要程序
//建造日期:2008.06.06
//*******************************************************************
void main(void) //
{
PortInit(); //脚位设置
if (data > 9) data = 0; //是否越阶
while (1)
{
KeyInt(); //按键处理
LedPwm(); //脉冲输出
}
}
可以实现短按开关机(按键 < 1S),长按凋光(按键 >1S),以10%占空比步进.占空比为 10% -100% (在关机时长按无效)
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/70/1073571224733313.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">