📄 ir.#1
字号:
//参考程序B: IR.C
//程序说明:此程序接收红外发射过来的数据解码后由CPU读取并显示在LED数码管上.
#include <c8051f020.h> /*SFR定义*/
#include <intrins.h>
#define PORTA 0x8000 /*8255的A口*/
#define PORTB 0x8001 /*8255的B口*/
#define PORTC 0x8002 /*8255的C口*/
#define PORTCON 0x8003 /*8255的控制口*/
#define DataPort 0x8400 /*红外数据接收口*/
unsigned char xdata *idata Pointm;
sbit BUZ = P3^5;
unsigned char ReadFlag; /*读红外数据标志*/
unsigned char ReadData,IRData;
unsigned char i,j,k0,k1;
unsigned char WE[6]={1,2,4,8,0x10,0x20}; //位选
unsigned char ZI[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71,0x40};/*字选:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,-*/
void PORT_Init (void); //端口初始化
void displayled(void) ;//显示1位数据
void sleep_ms(unsigned int count)//延时
{
unsigned char ii,jj;
for(ii=0;ii<count;ii++)
{
for(jj=0;jj<250;jj++)
_nop_();
}
}
void INITEXINT67(void)
{
EIE2 |= 0x10; /*允许外部中断6*/
}
void INT6_ISR(void) interrupt 18
{
P3IF &= ~0x40; /*清外部中断6标志*/
ReadFlag = 0x01; /*置允许读标志*/
}
void main (void) {
unsigned char xdata *idata Pointir;
WDTCN = 0xde; /*无效看门狗*/
WDTCN = 0xad;
PORT_Init(); /*输入/输出口初始化*/
INITEXINT67(); /*初始化外部中断6*/
EA=1; /*开总中断*/
ReadFlag=0;
while(1){
while(ReadFlag==0x00); /*是否允许读红外数据*/
Pointir=DataPort;
ReadData=*Pointir; /*读红外数据*/
if((ReadData&0x80)==0x00) continue; /*是否接到红外数据*/
IRData = (~ReadData )&0x0f; /*保存收到的红外数据*/
BUZ = 0; /*蜂鸣器响*/
sleep_ms(250);
BUZ = 1; /*蜂鸣器灭*/
displayled() ;//显示1位数据
do{
ReadData = *Pointir;
}while((ReadData&0x80)==0x80); /*上次红外中断是否结束*/
_nop_();
}
_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -