基于单片机的红外遥控小车系统设计.docx
- 文档编号:30758711
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:34
- 大小:443.92KB
基于单片机的红外遥控小车系统设计.docx
《基于单片机的红外遥控小车系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的红外遥控小车系统设计.docx(34页珍藏版)》请在冰豆网上搜索。
基于单片机的红外遥控小车系统设计
红外接收与控件电路原理图:
141
红外遥控器原理图:
红外遥控器实物图:
红外接收与控制实物图:
程序:
接收控制主程序:
#include
#include"hongwai.c"
#include"5110.c"
sbithy=P0^0;//LED指示灯
sbithz=P2^0;
sbitqy=P1^4;
sbitqz=P3^7;
sbitdjf1=P1^0;//电机1的方向控制
sbitdjd1=P1^1;//电机1的动力控制
sbitdjf2=P1^2;//电机2的方向控制
sbitdjd2=P1^3;//电机2的动力控制
unsignedcharflag,flag1,PW;
bitfan,fan1,tf=0;
unsignedcharfafg=0;
unsignedchartime_flag;
unsignedchardatatime[2];
//=====================================
//ms延时
//=====================================
voiddelayms(unsignedintms)
{
unsignedchari;
while(ms--)
for(i=0;i<120;i++);
}
//=====================================
//LED灯闪烁
//=====================================
voidLED(unsignedcharms)
{
unsignedchari;
for(i=0;i { delayms(200); qz=~qz; qy=~qy; hz=~hz; hy=~hy; } } //====================================== //控制 //===================================== voidkongzi(void) { switch(shu[2]) { case0x20: {//前进 fafg=1; qz=qy=0; hz=hy=1; TR1=ET1=1; djd1=djd2=1; djf1=djf2=0; fan=0; break; } case0x30: {//后退 fafg=2; qz=qy=1; hz=hy=0; TR1=ET1=1; djd1=djd2=1; djf1=djf2=1; fan=1; break; } case0x40: {//前左转弯 fafg=3; djf1=djf2=0; qz=0; qy=hz=hy=1; djd1=1; djd2=0; fan1=0; TR1=ET1=1; break; } case0x60: {//后左转弯 fafg=4; djf1=djf2=1; hz=0; hy=qz=qy=1; djd1=1; djd2=0; fan1=0; TR1=ET1=1; break; } case0x50: {//前右转弯 fafg=5; djf1=djf2=0; qy=0; qz=hy=hz=1; djd1=0; djd2=1; fan1=1; TR1=ET1=1; break; } case0x70: {//后退 fafg=6; djf1=djf2=1; hy=0; hz=qz=qy=1; djd1=0; djd2=1; fan1=1; TR1=ET1=1; break; } case0x80: { if(tf==1) { qy=qz=hy=hz=1; TR1=ET1=0; djd1=djd2=0; NOKIA5110_clear(); //清屏 W_LCD_chinese(20,0,21);//停 W_LCD_chinese(40,0,22);//止 W_LCD_zifu(15,3,time[1]/10);// W_LCD_zifu(23,3,time[1]%10);// W_LCD_zifu(33,3,11);//: W_LCD_zifu(42,3,time[0]/10);// W_LCD_zifu(50,3,time[0]%10);// time[0]=time[1]=0; tf=0; } break; } } } //*********************************************** //显示 //************************************************ voidLCD_display(void) { NOKIA5110_clear(); //清屏 W_LCD_zifu(15,3,time[1]/10);// W_LCD_zifu(23,3,time[1]%10);// W_LCD_zifu(33,3,11);//: W_LCD_zifu(42,3,time[0]/10);// W_LCD_zifu(50,3,time[0]%10);// if(fafg==1) { W_LCD_chinese(20,0,0);//前 W_LCD_chinese(40,0,1);//进 } if(fafg==2) { W_LCD_chinese(20,0,2);//后 W_LCD_chinese(40,0,3);//退 } if(fafg==3) { W_LCD_chinese(5,0,0);//前 W_LCD_chinese(25,0,4);//左 W_LCD_chinese(45,0,5);//转 W_LCD_chinese(65,0,6);//弯 } if(fafg==4) { W_LCD_chinese(5,0,2);//后 W_LCD_chinese(25,0,4);//左 W_LCD_chinese(45,0,5);//转 W_LCD_chinese(65,0,6);//弯 } if(fafg==5) { W_LCD_chinese(5,0,0);//前 W_LCD_chinese(25,0,7);//右 W_LCD_chinese(45,0,5);//转 W_LCD_chinese(65,0,6);//弯 } if(fafg==6) { W_LCD_chinese(5,0,2);//后 W_LCD_chinese(25,0,7);//右 W_LCD_chinese(45,0,5);//转 W_LCD_chinese(65,0,6);//弯 } } //===================================== //定时器T1 //===================================== voidwan_T1(void)interrupt3 { time_flag++; tf=1; TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(time_flag>15) { time[0]++; time_flag=0; if(time[0]>59) { time[0]=0; time[1]++; if(time[1]>59)time[1]=0; } } } //===================================== //主函数 //===================================== voidmain(void) { djd1=djd2=0; NOKIA5110_init(); NOKIA5110_clear(); //清屏 W_LCD_chinese(0,0,8);//正 delayms(100); W_LCD_chinese(15,0,9);//在 delayms(100); W_LCD_chinese(30,0,10);//初 delayms(100); W_LCD_chinese(45,0,11);//始 delayms(100); W_LCD_chinese(60,0,12);//化 delayms(100); W_LCD_chinese(10,3,13);//请 delayms(100); W_LCD_chinese(25,3,14);//稍 delayms(100); W_LCD_chinese(40,3,2);//后 delayms(100); W_LCD_zifu(60,3,10);//... PW=20; TH1=(65536-50000)/256; TL1=(65536-50000)%256; IP=0x09;//设置中断优先级 IPH=0x08; open_interrupt(); TR1=ET1=0; LED(10); qy=qz=hy=hz=1; NOKIA5110_clear(); //清屏 W_LCD_chinese(1,0,10);//初 delayms(100); W_LCD_chinese(16,0,11);//始 delayms(100); W_LCD_chinese(31,0,12);//化 delayms(100); W_LCD_chinese(46,0,15);//完 delayms(100); W_LCD_chinese(61,0,16);//成 delayms(100); W_LCD_chinese(0,3,17);//等 delayms(100); W_LCD_chinese(15,3,18);//待 delayms(100); W_LCD_chinese(30,3,19);//信 delayms(100); W_LCD_chinese(45,3,20);//号 delayms(100); W_LCD_zifu(65,3,10);//... while (1) { kongzi(); if(tf==1&&time_flag==7)LCD_display(); } } 红外解码: /*************************************************************************/ /**** 红外解码 /*** 晶振: 11.0592MHZ /*** 数据口: 外中断0 /*** 计数器: 定时器T0 /************************************************************************/ #include sbitDat=P3^2; //数据口 bittru; unsignedcharshu[4]; /****************开中断************************/ voidopen_interrupt(void) { TMOD=0x11; //定时器T0工作在方式1 IT0=1; //中断0在下降沿触发 TR0=1; EX0=1; //开外部中断0 EA=1; //开中断 } /**************接收数据**********************/ voidR_Dat(void)interrupt0 { unsignedchari,j; unsignedintdtime=0; unsignedchartemp; //P1=0xff; TH0=TL0=0; while(! Dat) { if(TH0*256+TL0>20000) return; } while(Dat) if(TH0*256+TL0>20000) return; dtime=TH0*256+TL0; TH0=TL0=0; if(8000 { for(i=0;i<4;i++) { temp=0; for(j=0;j<8;j++) { while(! Dat) { if(TH0*256+TL0>20000)return; } while(Dat) { if(TH0*256+TL0>20000)return; } dtime=TH0*256+TL0; TH0=TL0=0; if(1450 elseif(700 } shu[i]=temp; } if(shu[0]==~shu[1]&&shu[2]==~shu[3])tru=1;//查错 } } LCD5110驱动程序: #include #include"ziku.C" //-----------------管脚定义------------------------- sbit LCD_sce=P2^7; //片选,低最平有效 sbit LCD_rst=P2^6; //复位,0复位 sbit LCD_dc =P2^5; //1写数据,0写指令 sbit LCD_sdin=P2^4; //数据 sbit LCD_sclk=P2^3; //时钟 //********************************************************************** //NOKIA5110_w_byte : 使用SPI接口写数据到LCD //输入参数: data : 写入的数据; // command: 写数据/命令选择; //********************************************************************** voidNOKIA5110_w_byte(unsignedchardat,unsignedcharcommand) { unsignedchari; LCD_sce=0; //LCD使能 LCD_dc=command;// for(i=0;i<8;i++) //传输8位数据(1个字节) { if(dat&0x80)LCD_sdin=1; else LCD_sdin=0; dat=dat<<1; LCD_sclk=0; LCD_sclk=1; } LCD_sce=1; //LCD不使能 } //********************************************************************** //NOKIA5110_init: LCD初始化 //********************************************************************** voidNOKIA5110_init(void) { unsignedchark; LCD_rst=0; for(k=0;k<250;k++); LCD_rst=1; //------------------------------------------------------------- NOKIA5110_w_byte(0x21,0); //使用扩展命令设置LCD模式 NOKIA5110_w_byte(0xd0,0); //设置偏置电压 NOKIA5110_w_byte(0x06,0); //温度校正 NOKIA5110_w_byte(0x13,0); //1: 48 NOKIA5110_w_byte(0x20,0); //使用基本命令 NOKIA5110_w_byte(0x0c,0); //设定显示模式,正常显示 } //********************************************************************** //NOKIA5110_set_XY: 设置LCD坐标函数 //输入参数: X: 0-83 // Y: 0-5 //********************************************************************** voidNOKIA5110_set_XY(unsignedcharx,unsignedchary) { NOKIA5110_w_byte(0x40|y,0); //列(竖) NOKIA5110_w_byte(0x80|x,0); //行(横) } //********************************************************************* //写汉字到LCD //********************************************************************* voidW_LCD_chinese(unsignedcharX,unsignedcharY,unsignedchardat) { unsignedchari; NOKIA5110_set_XY(X,Y); for(i=0;i<16;i++)NOKIA5110_w_byte(hanzi[dat][i],1); NOKIA5110_set_XY(X,Y+1); for(i=16;i<32;i++)NOKIA5110_w_byte(hanzi[dat][i],1); } //*******************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 红外 遥控 小车 系统 设计