多功能智能控制器
**********************************
函 数 名: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 // 光标不闪烁
//
多功能智能控制 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)