版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/*項(xiàng)目名稱: 紅外編碼發(fā)射程序功能說明:按下按鍵則發(fā)出相應(yīng)的紅外編碼。格式為RC5MCU類型: ATmega88vMCU時(shí)鐘: 8MHz 內(nèi)部RC振蕩器編譯器: ICC-AVR v7.22寫時(shí)間: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;/中斷計(jì)數(shù),設(shè)定
2、中斷次數(shù) uuchar irflag;/紅外發(fā)送標(biāo)志位uchar irsys=0x44,0x9b;/16位用戶碼uchar irdata,ircode; /發(fā)送的紅外數(shù)據(jù)/*- 函數(shù)說明-*/ /-LCD驅(qū)動(dòng)程序說明-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ù)/-/-延時(shí)程序說明-void delay_1us(void); /1us延時(shí)函數(shù)void delay_10us(void); /10us延時(shí)函數(shù)void delay_1ms(void); /1ms延時(shí)函數(shù)void dela
4、y_nus(unsigned int n); /n us延時(shí)函數(shù)void delay_nms(unsigned int n); /n ms延時(shí)函數(shù)/-/-鍵盤程序說明-uchar keydown(void); /判斷是否有鍵按下程序(無鍵按下,返回0;有鍵按下返回1)uchar getkey(void); /取所按下鍵對(duì)應(yīng)的鍵值程序/-MCU端口初始化程序說明-void port_init(void);/= void timer0_init(void);/定時(shí)器0初始化/-void ir_sendbyte(void); /紅外發(fā)送一個(gè)字節(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ū)動(dòng)程序- 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ū)動(dòng),改變下面配置信息即可-*/# define LCD_EN_PORT POR
6、TB /以下2個(gè)要設(shè)為同一個(gè)口#define LCD_EN_DDR DDRB# define LCD_RS_PORT PORTB /以下2個(gè)要設(shè)為同一個(gè)口#define LCD_RS_DDR DDRB# define LCD_RW_PORT PORTB /以下2個(gè)要設(shè)為同一個(gè)口#define LCD_RW_DDR DDRB# define LCD_DATA_PORT PORTB /以下3個(gè)要設(shè)為同一個(gè)口# 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ū)動(dòng)程序-v oid LCD_init(void) /液晶初始化LCD_RW_DDR|=LCD_RW; /設(shè)置RW方向?yàn)檩敵鯨CD_RW_PORT&=LCD_RW; /RW清零
8、,設(shè)置為寫模式LCD_DATA_DDR|=LCD_DATA; /數(shù)據(jù)口方向?yàn)檩敵鯨CD_EN_DDR|=LCD_EN; /設(shè)置EN方向?yàn)檩敵鯨CD_RS_DDR|=LCD_RS; /設(shè)置RS方向?yàn)檩敵鯨CD_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) /取所按下鍵對(duì)應(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);*延時(shí)程序*/*1M內(nèi)部RC時(shí)鐘*/1usvoid delay_1us(void) /1us延時(shí)函數(shù)_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP(); /10usvoid delay_10us(void) /10us延時(shí)函數(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í)函數(shù)uint i=0;for (i=0;i<n;i+)delay_1us();/1msvoid delay_1ms(void) /1ms延時(shí)函數(shù)unsigned char i=83;while(i-)delay_10us();/nmsvoid delay_nms(uint n) /N us延時(shí)函數(shù)PDF created with pdf
18、Factory Pro trial versionwhile(n-)delay_1ms(); oid ir_sendbyte(void) /紅外發(fā)送一個(gè)字節(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; /啟動(dòng)紅外發(fā)射二極管發(fā)射count=0; /中斷計(jì)數(shù)先清0TCCR0B=1; /開啟定時(shí)器0while(count<set_count); /等待發(fā)送完TCCR0B=0; /關(guān)閉定時(shí)器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; /中斷計(jì)數(shù)清0TCCR0B=1; /開啟定時(shí)器0while(count<set_count); /等待發(fā)送完TCCR0B=0; /關(guān)閉定時(shí)器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; /啟動(dòng)紅外發(fā)射二極管發(fā)射count=0; /中斷計(jì)數(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; /啟動(dòng)紅外發(fā)射二極管發(fā)射count=0; /中斷計(jì)數(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;/定時(shí)器0初始化void timer0_init(void)TCCR0B = 0x00;/設(shè)置定時(shí)器0預(yù)分頻為1/1系統(tǒng)時(shí)鐘(0x01),先關(guān)閉。TCNT0
24、 = 0xa6;/中斷溢出周期設(shè)定為13uSTIMSK0 = 0x01;/使能定時(shí)器0溢出中斷/定時(shí)器1初始化void timer1_init(void)TCCR1B = 0x00;/設(shè)置定時(shí)器1預(yù)分頻為1/256系統(tǒng)時(shí)鐘(0x04),先關(guān)閉。TCNT1H = 0xf2;/中斷溢出周期設(shè)定為110msTCNT1L = 0x70;/PDF created with pdfFactory Pro trial versionTIMSK1 = 0x01;/使能定時(shí)器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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:近代日本對(duì)中國(guó)茶業(yè)的侵奪研究
- 課題申報(bào)參考:教育高質(zhì)量發(fā)展視域下大學(xué)體育一流本科課程建設(shè)實(shí)證研究
- 2025年園林景觀綠化地使用權(quán)轉(zhuǎn)讓合同4篇
- 2025年度新能源汽車充電站車位租賃合作協(xié)議書4篇
- 2025版委托擔(dān)保合同范本:知識(shí)產(chǎn)權(quán)質(zhì)押貸款擔(dān)保合同3篇
- 2025年度家具行業(yè)綠色供應(yīng)鏈管理合同4篇
- 二零二五版橋梁建設(shè)施工合作協(xié)議2篇
- 2025年度個(gè)人沿街店房租賃合同(含合同解除條件與爭(zhēng)議解決)4篇
- 二零二五年度國(guó)際交流項(xiàng)目教師選拔與聘用協(xié)議
- 2025年度星級(jí)酒店廚房設(shè)備采購(gòu)與定期檢修合同4篇
- 數(shù)學(xué)-山東省2025年1月濟(jì)南市高三期末學(xué)習(xí)質(zhì)量檢測(cè)濟(jì)南期末試題和答案
- 中儲(chǔ)糧黑龍江分公司社招2025年學(xué)習(xí)資料
- 湖南省長(zhǎng)沙市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年林地使用權(quán)轉(zhuǎn)讓協(xié)議書
- 物流有限公司安全生產(chǎn)專項(xiàng)整治三年行動(dòng)實(shí)施方案全國(guó)安全生產(chǎn)專項(xiàng)整治三年行動(dòng)計(jì)劃
- 2025屆江蘇省13市高三最后一卷生物試卷含解析
- 當(dāng)前中國(guó)個(gè)人極端暴力犯罪個(gè)案研究
- 中國(guó)象棋比賽規(guī)則
- 7天減肥餐食譜給你最能瘦的一周減肥食譜
- GB/T 31525-2015圖形標(biāo)志電動(dòng)汽車充換電設(shè)施標(biāo)志
評(píng)論
0/150
提交評(píng)論