历史上的今天
返回首页

历史上的今天

今天是: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);

推荐阅读

史海拾趣

Crystal Clear Technology公司的发展小趣事

Crystal Clear Technology自创立之初,便专注于研发新型显示技术。面对市场上日益增长的高清显示需求,公司投入大量资源进行技术研发,成功推出了一款具有高清晰度和广视角的显示屏产品。这一创新产品迅速获得市场认可,为Crystal Clear Technology打开了新的销售渠道,并奠定了公司在行业内的技术领先地位。

Dongguan City Niuhang Electronics Co.LTD公司的发展小趣事

随着公司业务的不断拓展,Dongguan City Niuhang Electronics Co.LTD意识到技术创新的重要性。公司投入大量资金和技术人员,专注于芯片新技术、封装自动化的研究和开发。经过数年的努力,公司成功研发出一系列高性能的二极管、整流器等产品,其中多项技术获得国家级发明专利。这些创新产品不仅提升了公司的市场竞争力,也为公司赢得了业界的广泛认可。

DAVE Embedded Systems公司的发展小趣事

随着公司的发展,DAVE Embedded Systems不断投入研发力量,致力于技术创新和产品创新。他们基于最新技术(如多核ARM Cortex、PowerPC和X86)设计了一系列高端嵌入式系统模块,这些产品不仅满足了客户对性能的需求,还提供了更好的可靠性和可扩展性。此外,公司还积极开发基于Android和Windows平台的嵌入式系统模块,以满足不同客户的需求。

ETI Systems公司的发展小趣事

ETI Systems深知人才是企业发展的核心竞争力。因此,公司一直注重人才培养和引进工作。通过建立完善的人才培养机制和激励机制,ETI Systems吸引了一批具有丰富经验和专业技能的优秀人才加入公司。同时,公司也积极为员工提供广阔的发展空间和良好的工作环境,让员工能够充分发挥自己的才能和创造力。这种重视人才的企业文化,为ETI Systems的长期发展提供了有力的人才保障。

AMI [American Megatrends Inc]公司的发展小趣事

ETI Systems公司自创立之初,就专注于研发具有创新性的电子产品和解决方案。在公司发展的早期,它推出了一款高性能的无线通信设备,该设备采用了当时最先进的信号处理技术,极大地提升了数据传输的效率和稳定性。这一创新产品不仅帮助ETI Systems在市场上获得了良好的口碑,也引领了整个行业的技术发展方向。

Apacer公司的发展小趣事

1997年,Apacer宇瞻科技在台湾创立,初期专注于DRAM模组的专业供货。公司凭借对半导体垂直整合的完整内存模组技术能力和专业营销业务,迅速在全球市场上打响了Apacer的自有品牌。1999年,宇瞻科技更是跃升为全球第四大内存模组厂商,奠定了其在行业内的领先地位。

问答坊 | AI 解惑

状态机资料

状态机资料的资料,设计例子加资料…

查看全部问答>

PMO与PDT

项目管理办公室(Project Management Office)是为让企业内共享项目管理的技能、经验等而建立的全公司的一个职能性组织。在企业中,它可能有各种各样的称谓,比如:产品线管理办(Product-line Management Office)、项目管理办、运作支撑部等等。 ...…

查看全部问答>

谈无线通信技术在电网通信中的应用前景

摘要:随着现代科学技术的飞速发展,构建完善坚强可靠的电力通信网,显得越来越重要。文章结合电力通信的特点和需求及无线新技术的特性,分析无线通信技术在电网通信中的应用前景。           关键词:无线通信;电网通 ...…

查看全部问答>

EVC下的Process.h问题

现在我要把一个VC下的控制台程序移植到EVC环境下,我装了EVC 4.0 , SP4 和Standard SDK,但还是发现没有Process.h和errno.h等一些C库函数,怎么解决这个问题呢?我从网上看到 说有人整理了这些文件,licence是LGPL的. LGPL是什么意思呢?我想最好能 ...…

查看全部问答>

请教一下CE下开发多语言程序的问题(MUI)

最近需要解决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  ...…

查看全部问答>

我的CAN模块程序 出现这样的错误 求高手解答啊!

我在调试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 ...…

查看全部问答>

脉宽参数测量

       前阵子做了个脉宽参数测量仪,好像是12年的电赛题目。        做这个题我主要是基于STC12C5A60S2的硬件资源上折腾的。        首先峰值测量用的是单片机上十位AD,通过在某 ...…

查看全部问答>

最小系统板最后一步,JTAG接口的问题,求助啊

28027最小系统板,如图黄色高亮的地方,jtag接口的电源引脚要不要接到芯片上?? …

查看全部问答>