#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0; //亮
sbit key2=P2^1; //灭
sbit key3=P2^2; //加
sbit key4=P2^3; //减
sbit key5=P2^4; //5min
sbit key6=P2^5; //10min
sbit key7=P2^6; //20min
sbit LED=P1^1; //发射指示灯
sbit out=P1^0; //红外发射管
uchar i,a,num1;
void init()//初始化
{
key1=1;
key2=1;
key3=1;
key4=1;
key5=1;
key6=1;
key7=1;
}
void delay(uchar aa)
{
uchar bb,cc;
for(bb=aa;bb>0;bb--)
for(cc=200;cc>0;cc--);
}
void delayms(uchar aa)//延时程序
{
for(a=aa;a>0;a--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void khz(uchar aa)//发射38KHZ的程序
{
for(a=aa;a>0;a--) //这个for语句可以得到准确的26.3波特率
{
out=0;
i=7; //低了17us
while(i>0)i--; // 38kHZ
out=1;
//高了9us 17+9=26us 比26.3快了一点
}
}
//khz(116);//3.028ms 精确的时间
//khz(64);//2.006ms
//khz(40); //1.052ms
//delayms(125);//2.012ms 这里是一些的时间介绍
//delayms(65);//1.054ms
//delayms(93);//1.5ms
void fashu(uchar num)
{
khz(116);//发射3ms 38khz
delayms(125);
for(num1=8;num1>0;num1--)
{
khz(40);
if(num&0x01)
delayms(93);//delay 1.5ms
else
delayms(65);//delay 1ms
num=num>>1;
}
khz(20);
}
void tishi()
{
LED=0;
delay(50);
LED=1;
delay(50);
LED=0;
delay(50);
LED=1;
}
void keyscan()//按键
{
if(key1==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key1==0)
{
while(!key1);
fashu(0xff);
tishi();
}
}
if(key2==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key2==0)
{
while(!key2);
fashu(0xdd);
tishi();
}
}
if(key3==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key3==0)
{
while(!key3);
fashu(0xcd);
tishi();
}
}
if(key4==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key4==0)
{
while(!key4);
fashu(0xbb);
tishi();
}
}
if(key5==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key5==0)
{
while(!key5);
fashu(0xfb);
tishi();
}
}
if(key6==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key6==0)
{
while(!key6);
fashu(0xdf);
tishi();
}
}
if(key7==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key7==0)
{
while(!key7);
fashu(0xef);
tishi();
}
}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
|