|
|
楼主 |
发表于 2017-5-7 08:17:55
|
显示全部楼层
/*此程序完好程序
功能:键子1为加一级,键子2为减一级。
3个指示灯: 1亮=等级1、2亮=等级2、3亮=等级3、1,2亮=等级4、
1,3亮=等级5、2,3亮=等级6,1,2,3亮=等级7,共7个等级。*/
#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>7) //模式1--7
{
md=7; //停在7,不循环
}
}
if(key2_ac==1)
{
key2_ac=0;
md--;
if(md<1) //模式7--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 10%功率
{
LED_1=0; //指示灯1 亮
LED_2=1;
LED_3=1;
zkb_PWM_out=1; // zkb 1比PWM 10
}
if(md==2) // md2 20%功率
{
LED_1=1; //指示灯2 亮
LED_2=0;
LED_3=1;
zkb_PWM_out=2;
}
if(md==3) // md3 30%功率
{
LED_1=1; //指示灯3 亮
LED_2=1;
LED_3=0;
zkb_PWM_out=3;
}
if(md==4) // md1 40%功率
{
LED_1=0; //指示灯1,2 亮
LED_2=0;
LED_3=1;
zkb_PWM_out=4; // zkb 4比PWM 10
}
if(md==5) // md2 50%功率
{
LED_1=0; //指示灯1,3 亮
LED_2=1;
LED_3=0;
zkb_PWM_out=5;
}
if(md==6) // md3 70%功率
{
LED_1=1; //指示灯2,3 亮
LED_2=0;
LED_3=0;
zkb_PWM_out=7;
}
if(md==7) // md1 90%功率
{
LED_1=0; //指示灯1,2,3 亮
LED_2=0;
LED_3=0;
zkb_PWM_out=9; // zkb 9比PWM 10
}
}
}
|
| |