紅外編碼發(fā)射(帶連發(fā)碼)_第1頁
紅外編碼發(fā)射(帶連發(fā)碼)_第2頁
紅外編碼發(fā)射(帶連發(fā)碼)_第3頁
紅外編碼發(fā)射(帶連發(fā)碼)_第4頁
紅外編碼發(fā)射(帶連發(fā)碼)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/*項目名稱: 紅外編碼發(fā)射程序功能說明:按下按鍵則發(fā)出相應(yīng)的紅外編碼。格式為RC5MCU類型: ATmega88vMCU時鐘: 8MHz 內(nèi)部RC振蕩器編譯器: ICC-AVR v7.22寫時間:2012年05月05日編版本: 1.0*/#include<iom88v.h>#include<macros.h>#include<eeprom.h>#define uchar unsigned char#define ulong unsigned long#define uint unsigned int int count,set_count;/中斷計數(shù),設(shè)定

2、中斷次數(shù) uuchar irflag;/紅外發(fā)送標志位uchar irsys=0x44,0x9b;/16位用戶碼uchar irdata,ircode; /發(fā)送的紅外數(shù)據(jù)/*- 函數(shù)說明-*/ /-LCD驅(qū)動程序說明-void LCD_init(void); /液晶初始化函數(shù)void LCD_en_write(void); /液晶使能函數(shù)void LCD_write_command(unsigned char command) ; /寫指令函數(shù)void LCD_write_data(unsigned char data); /寫數(shù)據(jù)函數(shù)void LCD_set_xy (unsigned cha

3、r x, unsigned char y); /寫地址函數(shù)void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s); /寫字符串函數(shù)void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data); /寫字符函數(shù)/-/-延時程序說明-void delay_1us(void); /1us延時函數(shù)void delay_10us(void); /10us延時函數(shù)void delay_1ms(void); /1ms延時函數(shù)void dela

4、y_nus(unsigned int n); /n us延時函數(shù)void delay_nms(unsigned int n); /n ms延時函數(shù)/-/-鍵盤程序說明-uchar keydown(void); /判斷是否有鍵按下程序(無鍵按下,返回0;有鍵按下返回1)uchar getkey(void); /取所按下鍵對應(yīng)的鍵值程序/-MCU端口初始化程序說明-void port_init(void);/= void timer0_init(void);/定時器0初始化/-void ir_sendbyte(void); /紅外發(fā)送一個字節(jié)數(shù)據(jù)void ir_send(void); /發(fā)送紅外數(shù)

5、據(jù)PDF created with pdfFactory Pro trial versionoid ir_send_repeat(void);/發(fā)送重復(fù)碼v/*子程序體定義*/ *-LCD驅(qū)動程序- LCD引腳定義1-GND2-VCC3-VO4-RS5-RW6-EN7 到14-D0-D71 5-背景燈+1 6-背景燈 下面是AVR與LCD連接信息 PB3 ->RSPB1 ->ENPB2 ->RWPB4 ->D4PB5 ->D5PB6 ->D6PB7 ->D7要 使用本LCD驅(qū)動,改變下面配置信息即可-*/# define LCD_EN_PORT POR

6、TB /以下2個要設(shè)為同一個口#define LCD_EN_DDR DDRB# define LCD_RS_PORT PORTB /以下2個要設(shè)為同一個口#define LCD_RS_DDR DDRB# define LCD_RW_PORT PORTB /以下2個要設(shè)為同一個口#define LCD_RW_DDR DDRB# define LCD_DATA_PORT PORTB /以下3個要設(shè)為同一個口# define LCD_DATA_DDR DDRB /一定要用高4位#define LCD_DATA_PIN PINB#define LCD_RS (1<<PB3) /0x08 p

7、ortB3 out#define LCD_EN (1<<PB1) /0x02 portB1 out#define LCD_RW (1<<PB2) /0x04 portB2 out#define LCD_DATA (1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7) /0xf0 portB4/5/6/7 out / /-LCD驅(qū)動程序-v oid LCD_init(void) /液晶初始化LCD_RW_DDR|=LCD_RW; /設(shè)置RW方向為輸出LCD_RW_PORT&=LCD_RW; /RW清零

8、,設(shè)置為寫模式LCD_DATA_DDR|=LCD_DATA; /數(shù)據(jù)口方向為輸出LCD_EN_DDR|=LCD_EN; /設(shè)置EN方向為輸出LCD_RS_DDR|=LCD_RS; /設(shè)置RS方向為輸出LCD_write_command(0x28);LCD_en_write();delay_nus(40);LCD_write_command(0x28); /4位顯示LCD_write_command(0x0c); /顯示開/LCD_write_command(0x01); /清屏PDF created with pdfFactory Pro trial versiondelay_nms(2);

