#include<reg52.h>
/*------------------------------------------------
MAIN C Function
------------------------------------------------*/
/******************************************************************/
//此文件中定义了单片机的一些特殊功能寄存器
sbit PWMOUT=P2^0; //PWM输出
sbit Kjia=P3^0; //按键 加
sbit Kjian=P3^2; //按键 减
sbit K=P3^1; //按键 开关机
sbit ON_OFF=P2^7; //开关机状态指示灯
bit kaiguan = 0; //开关机状态位
unsigned int count=0,FLAG=0,stat;
unsigned char cnt = 0; // 档位变量
//延时函数
void DELAY(unsigned int t)
{
while(t--);
}
//定时器 T0 初始化
void init_T0(void)
{
EA=1;
ET0=1;
IP=0x02;
TMOD=0x01;
TL0=(65535-100)%256;
TH0=(65535-100)/256;
TR0=1;
}
//按键扫描
void scan_key(void)
{
if(K==0)
{
DELAY(10000);
if(K==0)
{
kaiguan=~kaiguan;
ON_OFF=~ON_OFF;
if(ON_OFF==1)
// else
{
P0=0x00;
}
while(!K);
}
}
if(kaiguan==0) // 关机
{
cnt=0;
TR0=0;
}
if(kaiguan==1) //开机
{
if(Kjia==0)
{
DELAY(10000);
if(Kjia==0)
{
cnt=cnt+1;
if(cnt>=5) //加到5后不变
{
cnt=5;
}
}
}
if((Kjian==0)&&(cnt>0))
{
DELAY(10000);
if(Kjian==0)
{
cnt=cnt-1; //减到1后不变
}
}
}
// 档位选择
switch(cnt)
{
case 0:
TR0=0;PWMOUT=1;break;
case 1:
P0=0x06;TR0=1;FLAG=90;break;//FLAG = 90;亮度10%
case 2:
P0=0x5b;TR0=1;FLAG=70;break;
case 3:
P0=0x4f;TR0=1;FLAG=50;break;
case 4:
P0=0x66;TR0=1;FLAG=30;break;
case 5:
P0=0x6d;TR0=1;FLAG=10;break;//最亮
}
}
//主函数
void main()
{
init_T0();
PWMOUT=1; // 开发板P2^0高电平 灯不亮 代表关机状态 实际应用改成 0
ON_OFF = 0; // 关机 P0=0x00;
cnt=0;
while(1)
{
scan_key();
}
}
// 定时器T0 中断函数
void timer0() interrupt 1
{
TL0=(65535-100)%256;
TH0=(65535-100)/256;
if(count==FLAG)
{
PWMOUT=0;
}
count++;
if(count==100)
{
count=0;
if(FLAG==0)
PWMOUT=0;
else
PWMOUT=1;
}
}
|