#include <STC15F2K60S2.H>
sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;
sbit buzz_1= P0^6;
sbit jdq_2= P0^4;
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
sbit L1=P0^0;
unsigned char Counter,Compare;//PWM计数值和比较值
void delay(unsigned char t)
{
while(t--);
}
void Init_HC138(unsigned char n)
{
switch (n)
{
case 4:
HC138_A=0;
HC138_B=0;
HC138_C=1;
break;
case 5:
HC138_A=1;
HC138_B=0;
HC138_C=1;
break;
case 6:
HC138_A=0;
HC138_B=1;
HC138_C=1;
break;
case 7:
HC138_A=1;
HC138_B=1;
HC138_C=1;
break;
}
}
void led_disp()
{
Init_HC138(4);
P0=0xff;
}
void close_buzz()
{
Init_HC138(5);
buzz_1=0;//0是关闭
jdq_2=0;//0是关闭
}
void scankeys_alone()
{
if(S7==0)
{
delay(100);
if(S7==0)
{
Compare=5;
}
}
if(S6==0)
{
delay(100);
if(S6==0)
{
Compare=25;
}
}
if(S5==0)
{
delay(100);
if(S5==0)
{
Compare=55;
}
}
if(S4==0)
{
delay(100);
if(S4==0)
{
Compare=95;
}
}
}
void Timer0Init(void) //100微秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x9C; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; // 允许定时器 1 中断
EA = 1; // 允许系统中断
}
void ServiceTimer0() interrupt 1
{
led_disp();
Counter++;
if(Counter>=100)
{
Counter=0;
}
if(Counter<Compare)
{
P0=0x00;
}
else
{
P0=0xff;
}
}
void main()
{
close_buzz();
led_disp();
Timer0Init();
while(1)
{
scankeys_alone();
}
}