9、oid LCD_en_write(void) /液晶使能 vLCD_EN_PORT|=LCD_EN;delay_nus(1);LCD_EN_PORT&=LCD_EN; oid LCD_write_command(unsigned char command) /寫指令 vdelay_nus(16);LCD_RS_PORT&=LCD_RS; /RS=0 寫指令 LCD_DATA_PORT&=0X0f; /清高四位 LCD_DATA_PORT|=command&0xf0; /寫高四位 LCD_en_write();command=command<<4; /

10、低四位移到高四位 LCD_DATA_PORT&=0x0f; /清高四位 LCD_DATA_PORT|=command&0xf0; /寫低四位 LCD_en_write();oid LCD_write_data(unsigned char data) /寫數(shù)據(jù) vdelay_nus(16);LCD_RS_PORT|=LCD_RS; /RS=1 寫數(shù)據(jù) LCD_DATA_PORT&=0X0f; /清高四位LCD_DATA_PORT|=data&0xf0; /寫高四位LCD_en_write();data=data<<4; /低四位移到高四位 LCD_DA

11、TA_PORT&=0X0f; /清高四位 LCD_DATA_PORT|=data&0xf0; /寫低四位 LCD_en_write();oid LCD_set_xy( unsigned char x, unsigned char y ) /寫地址函數(shù) vunsigned char address;if (y = 0) address = 0x80 + x;else address = 0xc0 + x;LCD_write_command( address);void LCD_write_string(unsigned char X,unsigned char Y,unsigne

12、d char *s) /列x=019,行y=0,1LCD_set_xy( X, Y ); /寫地址while (*s) / 寫顯示字符PDF created with pdfFactory Pro trial versionLCD_write_data( *s );s +; oid LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) /列x=019,行y=0,1vLCD_set_xy( X, Y ); /寫地址LCD_write_data( data);/= *鍵盤程序*/uchar keydown(void)

13、/判斷是否有鍵按下程序(無鍵按下,返回0;有鍵按下返回1)uchar down_flag;PORTD&=(1<<PD3)|(1<<PD4); / PD3,PD4清零delay_10us();if(PIND&0x07)!=0x07)delay_nms(10);if(PIND&0x07)!=0x07) down_flag=1; /有鍵按下返回1else down_flag=0; /無鍵按下返回0else down_flag=0;return(down_flag);/*取鍵值程序*/uchar getkey(void) /取所按下鍵對應(yīng)的鍵值程序(Te

14、st:1,左:2,右:3,下:4,Menu:5,上:6,其它:7)uchar value;PORTD&=(1<<PD3); /PD3清零PORTD|=(1<<PD4); /PD4置位delay_10us();if(PIND&0x07)!=0x07)if(PIND&0x01)=0) value=1; / Test鍵按下,value=1 else if(PIND&(1<<PD1)=0) value=2; / 左鍵按下,value=2else if(PIND&(1<<PD2)=0) value=3; / 右鍵按下

15、,value=3 else value=7; / 無鍵按下,value=7 elsePORTD|=(1<<PD3); /PD3置位PORTD&=(1<<PD4); /PD4清零delay_10us();if(PIND&0b00000111)!=0b00000111)PDF created with pdfFactory Pro trial versionif(PIND&(1<<PD0)=0) value=6; / 上鍵按下,value=6 else if(PIND&(1<<PD1)=0) value=5; / Me

16、nu鍵按下,value=5 else if(PIND&(1<<PD2)=0) value=4; / 下鍵按下,value=4 else value=7; / 無鍵按下,value=7 else value=7;return(value);*延時程序*/*1M內(nèi)部RC時鐘*/1usvoid delay_1us(void) /1us延時函數(shù)_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP(); /10usvoid delay_10us(void) /10us延時函數(shù) delay_1us();delay_1us();de

17、lay_1us();delay_1us();delay_1us();delay_1us();delay_1us();delay_1us();delay_1us();delay_1us();/nusvoid delay_nus(uint n) /N us延時函數(shù)uint i=0;for (i=0;i<n;i+)delay_1us();/1msvoid delay_1ms(void) /1ms延時函數(shù)unsigned char i=83;while(i-)delay_10us();/nmsvoid delay_nms(uint n) /N us延時函數(shù)PDF created with pdf

