当前位置:首页 > 单片机 > 单片机
[导读] #include#include#defineuintunsignedint#defineucharunsignedchar#defineulongunsignedlong /*------------------------------显示-----------------------------------*/#defineLED_DATAPORTBconstuc

#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlong


/*------------------------------显示-----------------------------------*/
#defineLED_DATAPORTB
constuchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*
0123456789ABCDEF
*/
voiddelay(void){
uinti;
for(i=0;i<2000;i++);
}
voiddis_int(uintdis_data)
{//四位共阴数码管,十六进制显示
LED_DATA=tab[(uchar)((dis_data&0xf000)>>12)];//显示千位
PORTD=0xf7;
delay();//延时

LED_DATA=tab[(uchar)((dis_data&0x0f00)>>8)];//显示百位
PORTD=0xfb;
delay();//延时

LED_DATA=tab[(uchar)(dis_data&0x00f0)>>4];//显示十位
PORTD=0xfd;
delay();//延时

LED_DATA=tab[(uchar)dis_data&0x000f];//显示个位
PORTD=0xfe;
delay();//延时
}
voidport_init(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0xFF;
PORTC=0xFF;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0x0F;
}
voidtimer1_init(void)
{
TCCR1B=0x00;//stop
TCNT1H=0x00;//setup
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x08;
TCCR1A=0x00;
/*一体化接收头的DATA引脚接到ATmega16的PD6(ICP1)引脚,采用上升沿捕捉的方法解码*/
/*晶振为6M,无分频,用8M太大(分频则太小)*/
TCCR1B=0x41;//startTimer
}
uintarr[16];//保存捕捉值
uchartimes;//记录捕捉次数
ucharindex;//数组索引
ucharir_code;//红外遥控键码
ucharOK_flag;//解码完毕标志
/*------------------------------------------------------------------------------
模块名称:PD6(ICP1)引脚上升沿捕捉中断程序
影响:将捕捉值保存在arr[16]中
______
"|||
___||_________||__________
|<-----t----->|
DECHEX
t=9ms计数值=540000xD2F0
t=4.5ms计数值=270000x6978
t=2.25ms计数值=135000x34BC
t=1.125ms计数值=67500x1A5E

------------------------------------------------------------------------------*/
#pragmainterrupt_handlertimer1_capt_isr:6
voidtimer1_capt_isr(void)
{
uintvalue;
value=ICR1L;
//CLI();
value|=(uint)(ICR1H<<8);
TCNT1H=0x00;
TCNT1L=0x00;
times++;
if(times>18&×<35){
//从第19个上升沿开始保存,直到第34个,短按时共有36个上升沿
arr[index]=value;
index++;
}
elseif(times>=35){
//第35个上升沿到来时,解码完毕
times=0;
index=0;
OK_flag=1;
}
//SEI();
}
/*------------------------------解码程序----------------------------------------
结果:得到uchar型的键码ir_code,如果解码出错,则ir_code=0xff
-----------------------------------------------------------------------------*/
voidget_code(void){
uchari,dat,/*键码*/_dat;/*键码反码*/
uinttemp=0;
for(i=0;i<16;i++){
if(arr[i]<7000){
//“0”
temp<<=1;
}
if(arr[i]>13000){
//“1”
temp<<=1;
temp|=1;
}
}
_dat=(uchar)(temp&0x00ff);/*键码*/
dat=(uchar)((temp>>8)&0x00ff);/*键码反码*/
/*“键码”与“键码反码相与,如果为0则解码正确*/
if((dat&_dat)==0){
ir_code=dat;
}
else{
TCNT1H=0x00;
TCNT1L=0x00;
ir_code=0xff;//解码出错
}
times=0;
index=0;
}
voidinit_devices(void)
{
CLI();
port_init();
timer1_init();
MCUCR=0x00;
GICR=0x00;
TIMSK=0x20;
SEI();
}
voidmain(void){
uchari;
init_devices();

while(1){

if(OK_flag){
get_code();//解码
OK_flag=0;
}
for(i=0;i<200;i++){
dis_int(ir_code);//显示键码
}

}
}


//------------------------------------------------------------------------------

楼主程序今测试了下:
主要有两点改动

用M64,T3,晶体7.3728,GCC20040214

1
voidtimer1_init(void)
{
TCCR3B=0x00;//stop
TCNT3H=0x00;//setup
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x08;
TCCR3A=0x00;
/*一体化接收头的DATA引脚接到ATmega64的PE7(ICP3)引脚,采用上升沿捕捉的方法解码*/
/*晶振为7.3728M,8分频*/
TCCR1B=0xC2;//startTimer@@@@@@@@@@@@@@@@@@@@@@@@@@@改动
}
2


SING(XXXXXXXXXXXXXXX)
{
uintvalue;
value=ICR3L;
value|=(uint)(ICR3H<<8);
TCNT3H=0x00;
TCNT3L=0x00;
times++;
if(times>18)&&(times<35){
//从第19个上升沿开始保存,直到第34个,短按时共有36个上升沿
arr[index]=value;
index++;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@改动
elseif(times>35)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@改动

//elseif(times>=35)//用此语句时第二个键值的第一位被上一键值的第36个脉冲复用,
{
//第35个上升沿到来时,解码完毕
times=0;
index=0;
OK_flag=1;
}
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制...

关键字: AVR 单片机 计算机

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通...

关键字: AVR 单片机 计算机

AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。 但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以...

关键字: AVR 单片机 硬件

在这篇文章中,小编将为大家带来AVR单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: AVR 单片机

在下述的内容中,小编将会对AVR单片机的相关消息予以报道,如果AVR单片机是您想要了解的焦点之一,不妨和小编共同阅读这篇文章哦。

关键字: AVR 单片机

杰成医疗(健适医疗成员企业)的"经血管介入生物主动脉瓣膜"在国内首次得到成功应用,两名心脏瓣膜病患者通过经导管主动脉瓣置换术(TAVR)各被植入一枚"杰成经血管介入瓣膜"。杰成医疗已计划对该产品在全球范围内开展多个前瞻性...

关键字: AVR

新加坡2022年2月5日 /美通社/ -- 近日,新兴医疗科技公司“健适医疗”宣布,公司已完成对“苏州杰成医疗科技有限公司”的收购,后者是国内TAVR(Transcatheter Aortic Valve Replace...

关键字: AVR

心电图aVR导联在额面六轴系统中的地位与作用

关键字: AVR 导联理论

在六轴系统中,avR 导联位于额面右上方,其负极位于左下 30°,在Ⅰ和Ⅱ导联之间。由于胸导联的出现和对Ⅰ和Ⅱ导联的重视,avR 导联常被忽视。近年来有学指出,avR 导联有着重要的应用价值。

关键字: AVR 六轴

通常来讲,AVR单片机指的是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set Computer) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算...

关键字: AVR 哈佛
关闭
关闭