|
|
楼主 |
发表于 2017-2-16 19:43:24
|
显示全部楼层
程序奉上!一定有瑕疵!
/*此程序功能:键子1为加一级,键子2为减一级。
3个指示灯各代表3个等级。*/
#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int
sbit LED_1=P3^2; //功率等级1
sbit LED_2=P3^3; //功率等级2
sbit LED_3=P3^4; //功率等级3
sbit PWM_out=P3^5; //PWM功能输出
sbit key1=P3^0; //按键1“+”
sbit key2=P3^1; //按键2“-”
u8 key1_old,key2_old; //设置按键低电压检测标记
u8 key1_ac,key2_ac; //设置按键传递信息标记
u8 md,zkb_PWM_out,PWM;
u8 time;
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void delay_1ms(u16 n)
{
while(n)
{
Delay1ms();
n=n-1;
}
}
main()
{
key1_old=1,key2_old=1; //初始化为高电平
md=1; //初始化为1模式即功率1
while(1)
{
delay_1ms(1);
time++;
if(time>9) //开始10毫秒循环
{
time=0;
/////////////按键程序开始//////////////
if(key1==1) //扫描按键
{
if(key1_old==0) //扫描确认按键按下
{
key1_ac=1; //将传递信息为1
}
}
key1_old=key1; //扫描按键键值继续10毫秒循环
if(key2==1)
{
if(key2_old==0)
{
key2_ac=1;
}
}
key2_old=key2;
}
///////////按键程序结束///////////////
///////////将按键传递信息值转换3种模式切换////////////
if(key1_ac==1)
{
key1_ac=0;
md++;
if(md>3) //模式1--3
{
md=3; //停在3,不循环
}
}
if(key2_ac==1)
{
key2_ac=0;
md--;
if(md<1) //模式3--1
{
md=1; //停在1,不循环
}
}
/////////////PWM程序开始///////////////
PWM++;
if(PWM>9) //设置10个等级,1毫秒一个循环开关
{
PWM=0;
}
if(zkb_PWM_out>PWM) //设置开与关的比例,zkb/PWM
{
PWM_out=0;
}
else
{
PWM_out=1;
}
//////////PWM程序结束////////////////
if(md==1) // md1 20%功率
{
LED_1=0; //指示灯1 亮
LED_2=1;
LED_3=1;
zkb_PWM_out=2; // zkb 2比PWM 10
}
if(md==2) // md2 40%功率
{
LED_1=1;
LED_2=0;
LED_3=1;
zkb_PWM_out=4;
}
if(md==3) // md3 90%功率
{
LED_1=1;
LED_2=1;
LED_3=0;
zkb_PWM_out=9;
}
}
}
|
| |