18、Factory Pro trial versionwhile(n-)delay_1ms(); oid ir_sendbyte(void) /紅外發(fā)送一個字節(jié)數(shù)據(jù)vunsigned char i;for(i=0;i<8;i+) /發(fā)送8位數(shù)據(jù)set_count=38;/35; /發(fā)送編碼中的0.56ms高電平 (/后為12M晶振下的數(shù)值)irflag=1; /啟動紅外發(fā)射二極管發(fā)射count=0; /中斷計數(shù)先清0TCCR0B=1; /開啟定時器0while(count<set_count); /等待發(fā)送完TCCR0B=0; /關(guān)閉定時器0if(ircode&0x01) se

19、t_count=132;/130; /判斷紅外編碼最低位,若為1則1.69ms的低電平 (/后為12M晶振下的數(shù)值)else set_count=45;/35; /為0則0.565ms的低電平 (/后為12M晶振下的數(shù)值)irflag=0; /低電平則不發(fā)射count=0; /中斷計數(shù)清0TCCR0B=1; /開啟定時器0while(count<set_count); /等待發(fā)送完TCCR0B=0; /關(guān)閉定時器0ircode=ircode>>1; /將數(shù)據(jù)右移,即從低位到高位發(fā)送/-void ir_send(void) /發(fā)送紅外數(shù)據(jù)set_count=684;/672;

20、/發(fā)送編碼中的引導(dǎo)碼(9ms高電平+4.5ms低電平) (/后為12M晶振下的數(shù)值) irflag=1; /啟動紅外發(fā)射二極管發(fā)射count=0; /中斷計數(shù)清0TCCR0B=1;while(count<set_count);TCCR0B=0;set_count=346;/336; /發(fā)送編碼中的4.5ms低電平(/后為12M晶振下的數(shù)值)irflag=0; /低電平則不發(fā)射count=0;TCCR0B=1;while(count<set_count); /等待發(fā)送完TCCR0B=0;ircode=irsys0; /發(fā)送16位用戶碼的前1-8位ir_sendbyte();ircod

21、e=irsys1; /發(fā)送16位用戶碼的前9-16位ir_sendbyte();ircode=irdata; /發(fā)送8位數(shù)據(jù)碼ir_sendbyte();ircode=irdata; /發(fā)送8位數(shù)據(jù)反碼ir_sendbyte();set_count=38;/35; /發(fā)送編碼中的0.56ms高電平 (/后為12M晶振下的數(shù)值)PDF created with pdfFactory Pro trial versionirflag=1; count=0;TCCR0B=1; while(count<set_count);TCCR0B=0;PORTB|=(1<<PB0); /發(fā)射完了

22、關(guān)閉紅外發(fā)射二極管/-發(fā)送重復(fù)碼-void ir_send_repeat(void)set_count=684;/672; /發(fā)送9ms高電平irflag=1; /啟動紅外發(fā)射二極管發(fā)射count=0; /中斷計數(shù)清0TCCR0B=1; /開T0while(count<set_count); /等待發(fā)送完TCCR0B=0;set_count=173; /發(fā)送2.25ms低電平irflag=0; /低電平則不發(fā)射count=0;TCCR0B=1;while(count<set_count); /等待發(fā)送完TCCR0B=0;set_count=38;/35; /發(fā)送編碼中的0.56ms

23、高電平 (/后為12M晶振下的數(shù)值) irflag=1;count=0;TCCR0B=1;while(count<set_count); /等待發(fā)送完TCCR0B=0;PORTB|=(1<<PB0); /發(fā)射完了關(guān)閉紅外發(fā)射二極管/*端口初始化*/void port_init(void)DDRB= 0xff;PORTB= 0x00;DDRC= 0x2f;PORTC= 0xc0;DDRD= 0xf8;PORTD= 0x1f;/定時器0初始化void timer0_init(void)TCCR0B = 0x00;/設(shè)置定時器0預(yù)分頻為1/1系統(tǒng)時鐘(0x01),先關(guān)閉。TCNT0

24、 = 0xa6;/中斷溢出周期設(shè)定為13uSTIMSK0 = 0x01;/使能定時器0溢出中斷/定時器1初始化void timer1_init(void)TCCR1B = 0x00;/設(shè)置定時器1預(yù)分頻為1/256系統(tǒng)時鐘(0x04),先關(guān)閉。TCNT1H = 0xf2;/中斷溢出周期設(shè)定為110msTCNT1L = 0x70;/PDF created with pdfFactory Pro trial versionTIMSK1 = 0x01;/使能定時器1溢出中斷#pragma interrupt_handler timer0_sever:iv_TIMER0_OVFvoid timer0_sever(void)TCNT0 = 0xa6;/中斷溢出周期設(shè)定為13uScount+;if(irfla

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論