|
/********************************************************************
*********************************************************************/
#include<reg52.h>
#define uchar unsigned char //宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
uchar b; //中断值
uchar N=0; //占空比计数值
uchar X=50; //占空比初始值百分比
uchar z=0;
uchar key_up;
uchar key_down;
/************************************************************************
按键初始化
*************************************************************************/
sbit P2_0=P2^0;//占空比加
sbit P2_1=P2^1;//占空比减
sbit PWM=P3^7;//控制PWM的占空比输出
/************************************************************************
调速按键扫描函数
*************************************************************************/
void get_key(void)//按键扫描函数
{
while(P2_0==0)//按键加计数标志
{key_up=1;
}
while(P2_1==0)//按键减计数标志
{key_down=1;
}
}
/************************************************************************
定时器中断执行函数
*************************************************************************/
void timer0( ) interrupt 1 //定时器0工作方式1
{
TH0=(65536-1)/256; //重装计数初值
TL0=(65536-1)%256; //重装计数初值
b++;
get_key();
if (key_up==1)
{
if(X!=100)//判断是否计数到100
{
X++;//加一
key_up=0;
}
}
if (key_down==1)
{
if(X!=0)//判断是否计数到0
{
X--;//减一
key_down=0;
}
}
}
/************************************************************************
程序主函数
*************************************************************************/
void main()
{
TMOD=0X01; //定时器中断0
TH0=(65536-2)/256; //定时时间高八位初值
TL0=(65536-2)%256; //定时时间低八位初值
EA=1; //开CPU中断
ET0=1; //开T/C0中断
TR0=1;
/****************************PWM处理部分*********************************************/
while(1)
{
PWM=1;
while(1)
{
b=0;
while(!b);
if (N==X)
PWM=0;
if(N==100)break;
N++;
/*************************************************************************************/
}
N=0;
}
}
/******************************程序结束************************************************/
|
|