#include <STC15F2K60S2.H>
#include "intrins.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;
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是关闭
}
unsigned char dat;
//void UartInit(void) //9600bps@12.000MHz
//{
// TMOD=0X20;
// TH1=0Xfd;
// TL1=0xfd;
// TR1=1;
//
// SCON=0x50;
// AUXR=0x00;
//
// ES=1;
// EA=1;
//
//}
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xDC; //设置定时初始值
TH1 = 0xDC; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
ES=1;
EA=1;
}
void SendByte(unsigned char dat)
{
SBUF=dat;
while(TI == 0);
TI=0;
}
unsigned char command=0x00;
void ServiceUart() interrupt 4
{
if(RI==1)
{
command=SBUF;
RI=0; //一定要手动清零
}
}
void SendString(unsigned char *str)
{
while(*str !='\0')
{
SendByte(*str++);
}
}
void Working()//接受到上位机的命令
{
if(command != 0x00)
{
switch(command & 0xf0)//低四位全部为0,取高四位
{
case 0xa0: //注意这里是冒号
Init_HC138(4);
P0=0xfe;
break;
case 0xb0:
Init_HC138(4);
P0=0xfd;
break;
case 0xc0:
SendString("The System is Running \n");
command=0x00; //防止反复发送这串代码
break;
}
}
}
void Delay100ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 144;
k = 71;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
close_buzz();
led_disp();
UartInit();
SendString("welcome to my world \r\n");//文本模式
while(1)
{
Working();
}
}