红外遥控程序
#include "SPCE061AH"
#define LED_SEG 0x00ff //IOB0~IOB7
#define LED_DIG 0x3f00 //IOB8~IOB13
unsigned int Time=0,Code[40]={0},CodeNum=0;//计数器,32位码,码字计数
//extern unsigned int Time,CodeNum,Code[40];
unsigned int Star_Flag,First_IRQ;
//====================================================================================
//函数名称:unsigned getkey(void)
//函数功能:获得红外遥控器键值
//入口参数:无
//出口参数:无
//说明:适用于32位码字红外接收头及宏科万能遥控器
//====================================================================================
unsigned getkey(void)
{
unsigned int j=0;
unsigned int DateCode,key=0;
if(Code[0]==5) //判断头部是否是5;防止误接收
{ for(j=9;j<=14;j++)
{
P_Watchdog_Clear = 0x01;
if(Code[j]==1&&Code[j+1]==1&&Code[j+2]==1&&Code[j+3]==1&&Code[j+4]==1&&Code[j+5]==1&&Code[j+6]==0&&Code[j+7]==1)
{ //判断用户识别码是不是1111 1101
for(DateCode=0;DateCode<8;DateCode++)//若是,则开始接收八位数据码
{
Code[j+8+DateCode]<<=8;
key|=Code[j+8+DateCode];
key>>=1; //将八位二进制数倒序转成16进制
}
break;
}
}
Code[0]=0;//将头部清零
return key; //返回键值
}
else return(0);
}
//====================================================================
//函数名称:void IO_Init()
//函数功能:IO口初始化,主要是设置IOB2口,用于外中断
//入口参数:无
//出口参数:无
//====================================================================
void IO_Init()
{
P_IOB_Attrib&=0xfffb; //IOB2端口上拉电阻输入 外中断
P_IOB_Dir&=0xfffb;
P_TimerA_Ctrl=C_SourceA_32768Hz+C_SourceB_1; //TimerA:32768Hz
P_TimerA_Data=0xfffe;
P_INT_Ctrl=C_IRQ3_EXT1|C_IRQ1_TMA; // 外中断1,时基中断,定时中断
__asm("INT IRQ");
}
//=====================================================================
//函数名称:
//函数功能:中断函数
//入口参数:无
//出口参数:无
//=====================================================================
void IRQ3(void) __attribute__ ((ISR));
void IRQ3(void)
{
if(P_INT_Ctrl&C_IRQ3_EXT2)
{ //IRQ3_Ext1
P_INT_Clear=C_IRQ3_EXT2;
}
else if(P_INT_Ctrl&C_IRQ3_EXT1)
{//外中断1用于判断脉冲个数
if(!First_IRQ) {Time=0;First_IRQ=1;}//第一次外中断来时设置
else
{
if(Time>180&&Time<240) //判断起始码
{Star_Flag=1; CodeNum=0;Code[0]=5;CodeNum=1;Time=0;}//起始码来时设置
if(Star_Flag)//开始接收
{
if((Time>=10)&&(Time<25))Code[CodeNum]=0;//计数值设置
else if((Time>25)&&(Time<40))Code[CodeNum]=1;
CodeNum++;//码字计数器加1
Time=0;//计数值清零,以对下一个脉冲宽度进行计时
if(CodeNum>40) {CodeNum=0;Star_Flag=0;First_IRQ=0;}//脉冲个数判断,共32个,此处设为40,是为防止漏接收
}
}
P_INT_Clear=C_IRQ3_EXT1;
}
else
{
P_INT_Clear=C_IRQ3_KEY;//IRQ3_KeyWakeUp
}
}
void IRQ1(void) __attribute__ ((ISR));
void IRQ1(void)
{ Time++; //计数以获得脉冲宽度
P_INT_Clear=C_IRQ1_TMA; //clear INT flag
}
1、闹钟设置界面。
2、存储响闹时间。
3、时间中断,设置读取时间的flag
4、主程序中判断flag设置,读取时钟。
5、比较当前时钟在响闹时间范围内,输出闹铃(如果是蜂鸣器,给他一个输出频率的信号)。
以上就是关于找人编写一段基于MSP430F149的万能红外遥控程序,我有流程图!!价格好说全部的内容,包括:找人编写一段基于MSP430F149的万能红外遥控程序,我有流程图!!价格好说、基于msp430f149+ds1302+lcd1602的可调数字钟(带闹铃)的C语言程序,我现在程序已经写好了、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)