历史上的今天
今天是:2025年04月15日(星期二)
2020年04月15日 | MSP430f149红外接收头—读任意红外遥控器键值并显示于数码管
2020-04-15 来源:eefocus
刚学单片机(msp430f149 DM430-A),试了试红外接头(1838),读取红外遥控器的键值,并以十进制显示在数码管上,如果以后准备将这个遥控器作为其他用途还可以把数码管上的键值化成16进制使用如(74——0x4A)。
如果有哪里不正确,期待大家给我改正,共同进步!
(部分代码摘自网络)
#include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //红外接收头H1838控制脚,单脚控制 #define RED_IN P1DIR &= ~BIT3 //设置输入,红外接收头接单片机P13口 #define RED_OUT P1DIR |= BIT3 //设置输出 #define RED_L P1OUT &= ~BIT3 //置低电平 #define RED_H P1OUT |= BIT3 //置高电平 #define RED_R (P1IN & BIT3) //读电平 #define LED8PORT P2OUT //P2接8个LED灯 #define LED8SEL P2SEL //P2接8个LED灯 #define LED8DIR P2DIR //P2接8个LED灯 #define DATAPORT P4OUT //数据口所在端口P4 #define DATASEL P4SEL //数据口功能寄存器,控制功能模式 #define DATADIR P4DIR //数据口方向寄存器 #define CTRPORT P6OUT //控制线所在的端口P6 #define CTRSEL P6SEL //控制口功能寄存器,控制功能模式 #define CTRDIR P6DIR //控制口方向寄存器 #define DCTR0 P6OUT &= ~BIT4 //数码管段控制位信号置低 #define DCTR1 P6OUT |= BIT4 //数码管段控制位信号置高 #define WCTR0 P6OUT &= ~BIT3 //数码管位控制位信号置低 #define WCTR1 P6OUT |= BIT3 //数码管位控制位信号置高 //*********************************************************************** // 系统时钟初始化 //*********************************************************************** void Clock_Init() { uchar i; BCSCTL1&=~XT2OFF; //打开XT2振荡器 BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ do{ IFG1&=~OFIFG; //清楚振荡器错误标志 for(i=0;i<100;i++) _NOP(); } while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待 IFG1&=~OFIFG; } //*********************************************************************** // MSP430内部看门狗初始化 //*********************************************************************** void WDT_Init() { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 } uchar KEY_VAL=0; uchar code_value=0; uchar key_code[4],code='_'; //红外接收头H1838控制脚,单脚控制 //*********************************************************************** // MSP430IO口初始化 //*********************************************************************** void Port_Init() { LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF DATASEL = 0x00; //设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; //设置IO口方向为输出 DATAPORT = 0xFF; //P4口初始设置为FF CTRSEL = 0x00; //设置IO口为普通I/O模式,此句可省 CTRDIR |= BIT3 + BIT4; //设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; //P6口初始设置为FF RED_L; RED_IN; } //************************************************************************* // 显示采集到的数据到LED灯 //************************************************************************* void Display_Time(uchar Time) { uchar i,j; j=0x01; //此数据用来控制位选 for(i=0;i<5;i++) //用后2位数码管来显示 { DCTR1; WCTR1; DATAPORT=~j; WCTR0; j=(j<<1); DATAPORT=0x00; //前6位都不显示,送数据00即可 DCTR0; delay_ms(2); } DCTR1; //开始显示100位 WCTR1; DATAPORT=~j; WCTR0; j=(j<<1); DATAPORT=table[Time/100]+0x80; DCTR0; delay_ms(1); DCTR1; //开始显示10位 WCTR1; DATAPORT=~j; WCTR0; j=(j<<1); DATAPORT=table[Time/10]+0x80; DCTR0; delay_ms(1); DCTR1; //开始显示个位 WCTR1; DATAPORT=~j; WCTR0; j=(j<<1); DATAPORT=table[Time%10]+0x80; DCTR0; delay_ms(1); DCTR1; WCTR1; DATAPORT=0xff; WCTR0; } //************************************************************************* // 遥控器解码子程序 //************************************************************************* void Red_Code() { uchar i,j,k = 0; for(i = 0;i < 19;i++) { delay_us(400); //延时400us if(RED_R) //9ms内有高电平,则判断为干扰,退出处理程序 { return; } } while(!RED_R); //等待9ms低电平过去 for(i=0;i<5;i++) //是否连发码 { delay_us(500); if(!RED_R) { return; } } while(RED_R); //等待4.5ms高电平过去 for(i = 0;i < 4;i++) //接收4个字节的数据 { for(j = 0;j < 8;j++) //每个字节的数据8位 { while(!RED_R); //等待变高电平 while(RED_R) //计算高电平时间 { delay_us(100);
史海拾趣
|
摘要:随着现代科学技术的飞速发展,构建完善坚强可靠的电力通信网,显得越来越重要。文章结合电力通信的特点和需求及无线新技术的特性,分析无线通信技术在电网通信中的应用前景。 关键词:无线通信;电网通 ...… 查看全部问答> |
|
现在我要把一个VC下的控制台程序移植到EVC环境下,我装了EVC 4.0 , SP4 和Standard SDK,但还是发现没有Process.h和errno.h等一些C库函数,怎么解决这个问题呢?我从网上看到 说有人整理了这些文件,licence是LGPL的. LGPL是什么意思呢?我想最好能 ...… 查看全部问答> |
|
最近需要解决CE下开发多语言程序的问题 在论坛上找到一个相关的帖子,使用资源DLL实现的。 http://community.eeworld.net/Expert/TopicView3.asp?id=5679121 这个简单。 -- 我看CE的帮助文档里有MUI(Multilingual User Interface)的内容,应该 ...… 查看全部问答> |
|
STM32:如何关联:“stm32f10x_vector.c”文件? 在 STM32 Firmware library 目录:...STM32F10xFWLibFWLibprojectRIDE 有一个stm32f10x_vector.c 文件, 这个 ..._vector.c 就是跟中断向量有关的吧。对于 Ride7 ...… 查看全部问答> |
|
我在调试LM3S9L97板子的Can模块时 系统一直提示identifier \"GPIO_PB4_CAN0RX\" is undefined 但是 我在上面已经声明了 #define PART_LM3S9L97#include \"driverlib/pin_map.h\"了啊 下面是我的can模块的初始化代码 SysCtlPeripheralEn ...… 查看全部问答> |
|
我做的项目本来用ATmega128去驱动SSD1289的屏幕时,使用的是UTFT的代码,结果显示速度不能令人满意。后来发现有人说使用汇编会快一些,后来证实了这个是正确的。 所以我想问,有没有会写关于I2C和SPI的汇编代码?这样能不能使得SD卡读写速度、I2C ...… 查看全部问答> |




