📄 key.c
字号:
#include<AT89x55.H>
#include <stdio.h>
#include <INTRINS.H>
#include "bt1029.h"
#define uint unsigned int
#define uchar unsigned char
sbit ir=P1^6;
//keyandout
sbit keyadd=P3^4;
sbit keysub=P3^5;
sbit keystby=P3^6;
sbit stby=P1^4;
uchar VOL;
bit VOLon;
sbit ledblue=P2^4;
sbit ledred=P2^3;
//***********************
uchar irdata[4];
uint count0,count1;
uchar count10,count11;
bit flag,flag1,flag0;
//*********************************
//t*2us 4.5ms equ 561 9ms equ 1124 0.56ms equ 69
//*********************************
void delay(uint t)
{ while(--t);
}
/**********************************************/
/* 工作状态灯*/
void blueout()
{ledblue=1;
delay(500);
ledblue=0;
}
void redout()
{if(VOLon)
{ledred=0;
ledblue=1;
}
else
{ledred=1;
ledblue=0;
}
}
/************************************************/
//串口传输初始化
/***********************************************/
void uart_init()
{
SCON = 0xDA; // SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; // TH1: reload value for 1200 baud @ 12MHz */
TR1 = 1; // TR1: timer 1 run */
TI = 1; // TI: set TI to send first char of UART */
}
/*************************************************/
//串口发送
/************************************************/
void send(unsigned char ch)
{SBUF=ch;
while(TI==0);
TI=0;
}
/************************************************/
/*********************************************/
/*红外线接收处理*/
/********************************************/
void irchuli()
{ uchar c1,c2;
if(irdata[2]=~irdata[3])
{ blueout();
send(irdata[2]);
c1=irdata[2]/10;
c2=irdata[2]%10;
send('0'+c1);
send('0'+c2);
}
}
/*********************************************/
//*********************************
//红外线接收扫描
//*********************************
//*********************************
//
//*********************************
void checkhead()
{ while(ir==0)
{count0++;
}
if(count0>140)
{flag0=1;
}
count0=0;
if(flag0==1)
{ flag0=0;
while(ir==1)
{count1++;
}
if(count1>350)
{flag1=1;
}
count1=0;
if(flag1==1)
{flag=1;
flag1=0;
}
}
}
uchar irshou(uchar *data1)
{ //uchar data1,BitCnt,i;
uchar i,j;
checkhead();
if(flag==1)
{
flag=0;
for(i=0;i<4;i++) //共4个字节
{ //1
*data1=0;
for(j=0;j<8;j++)
{ while(ir==0)
{ count10++;
}
if(count10>20)
{(*data1)<<=1;
}
//0
while(ir==1)
{count11++;
}
if(count11<60)
{*data1|=1;
}
count10=0;
count11=0;
}
data1++;
}
irchuli();
}
return 0;
}
//键盘扫描
void keyscan()
{ if((P3&&0x70)!=0x70)
{ if(!keyadd)
{ delay(10);
if(!keyadd)
{ if(ledblue==0)
{
if(VOL<84)
{VOL++;
}
blueout();
SendBT1029(0,VOL);
}
}
}
if(!keysub)
{delay(10);
if(!keysub)
{ if(ledblue==0)
{
if(VOL>0)
{VOL--;
}
blueout();
SendBT1029(0,VOL);
}
}
}
if(!keystby)
{
delay(10);
if(!keystby)
{VOLon=~VOLon;
stby=VOLon;
//ledred=~ledred;
redout();
}
}
}
}
/********************************************/
void main()
{
uart_init();
ledred=0;
ledblue=1;
delay(50000);
ledred=1;
ledblue=0;
while(1)
{ keyscan();
irshou(&irdata);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -