课程设计 - 红外遥控电子密码锁的设计与实现(6)

2025-09-17

res=Red_check();//获得此次高脉冲宽度 if(res==250) { break;//非有用信号 }

if(res>=200&&res<250) { OK=1; //获得前导位(4.5ms) }

else if(res>=70&&res<100) //如果是宽脉冲,则RODATA=1 {

aa++;

RODATA=1;// 1.69ms } else if(res>=10&&res<50) //如果是窄脉冲,则RODATA=0 {

aa++;

RODATA=0;//500us }

//前1-8位是遥控器地址码,9-16位是地址反码,17-24是键值码,25-32是是键值反码

//获取正码

if(OK&&(aa>=0)&&(aa<8)) {

RED_add<<=1;

RED_add=RED_add+(uchar)RODATA; }

if(OK&&(aa>=17)&&(aa<25)) {

RED_key<<=1;

RED_key=RED_key+(uchar)RODATA; }

if(aa==32&&RED_add==0) {

KEY_main=Red_change(RED_key);break; } } } }

//把红外数据进行转换

uchar Red_change(uchar rednum) {

switch(rednum) {

23

case 16 :return 0; case 48:return 1; case 176:return 2; case 112:return 3; case 8:return 4; case 136:return 5; case 72:return 6; case 40:return 7; case 168:return 8; case 104:return 9;

case 0:return 10;//电源开关 case 32:return 11;//EQ case 144 :return 12;//快退 case 80:return 13;//快进 case 160:return 14;//声音减 case 96:return 15;//声音加 case 128:return 16;//CH - case 64:return 17;//CH + default: return 255; } }

7.3 矩阵键盘模块

#include \

#define KEY P2

void Key(void) {

uchar i = 0; uchar j = 0; uchar k = 0; KEY= 0x0F; i = KEY; if(i != 0x0F) { uint l=0; Delay(1000); KEY= 0x0F; i = KEY; if(i != 0x0F) {

24

KEY = 0x0F; i = KEY; KEY = 0xF0; j = KEY; k = i | j; KEY_change(k); } while(KEY !=0xf0 && l<2000) { KEY = 0xf0; l++; } } }

void KEY_change(uchar i) {

switch(i) { case 0xED:{KEY_main= 1;break;} case 0xDD:{KEY_main= 2;break;} case 0xBD:{KEY_main= 3;break;} case 0xEB:{KEY_main= 4;break;} case 0xDB:{KEY_main= 5;break;} case 0xBB:{KEY_main= 6;break;} case 0xE7:{KEY_main= 7;break;} case 0xD7:{KEY_main= 8;break;} case 0xB7:{KEY_main= 9;break;} case 0xEE:{KEY_main= 10;break;} case 0xDE:{KEY_main= 0;break;} case 0xBE:{KEY_main= 11;break;} default: break; } }

void Delay(unsigned int i) {

while(-- i); }

void INIT_TIME_0() {

TMOD = 0X00; TH0 = 0X0E; TL0 = 0;

25

ET0 =1; TR0 = 1; }

void KEY_TIME_0() interrupt 1 using 0 {

TH0 = 0X0E; TL0 = 0; Key(); }

7.4 LCD12864显示

#include \

sbit CS = P0^3; sbit SID = P0^2; sbit CLK = P0^1; sbit RESET = P0^0;

#define lcdcom_w 0xf8 #define lcdcom_r 0xfc #define lcddata_w 0xfa #define lcddata_r 0xfd

//汉字地址表

uchar code addr_tab[]={ //便于根据汉字坐标求出地址 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置 };

//***************************************************** // 函 数 名:void Delay_LCD(void) // 功 能:5ms延时

//****************************************************/ void Delayms(uint t) //约延时ms {uint i;while(t--){for(i=0;i<125;i++);}}

void LCD_SendByte(uchar Dbyte) {

unsigned char i; for(i=0;i<8;i++) { CLK = 0;

26

Dbyte=Dbyte<<1; SID = CY; CLK = 1; CLK = 0; } }

/********************************************************** 接收一个字节

***********************************************************/ uchar LCD_ReceiveByte() {

unsigned char i,temp1,temp2; temp1=temp2=0; for(i=0;i<8;i++) { temp1=temp1<<1; CLK = 0; CLK = 1; CLK = 0; if(SID) temp1++; }

for(i=0;i<8;i++) { temp2=temp2<<1; CLK= 0; CLK= 1; CLK= 0; if(SID) temp2++; }

return ((0xf0&temp1)+(0x0f&temp2)); }

/**************************************************************** 检查忙状态

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

void LCD_Read_busy() {

do {

LCD_SendByte(lcdcom_r); //11111,RW(1),RS(0),0 }

while(0x80&LCD_ReceiveByte()); }

void LCD_Write(uchar k, uchar value) // k = 0 写命令,k = 1 写数据

27


课程设计 - 红外遥控电子密码锁的设计与实现(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:操作系统精髓与设计原理-第12章 文件管理

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219