微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 多功能智能控制器

多功能智能控制器

时间:11-18 来源:互联网 点击:

**********************************

函 数 名:void Delay_bell(void)

功 能:蜂鸣器延时程序

说 明:对蜂鸣器发音延时

入口参数:无

返 回 值:无

*****************************************************/

void Delay_bell(void)

{

uint i;

for(i=0;i<20000;i++)

;

}

/*****************************************************

函 数 名:void Buzzer(num)

功 能:蜂鸣器发音程序

说 明:对密码输入正确与否、按键等的提示

入口参数:无

返 回 值:无

*****************************************************/

void Buzzer(num)

{

while(num--)

{

BEEP=0; // 灯亮

Delay_bell(); // 延时

BEEP=1; // 灯灭

Delay_bell(); // 延时

}

}

/*****************************************************

函 数 名:void IR_IN() interrupt 0 using 0

功 能:红外解码

说 明:把红外编码信号进行解码,并存放在IRCOM[]中

入口参数:无

返 回 值:无

*****************************************************/

// 外中断0,红外数据接收

void IR_IN() interrupt 0 using 0

{

uchar i,j,k,num=0;

EX0 = 0;

do // 读引导码

{

for(i=0;i<4;i++)

{

if(IRIN==0)break;

if(i==3) {EX0=1;return;}

}

DelayIR(20);

}while(IRIN==1); // 确认IR信号出现

while(!IRIN){DelayIR(1);} // 等IR变为高电平

// 读4字节按键编码 = 16位的用户码+8位键值码+8位键值反码

for(j=0;j<4;j++)

{ // 解码原理:0=0.8ms的低电平+0.4ms的高电平;1=0.8ms的低电平+1.6ms的高电平

for(k=0;k<8;k++) // 8位一接收

{

while(IRIN){DelayIR(1);} // 等 IR 变为低电平

while(!IRIN){DelayIR(1);} // 等 IR 变为高电平

while(IRIN) // 计算IR高电平时长

{

DelayIR(1);

num++;

if(num>=30){EX0=1;return;}

}

IRCOM[j]=IRCOM[j]>>1; // 接收数据右移一位

if(num>=8){IRCOM[j]=IRCOM[j]|0x80;} // 电平长度大于等于8,则写入高电平

num=0;

} // 读完一字节

} // 按键4字节读完

// 接收数据检测

if(IRCOM[2]!=~IRCOM[3]){EX0=1;return;} // 8位键码!=8位键反码:按键错误

Buzzer(1); // 有键按下,蜂鸣器响一声

EX0 = 1; // 开外中断

}

/*===================================

DT9122D 遥控器

****** 红外遥控器键值表 ***********

| 10 | 03 | 01 | 06 |

- - - - - - - - - - - - - - - - - - -

| 09 | 1D | 1F | 0D |

- - - - - - - - - - - - - - - - - - -

| 19 | 1B | 11 | 15 |

- - - - - - - - - - - - - - - - - - -

| 17 | 12 | 16 | 4C |

- - - - - - - - - - - - - - - - - - -

| 40 | 48 | 04 | 00 |

- - - - - - - - - - - - - - - - - - -

| 02 | 05 | 54 | 4D |

- - - - - - - - - - - - - - - - - - -

| 0A | 1E | 0E | 1A |

- - - - - - - - - - - - - - - - - - -

| 1C | 14 | 0F | 0C |

=====================================*/

#endif

4.LCD1602部分:

/*--------------------------------------------------------------------------

LCD1602.H

The user function is C51.

Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun

All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __LCD1602_H__

#define __LCD1602_H__

/*连接线图:

---------------------------------------------------

| LCM-----51  | LCM-----51  | LCM------51 |

| ----------------------------------------------- |

| DB0-----P0.0 | DB4-----P0.4 | RS-------P2.0 |

| DB1-----P0.1 | DB5-----P0.5 | RW-------P2.1 |

| DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 |

| DB3-----P0.3 | DB7-----P0.7 | VLCD接1K电阻到GND |

---------------------------------------------------*/

/****************** LCD1602指令 ***********************************/

//输入方式设置

#define LCD_AC_AUTO_INCREMENT 0x06 // 数据读、写操作后,AC自动增一

#define LCD_AC_AUTO_DECREASE 0x04 // 数据读、写操作后,AC自动减一

#define LCD_MOVE_ENABLE 0x05 // 数据读、写操作,画面平移

#define LCD_MOVE_DISENABLE 0x04 // 数据读、写操作,画面不动

#define LCD_GO_HOME 0x02 // AC=0,光标、画面回HOME位

//设置显示、光标及闪烁开、关

#define LCD_DISPLAY_ON 0x0C // 显示开

#define LCD_DISPLAY_OFF 0x08 // 显示关

#define LCD_CURSOR_ON 0x0A // 光标显示

#define LCD_CURSOR_OFF 0x08 // 光标不显示

#define LCD_CURSOR_BLINK_ON 0x09 // 光标闪烁

#define LCD_CURSOR_BLINK_OFF 0x08 // 光标不闪烁

//

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top