红外发射程序键值在LCD1602上显示实例程序.docx
- 文档编号:10501357
- 上传时间:2023-02-14
- 格式:DOCX
- 页数:19
- 大小:17.24KB
红外发射程序键值在LCD1602上显示实例程序.docx
《红外发射程序键值在LCD1602上显示实例程序.docx》由会员分享,可在线阅读,更多相关《红外发射程序键值在LCD1602上显示实例程序.docx(19页珍藏版)》请在冰豆网上搜索。
红外发射程序键值在LCD1602上显示实例程序
LCD1602显示键值程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
voiddelay(ucharx);//x*0.14MS
voiddelay1(intms);
voidbeep();
sbitIRIN=P3^3;//紅外接收器數據線
sbitBEEP=P1^5;//蜂鳴器驅動線
sbitRELAY=P1^4;//繼電器驅動線
ucharIRCOM[7];
sbitLCD_RS=P2^3;
sbitLCD_RW=P2^4;
sbitLCD_EN=P2^5;
ucharcodecdis1[]={"RedControl"};
ucharcodecdis2[]={"IR-CODE:
--H"};
/*******************************************************************/
/**/
/*檢查LCD忙狀態*/
/*lcd_busy爲1時,忙,等待。
lcd-busy爲0時,閑,可寫指令與數據。
*/
/**/
/*******************************************************************/
bitlcd_busy()
{
bitresult;
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=指令碼。
*/
/**/
/*******************************************************************/
voidlcd_wcmd(ucharcmd)
{
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=數據。
*/
/**/
/*******************************************************************/
voidlcd_wdat(uchardat)
{
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初始化設定*/
/**/
/*******************************************************************/
voidlcd_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);
}
/*******************************************************************/
/**/
/*設定顯示位置*/
/**/
/*******************************************************************/
voidlcd_pos(ucharpos)
{
lcd_wcmd(pos|0x80);//數據指針=80+地址變量
}
/*******************************************************************/
main()
{
ucharm;
IRIN=1;//I/O口初始化
BEEP=1;
RELAY=1;
delay1(10);//延時
lcd_init();//初始化LCD
lcd_pos(0);//設置顯示位置爲第一行的第1個字符
m=0;
while(cdis1[m]!
='\0')
{//顯示字符
lcd_wdat(cdis1[m]);
m++;
}
lcd_pos(0x40);//設置顯示位置爲第二行第1個字符
m=0;
while(cdis2[m]!
='\0')
{
lcd_wdat(cdis2[m]);//顯示字符
m++;
}
//IE=0x81;//允許總中斷中斷,使能INT0外部中斷
//TCON=0x01;//觸發方式爲脈衝負邊沿觸發
IT1=1;
EX1=1;
EA=1;
while
(1);
}//endmain
/**********************************************************/
voidIR_IN()interrupt2using0
{
unsignedcharj,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計數過長自動離開。
}//高電平計數完畢
IRCOM[j]=IRCOM[j]>>1;//數據最高位補“0”
if(N>=8){IRCOM[j]=IRCOM[j]|0x80;}//數據最高位補“1”
N=0;
}//endfork
}//endforj
if(IRCOM[2]!
=~IRCOM[3])
{EX1=1;
return;}
IRCOM[5]=IRCOM[2]&0x0F;//取鍵碼的低四位
IRCOM[6]=IRCOM[2]>>4;//右移4次,高四位變爲低四位
if(IRCOM[5]>9)
{IRCOM[5]=IRCOM[5]+0x37;}
else
IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9)
{IRCOM[6]=IRCOM[6]+0x37;}
else
IRCOM[6]=IRCOM[6]+0x30;
lcd_pos(0x4b);
lcd_wdat(IRCOM[6]);//第一位數顯示
lcd_pos(0x4c);
lcd_wdat(IRCOM[5]);//第二位數顯示
beep();
EX1=1;
}
/**********************************************************/
voidbeep()
{
unsignedchari;
for(i=0;i<100;i++)
{
delay(4);
BEEP=!
BEEP;//BEEP取反
}
BEEP=1;//關閉蜂鳴器
}
/**********************************************************/
voiddelay(unsignedcharx)//x*0.14MS
{
unsignedchari;
while(x--)
{
for(i=0;i<13;i++){}
}
}
/**********************************************************/
voiddelay1(intms)
{
unsignedchary;
while(ms--)
{
for(y=0;y<250;y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
将遥控器发过来的代码解释后用lcd1602显示:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P3^5;
sbitrw=P2^5;
sbite=P3^4;
sbitir=P3^2;
Init_t0();
Init_ex0();
Init_lcd();
Wr_lcd_cmd(ucharcmd);
Wr_lcd_dat(uchardat);
Delay(uinttime);
Ircode();
Ir_work();
codeucharDisplay[]="xiewanchenkaifa";
codeucharhex[]="0123456789ABCDEF";
uchartable1[]="Code";
ucharirdata[33];
ucharrdata[4];
ucharirtime,irok,irdisp_ok;
main()
{
uchari;
Init_t0();
Init_ex0();
Init_lcd();
Wr_lcd_cmd(0x80);
for(i=0;i<16;i++)
Wr_lcd_dat(Display[i]);
Wr_lcd_cmd(0xc0);
for(i=0;i<16;i++)
Wr_lcd_dat(table1[i]);
while
(1)
{
if(irok)
{
irok=0;
Ircode();
}
if(irdisp_ok)
{
irdisp_ok=0;
Ir_work();
}
P1=rdata[3];
}
}
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(ucharcmd)
{
Delay(400);
rs=0;
rw=0;
e=1;
P0=cmd;
_nop_();
_nop_();
e=0;
}
Wr_lcd_dat(uchardat)
{
Delay(400);
rs=1;
rw=0;
e=1;
P0=dat;
_nop_();
_nop_();
e=0;
}
Delay(uinttime)
{
uintt;
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()interrupt2
{
irtime++;
}
Inter_ex0()interrupt0
{
staticuchari;
staticucharirflag=0;
if(irflag)
{
if(irtime<63&&irtime>33)
i=0;
irdata[i]=irtime;
irtime=0;
i++;
if(i==33)
{
i=0;
irflag=0;
irok=1;
}
}
else
{
irflag=1;
irtime=0;
}
}
Ircode()
{
uchari,j,k=1,dat=0;
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
if(irdata[k]>7)
dat=dat|0x80;
if(j<7)
dat=dat>>1;
k++;
}
rdata[i]=dat;
}
irdisp_ok=1;
}
Ir_work()
{
uchari;
table1[5]=hex[rdata[0]/16];
table1[6]=hex[rdata[0]%16];
table1[8]=hex[rdata[1]/16];
table1[9]=hex[rdata[1]%16];
table1[11]=hex[rdata[2]/16];
table1[12]=hex[rdata[2]%16];
table1[14]=hex[rdata[3]/16];
table1[15]=hex[rdata[3]%16];
Wr_lcd_cmd(0xc5);
for(i=5;i<16;i++)
Wr_lcd_dat(table1[i]);
}
步进电机控制程序:
#include"reg51.h"
voidDELAY();
main()
{
while
(1)
{
P1=0x08;//A
DELAY();
P1=0x0C;//AB
DELAY();
P1=0x04;//B
DELAY();
P1=0x06;//BC
DELAY();
P1=0x02;//C
DELAY();
P1=0x03;//CD
DELAY();
P1=0x01;//D
DELAY();
P1=0x09;//DA
DELAY();
}
}
voidDELAY()
{
inti,j;
for(i=0;i<240;i++)
for(j=0;j<200;j++);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外 发射 程序 键值 LCD1602 显示 实例
![提示](https://static.bdocx.com/images/bang_tan.gif)