红外发射程序键值在LCD1602上显示实例程序.doc
-
资源ID:67753735
资源大小:38KB
全文页数:24页
- 资源格式: DOC
下载积分:9金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
红外发射程序键值在LCD1602上显示实例程序.doc
LCD1602显示键值程序: #include <reg51.h>#include <intrins.h> #define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_(); void delay(uchar x); /x*0.14MSvoid delay1(int ms);void beep(); sbit IRIN = P33; /紅外接收器數據線sbit BEEP = P15; /蜂鳴器驅動線sbit RELAY= P14; /繼電器驅動線 uchar IRCOM7; sbit LCD_RS = P23; sbit LCD_RW = P24;sbit LCD_EN = P25; uchar code cdis1 = " Red Control "uchar code cdis2 = " IR-CODE: -H " /*/* */*檢查LCD忙狀態 */*lcd_busy爲1時,忙,等待。lcd-busy爲0時,閑,可寫指令與數據。 */* */*/ bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x01); LCD_EN = 0; return(result); /*/* */*寫指令數據到LCD */*RS=L,RW=L,E=高脈衝,D0-D7=指令碼。 */* */*/ void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); cmd = (cmd&0x01)<<7)|(cmd&0x02)<<5)|(cmd&0x04)<<3)|(cmd&0x08)<<1)|(cmd&0x10)>>1)|(cmd&0x20)>>3)|(cmd&0x40)>>5)|(cmd&0x80)>>7); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */*寫顯示數據到LCD */*RS=H,RW=L,E=高脈衝,D0-D7=數據。 */* */*/ void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0;dat = (dat&0x01)<<7)|(dat&0x02)<<5)|(dat&0x04)<<3)|(dat&0x08)<<1)|(dat&0x10)>>1)|(dat&0x20)>>3)|(dat&0x40)>>5)|(dat&0x80)>>7); P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */* LCD初始化設定 */* */*/ void lcd_init() delay1(15); lcd_wcmd(0x38); /16*2顯示,5*7點陣,8位數據 delay1(5); lcd_wcmd(0x38); delay1(5); lcd_wcmd(0x38); delay1(5); lcd_wcmd(0x0c); /顯示開,關光標 delay1(5); lcd_wcmd(0x06); /移動光標 delay1(5); lcd_wcmd(0x01); /清除LCD的顯示內容 delay1(5); /*/* */* 設定顯示位置 */* */*/ void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80); /數據指針=80+地址變量 /*/main() uchar m; IRIN=1; /I/O口初始化 BEEP=1; RELAY=1; delay1(10); /延時 lcd_init(); /初始化LCD lcd_pos(0); /設置顯示位置爲第一行的第1個字符 m = 0; while(cdis1m != '0') /顯示字符 lcd_wdat(cdis1m); m+; lcd_pos(0x40); /設置顯示位置爲第二行第1個字符 m = 0; while(cdis2m != '0') lcd_wdat(cdis2m); /顯示字符 m+; / IE = 0x81; /允許總中斷中斷,使能 INT0 外部中斷/ TCON = 0x01; /觸發方式爲脈衝負邊沿觸發IT1=1;EX1=1;EA=1; while(1) ; /end main/*/void IR_IN() interrupt 2 using 0 unsigned char j,k,N=0; EX1 = 0; delay(15);if (IRIN=1) EX1 =1; return; /確認IR信號出現 while (!IRIN) /等IR變爲高電平,跳過9ms的前導低電平信號。 delay(1); for (j=0;j<4;j+) /收集四組數據 for (k=0;k<8;k+) /每組數據有8位 while (IRIN) /等 IR 變爲低電平,跳過4.5ms的前導高電平信號。 delay(1); while (!IRIN) /等 IR 變爲高電平 delay(1); while (IRIN) /計算IR高電平時長 delay(1); N+; if (N>=30) EX1=1;return; /0.14ms計數過長自動離開。 /高電平計數完畢 IRCOMj=IRCOMj >> 1; /數據最高位補“0” if (N>=8) IRCOMj = IRCOMj | 0x80; /數據最高位補“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3) EX1=1; return; IRCOM5=IRCOM2 & 0x0F; /取鍵碼的低四位 IRCOM6=IRCOM2 >> 4; /右移4次,高四位變爲低四位 if(IRCOM5>9) IRCOM5=IRCOM5+0x37; else IRCOM5=IRCOM5+0x30; if(IRCOM6>9) IRCOM6=IRCOM6+0x37; else IRCOM6=IRCOM6+0x30; lcd_pos(0x4b); lcd_wdat(IRCOM6); /第一位數顯示 lcd_pos(0x4c); lcd_wdat(IRCOM5); /第二位數顯示 beep(); EX1 = 1; /*/void beep() unsigned char i; for (i=0;i<100;i+) delay(4); BEEP=!BEEP; /BEEP取反 BEEP=1; /關閉蜂鳴器/*/void delay(unsigned char x) /x*0.14MS unsigned char i; while(x-) for (i = 0; i<13; i+) /*/void delay1(int ms) unsigned char y; while(ms-) for(y = 0; y<250; y+) _nop_(); _nop_(); _nop_(); _nop_(); 将遥控器发过来的代码解释后用lcd1602显示:#include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit rs=P35;sbit rw=P25;sbit e=P34;sbit ir=P32;Init_t0();Init_ex0();Init_lcd();Wr_lcd_cmd(uchar cmd);Wr_lcd_dat(uchar dat);Delay(uint time);Ircode();Ir_work();code uchar Display="xiewanchen kaifa"code uchar hex="0123456789ABCDEF"uchar table1="Code "uchar irdata33;uchar rdata4;uchar irtime,irok,irdisp_ok;main() uchar i; Init_t0(); Init_ex0(); Init_lcd(); Wr_lcd_cmd(0x80); for(i=0;i<16;i+) Wr_lcd_dat(Displayi); Wr_lcd_cmd(0xc0); for(i=0;i<16;i+) Wr_lcd_dat(table1i); while(1) if(irok) irok=0; Ircode(); if(irdisp_ok) irdisp_ok=0; Ir_work(); P1=rdata3; Init_t0() TMOD|=0X02; TMOD&=0XFe; TL0=0X00; TH0=0X00; EA=1; ET0=1; TR0=1;Init_ex0() IT0=1; EA=1; EX0=1;Wr_lcd_cmd(uchar cmd) Delay(400); rs=0; rw=0; e=1; P0=cmd; _nop_(); _nop_(); e=0; Wr_lcd_dat(uchar dat) Delay(400); rs=1; rw=0; e=1; P0=dat; _nop_(); _nop_(); e=0;Delay(uint time) uint t; t=time/2; while(t-);Init_lcd() Wr_lcd_cmd(0x38); Delay(200); Wr_lcd_cmd(0x38); Delay(200); Wr_lcd_cmd(0x38); Delay(200); Wr_lcd_cmd(0x0c); Wr_lcd_cmd(0x06); Wr_lcd_cmd(0x02); Wr_lcd_cmd(0x01);Inter_t0() interrupt 2 irtime+;Inter_ex0() interrupt 0 static uchar i; static uchar irflag=0; if(irflag) if(irtime<63&&irtime>33) i=0; irdatai=irtime; irtime=0; i+; if(i=33) i=0; irflag=0; irok=1; else irflag=1; irtime=0; Ircode() uchar i,j,k=1,dat=0; for(i=0;i<4;i+) for(j=0;j<8;j+) if(irdatak>7) dat=dat|0x80; if(j<7) dat=dat>>1; k+; rdatai=dat; irdisp_ok=1; Ir_work() uchar i; table15=hexrdata0/16; table16=hexrdata0%16; table18=hexrdata1/16; table19=hexrdata1%16; table111=hexrdata2/16; table112=hexrdata2%16; table114=hexrdata3/16; table115=hexrdata3%16; Wr_lcd_cmd(0xc5); for(i=5;i<16;i+) Wr_lcd_dat(table1i); 步进电机控制程序:#include "reg51.h"void DELAY();main()while(1)P1=0x08;/ADELAY();P1=0x0C;/ABDELAY();P1=0x04;/BDELAY();P1=0x06;/BCDELAY();P1=0x02;/CDELAY();P1=0x03;/CD DELAY();P1=0x01;/DDELAY();P1=0x09;/DADELAY();void DELAY() int i,j;for(i=0;i<240;i+)for(j=0;j<200;j+);