#include <reg51.h> #include <LCD1602.h> //LCD库函数 sbit IR_IN = P3^0; //红外接收引脚 unsigned char code KEY_TAB[] = {0x45,0x46,0x47,0x44,0x40,0x43,0x07,0x15,0x09, 0x16,0x19,0x0D,0x0C,0x18,0x5E,0x08,0x1C,0x5A, 0x42,0x52,0x4A}; //按键值表 unsigned char code KEY_NAME[] = {"POWER","MODE","MUTE","PAUSE","PREV","NEXT", "EQ","V-","V+","0","RPT","USB/SD","1","2","3", "4","5","6","7","8","9"}; //按键名称 unsigned char key, key_val; //当前键值 bit key_flag; //按键标志 // 外部中断0服务程序 void IR_decode() interrupt 0 { //解析NEC码,获取键值存key key_flag = 1; //置按键标志 IR_IN = 1; //清中断标志 } void main() { int i; LCD_Init(); //LCD初始化 IE = 0x81; //打开中断 LCD_ShowString(0,0,"KEY:"); //显示标题 while(1) { if(key_flag) { //显示键名 for(i=0;i<21;i++) { if(key == KEY_TAB[i]) { LCD_ShowString(0,1,KEY_NAME[i]); break; } } key_flag = 0; //清按键标志 } } }
时间: 2024-04-19 17:23:43 浏览: 80
根据你提供的代码,我看到了一些潜在的问题。首先,你使用了一个名为 `LCD1602.h` 的头文件,但你并没有提供这个头文件的代码。请确保你已经正确地包含了这个头文件并且确保该头文件的路径正确。
另外,在你的 `main` 函数中,你声明了一个整型变量 `i`,但你使用了一个未声明的函数 `LCD_Init()` 和 `LCD_ShowString()`。请确保你已经在代码中包含了这两个函数的定义或者正确地引入了相关的库文件。
此外,你使用了一个中断函数 `IR_decode()` 来处理外部中断0,但是我没有看到你对中断进行任何初始化的代码。请确保你已经正确地配置了外部中断0,并在合适的地方启用了中断。
最后,在你的代码中,你使用了一些未定义的变量,如 `key`、`key_val` 和 `key_flag`。请确保你在代码中定义了这些变量,并初始化它们。
如果你能提供 `LCD1602.h` 头文件和相关的库文件,我可以帮你更详细地分析并解决问题。
阅读全文