avr学习型空调红外遥控器代码IRD1V21.docx
- 文档编号:7029514
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:8
- 大小:34.65KB
avr学习型空调红外遥控器代码IRD1V21.docx
《avr学习型空调红外遥控器代码IRD1V21.docx》由会员分享,可在线阅读,更多相关《avr学习型空调红外遥控器代码IRD1V21.docx(8页珍藏版)》请在冰豆网上搜索。
avr学习型空调红外遥控器代码IRD1V21
avr学习型空调红外遥控器代码
作者:
佚名 来源:
本站原创 点击数:
24 更新时间:
2010年08月15日 【字体:
大中小】
/***************************************/
/*Target:
avr单片机ATmega8l*/
/*Crystal:
3.6864Mhz*/
/*2007.8.20*/
/*外国人写的学习型空调红外遥控器的源程序*/
/*AT24C512里存储2个键的时间数据,*/
/*学习和发射时都通过串口输出*/
/*按键学习和串口学习都可以
/*带多键盘通讯接口
/***************************************/
//IRD-1V20模块地址写EEPROM
(2)
#include
#include
#include
#include
#defineSYSCLK3686400UL
#defineucharunsignedchar
#defineuintunsignedint
#defineulintunsignedlong
#defineIRD_STARTTCCR2=0X19
#defineIRD_STOPTCCR2=0X00
/*I2Cdeviceslaveaddress1A0、A1、A2--GND==0xa0
2A0、A1、A2--VCC==0xa6*/
/*24c512=65536bytes,anykeyinclude <1000bytes*/
#definedevicecode0x01
#defineTWI_SLA_24C5120xa0
//#defineaddress0x02//遥控器地址
//#defineTWI_SLA_PCF85630xa2
#defineMAX_ITER200
#defineTW_WRITE0
#defineTW_READ1
//MT
#defineTW_REP_START0x10
#defineTW_START0x08
#defineTW_MT_ARB_LOST0x38
#defineTW_MT_SLA_ACK0x18
#defineTW_MT_SLA_NACK0x20
#defineTW_MT_DATA_ACK0x28
#defineTW_MT_DATA_NACK0x30
//MR
#defineTW_MR_SLA_ACK0x40
#defineTW_MR_SLA_NACK0x48
#defineTW_MR_ARB_LOST0x38
#defineTW_MR_DATA_NACK0x58
#defineTW_MR_DATA_ACK0x50
#defineled_offPORTC|=(1< #defineled_onPORTC&=(~(1< #defineTX485PORTD|=(1< #defineRX485PORTD&=(~(1< ucharend,study_key; uchardata_buf[700]; //uchardata_buf11[100]; ucharmodify_buf[6];//键值特征暂存区 ucharstudy_key_value=0; ucharsend_key_value=0; ucharscon_key_value=0; ucharrece_begin=0; uinttimer_over_cnt,pulse_in_cnt; ucharsend_end; uintsave_start,send_start; //uintpp; ucharstudy_num,send_num; uintnum,lenth; ucharsum=0,rec_end;//len1; uints_save_start; uchars_study_num; uintcount0,count1; uintrece_num=0;//接受数据计数; ucharrece_buf[8]; ucharrece_ok=0; ucharctrl_flag=0; ucharget_flag=0; ucharset_flag=0; ucharamend_flag=0; ucharscon_save[8]; ucharscon_err=0; ucharscon_err_flag=0; ucharkey_on_flag=0; ucharkey_off_flag=0; ucharord_flag=0; ucharMKaddress; voidEEPROM_write(unsignedintAddress,unsignedcharUcData) { while(EECR&(1< EEAR=Address; EEDR=UcData; EECR|=(1< EECR|=(1< } unsignedcharEEPROM_read(unsignedintAddress) { while(EECR&(1< EEAR=Address; EECR|=(1< returnEEDR; } voidwatchdog_init(void) { WDR();//thispreventsatimoutonenabling WDTCR=0x1F; NOP(); WDTCR=0x0F;//WATCHDOGENABLED-dontforgettoissueWDRs } voidDelay_mSec(uintn) { uchari; while(n--){for(i=0;i<125;i++);WDR();} } voidDelay_us(ucharn) { uchari; for(i=0;i } voidint0_init(void) { MCUCR=0x01; //MCUSR=0; } voiduart_init(void)//bps=38400,UCSRA=0X02;bps=19200,UCSRA=0; { UCSRB=0x00;//disablewhilesettingbaudrate UCSRA=0x01; UCSRC=0x86;//0x06; UBRRL=0x0b;//setbaudratelo UBRRH=0x00;//setbaudratehi UCSRB=0x9c; } intTWI_read_bytes(ucharSLAADDR,uinteeaddr,intlen,uchar*buf,ucharslavtype) { ucharsla,twcr,n=0; intrv=0; /*patchhighbitsofEEPROMaddressintoSLA*/ WDR(); sla=SLAADDR; restart: if(n++>=MAX_ITER)return-1; begin: TWCR=(1< while((TWCR&(1< switch((TWSR&0xf8)) { caseTW_REP_START: /*OK,butshouldnothappen*/ caseTW_START: break; caseTW_MT_ARB_LOST: gotobegin;/*Note[7]*/ default: return-1;/*error: notinstartcondition*/ /*NB: do/not/sendstopcondition*/ } WDR(); TWDR=sla|TW_WRITE; TWCR=(1< while((TWCR&(1< switch((TWSR&0xf8)) { caseTW_MT_SLA_ACK: break; caseTW_MT_SLA_NACK: gotorestart;/*nackduringselect: devicebusywriting*/ caseTW_MT_ARB_LOST: gotobegin;/*re-arbitrate*/ default: gotoerror;/*mustsendstopcondition*/ } if(slavtype==2) { TWDR=eeaddr>>8;/*high8bitsofaddr*/ TWCR=(1< while((TWCR&(1< switch((TWSR&0xf8)) { caseTW_MT_DATA_ACK: break; caseTW_MT_DATA_NACK: gotoquit; caseTW_MT_ARB_LOST: gotobegin; default: gotoerror;/*mustsendstopcondition*/ } } WDR(); TWDR=eeaddr;/*low8bitsofaddr*/ TWCR=(1< while((TWCR&(1< 由于代码太长,本文篇幅有限,完整本版的代码从这里下载 这是从一个外国论坛上搞下来的,已经测试通过,晶振使用外接的3.6864Mhz,内部rc晶振可能不太稳定。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- avr 学习 空调 红外 遥控器 代码 IRD1V21