谢谢大家的回复和指导分析,我也在网上搜索了一些程序,并做了下修改,但是按键无效,不知道哪儿出错了,请指导!
#define _16F877a
#include<pic.h>
//脚位定义***********************************************************
#define key_up RB1 //按键输入(增加键)
#define key_down RB2 //按键输入(减少键)
#define PWM RC0 //输出指示
//*******************************************************************
//函数名称:port_init();
//输入参数:无
//输出参数:无
//功能描述:端口设置
//*****************************************************************
void PortInit(void)
{
PORTB = 0xfd; //
TRISB = 0xfd; //B 口设置
PORTC = 0x00; //
TRISC = 0x00; //C 口设置
}
//*******************************************************************
//函数名称:KeyInt(*p);
//输入参数:占空比地址
//输出参数:无
//功能描述:按键处理函数
//*******************************************************************
void KeyInt(unsigned char *p)
{
static bit valid = 0; //有效标志
static bit finish = 0; //完成标志
//按增加键处理
if (valid == 1)
{
if (key_up == 0)
{
if (finish == 0)
{
finish = 1; //完成置位
if (*p == 250)
{
*p = 0xFF; //按键有效
}
else
{
*p += 25; //按键有效
}
}
}
else
{
valid = 0; //有效清零
finish = 0; //完成清零
}
}
else
{
if (key_up == 0) valid = 1; //有效置位
}
//按减少键处理
if (valid == 1)
{
if (key_down == 0)
{
if (finish == 0)
{
finish = 1; //完成置位
if (*p == 5)
{
*p = 0x01; //按键有效
}
else
{
*p -= 25; //按键有效
}
}
}
else
{
valid = 0; //有效清零
finish = 0; //完成清零
}
}
else
{
if (key_down == 0) valid = 1; //有效置位
}
}
//*******************************************************************
//函数名称:LedPwm(Pwm);
//输入参数:占空比
//输出参数:无
//功能描述:led 脉冲调宽输出
//*******************************************************************
void LedPwm(unsigned char Pwm)
{
unsigned char PwmH;
unsigned char PwmL;
unsigned char i;
for (i = 0; i < 20; i++)
{
PwmH = Pwm; //脉冲高位
PwmL = 255 - PwmH; //脉冲低位
PWM = 1; //
while (PwmH--); //高位输出
PWM = 0; //
while (PwmL--); //低位输出
}
}
//*******************************************************************
//函数名称:main();
//输入参数:无
//输出参数:无
//功能描述:主要程序
//*******************************************************************
void main(void) //
{
unsigned char Pwm = 0x01; //占空初值
PortInit(); //脚位设置
while (1)
{
KeyInt(&Pwm); //按键处理
LedPwm(Pwm); //脉冲输出
}
}
另外不知道这个程序的PWM输出频率是多少?
|