1、红外遥控车计算机与信息学院单片机综合实验审批材料电子信息工程16-1班第一组 红外遥控车一成员介绍本组共有15名成员,其中组长一名,副组长一名组长: 刘之恒副组长:刘晓畅成员: 刘志华常兴宏高阿麒徐建栗马睿诸辰洋张华庆陆潮彬林晨瑶詹妮周杰郑婧彭可军二成员分工1.实验模块 本实验分为七个模块,分别为键盘与蜂鸣器,数码管,红外初始化,红外解码, 74HCT595N芯片,PWM调速,车的组装。2.模块分工键盘与蜂鸣器:刘志华 周杰 诸辰洋 彭可军 数码管: 张华庆 林晨瑶 红外初始化: 郑婧 常兴宏 高阿麒 红外解码: 刘之恒 陆潮彬 詹妮 74HCT595N : 刘晓畅 PWM调速: 刘晓畅 车的
2、组装: 刘晓畅三实验原理1 bas.c程序1.1头文件与宏定义#include#include #define uchar unsigned char #define NOP() _nop_()sbit b=P23; /定义蜂鸣器sbit s2=P34; /定义按键s2sbit s3=P35; /定义按键s2sbit dula=P26; /数码管段选,锁存器控制信号sbit wela=P27; /数码管位选,锁存器控制信号sbit IR=P32; /红外接口标志unsigned char irtime;/红外用全局变量bit irpro_ok,irok;unsigned char IRcord
3、4;unsigned char irdata33;1.2延时程序1.2.1程序代码/*延时1ms*/void delay(unsigned int i) unsigned int j; unsigned char k; for(j=i;j0;j-) for(k=125;k0;k-);1.3按键程序1.3.1程序代码/*按键*/unsigned char rec_ud() if(s2=1&s3=1) return 0; else if(0=s2) delay(5) ; /防抖 if(s2=0) return 1; else if(0=s3) delay(5); /防抖 if(s3=0) retu
4、rn 2;1.3.2原理独立按键内部电路如图所示。 矩阵键盘内部电路图 当按键没按下时,CPU对应的I/O接口由于内部有上拉电阻,其输入为高电平;当某键被按下后,对应的I/O接口变为低电平。只要在程序中判断I/O接口的状态,即可知道哪个键处于闭合状态。1.4蜂鸣器程序1.4.1程序代码/*蜂鸣器*/void beep() b=0; delay(500); b=1; delay(1000);1.4.2原理蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型。无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声音信号输出,无源他激型蜂鸣器的工作发声原理图如下:有
5、源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号,有源自激型蜂鸣器的工作发声原理图如下:1.5数码管程序1.5.1程序代码/*数码管*/ void springt(unsigned char num) unsigned char dunum= 0xc0,0xf9,0xa4, 0xb0,0x99,0x92, 0x82,0xf8,0x80, 0x90,0x00; unsigned char wenum= 0x01,0x02,0x04, 0x08,0x10,0x20; unsigned char temp = 0,i = 5,level; unsig
6、ned char count = 1; level = num / 43; while(num 0 | count = 3) temp = num%10; dula = 0; P0 = dunumtemp;/段选 dula = 1; dula = 0; wela = 0; P0 = wenumi;/位选 wela = 1; wela = 0; delay(6); /此处延时,约6ms num /= 10; i-; count+; /此处是挡位 dula = 0; P0 = dunumlevel;/段选 dula = 1; dula = 0; wela = 0; P0 = wenum0;/位选
7、wela = 1; wela = 0; delay(1); /此处延时,约1ms1.5.2原理dula和wela的D0-D7分别对应单片机I/O口的P0.0到P0.7,8个单片机IO口组成一个字节,在程序编写过程中,可以直接用P0来进行操作。dula和wela的分别对应单片机I/O口的P2.6和P2.7,实现对数码管的位选和段选.加入延时函数,达到数码管循环显示目的。1.6红外程序1.6.1程序代码/*- 定时器0中断处理-*/ void tim0_isr (void) interrupt 1 using 1 irtime+; /用于计数2个下降沿之间的时间/*- 外部中断0中断处理-*/ v
8、oid EX0_ISR (void) interrupt 0 /外部中断0服务函数 static unsigned char i; /接收红外信号处理 static bit startflag; /是否开始处理标志位if(startflag) if(irtime=33)/引导码 TC9012的头码,9ms+4.5ms i=0; irdatai=irtime;/存储每个电平的持续时间,用于以后判断是0还是1 irtime=0; i+; if(i=33) irok=1; i=0; else irtime=0; startflag=1; /*- 红外接收函数-*/unsigned char rec_
9、ir() unsigned char i, j, k; unsigned char cord,value; unsigned char num; k=1; for(i=0;i4;i+) /处理4个字节 for(j=1;j7)/大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差 value|=0x80; if(j=1; k+; IRcordi=value; value=0; irpro_ok=1;/处理完毕标志位置1 irok=0; switch(IRcord2)/判断第三个数码值 case 0x18:num=2;break;/2 case 0x08:num=4;brea
10、k;/4 case 0x1c:num=5;break;/5 case 0x5a:num=6;break;/6 case 0x52:num=8;break;/8 default:break; irpro_ok=0;/处理完成标志 return num; /*- 红外初始化-*/void init_ir(void) TMOD|=0x02;/定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x00; /重载值 TL0=0x00; /初始化值 ET0=1; /开中断 TR0=1; IT0 = 1; /指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; /使能外部中断 EA =
11、 1; /开总中断 1.6.2原理对接收到的红外信号进行解码,由于不同按键的区别在于数据码不同,所以只需解码第三个字节。对数组irdata存储的第三个字节进行判断,一共八位,进行8次判断,利用时钟中断的叠加标志来判断是0还是1。同时,因为采用的nec通信协议是低位在前高位在后,所以要对每次解码的1或0进行移位,最后转成数字输出。1.7 HC595程序1.7.1程序代码void HC595SendData(unsigned char SendVal) unsigned char i; for(i=0;i8;i+) if(SendVali)&0x80)MOSIO=1; else MOSIO=0;
12、S_CLK=0; NOP(); NOP(); S_CLK=1; R_CLK=0; NOP(); NOP(); R_CLK=1;1.7.2原理Q0-Q7: 八位并行输出端Q7: 级联输出端DS: 串行数据输入端/MR(10脚): 低电平时将移位寄存器的数据清零。SH_CP(11脚):上升沿时数据寄存器的数据移位。下降沿移位寄存器数据不变。ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。/OE(13脚): 高电平时禁止输出(高阻态)使用时,1.将要准备输入的位数据移入74HC595数据输入端上,送位数据到_595。2.将位数据逐位移入74HC595,即
13、数据串入。SH_CP产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送低位,后送高位。3.并行输出数据。即数据并出。ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据送入到输出锁存器。1.7.3功能将串行数据转换为并行数据输出,用于控制电机,以及实现4个电机的同步pwm调速。2 main.c文件2.1头文件与宏定义#include#include #includebas.c#define uchar unsigned char#define uint unsigned int uchar pwm=255;uchar timer1_count=255;sbit M1 = P
14、10;sbit M2 = P11;sbit M3 = P12;sbit S1 = P13;sbit S2 = P15;sbit pwm_out=P17; /PWM输出端口2.2PWM程序2.2.1程序代码/*T0定时器初始化*/void init_timer0() TMOD |= 0x20; /T1方式2计时 TH1=0xb0; TL1=0xb0; EA=1; /总中断开 ET1=1; /定时器0开 TR1=1; /启动定时器 /*T0定时中断子函数* */void timer1() interrupt 3 using 0 if(pwm=timer1_count )/占空比计数器等于定时中断计
15、数器否 pwm_out=1; /开通输出 if(timer1_count=0) /定时中断计数器为0否 pwm_out=0; /关断输出 timer1_count=256; /重置初始值 timer1_count-;2.2.2原理PWM是一项通过数字方法来获得模拟量的技术。 数字控制来形成一个方波,方波信号只有开关两种状态(也就是引脚的高低)。通过控制开与关所持续时间的比值就能模拟到一个0到5V之间变化的电压。高电平所占用的时间就叫做脉冲宽度,所以PWM也叫做脉冲宽度调制。2.2.3功能通过pwm调整占空比达到调速目的2.3主函数2.3.1程序代码void main() /主函数 init_i
16、r(); init_timer0(); while(1) springt(pwm); switch(rec_ud() case 0:S1=0;S2=0;break; case 1: if(pwm!=0)pwm-;S2=1; else beep(); break; case 2: if(pwm!=255)pwm+;S1=1; else beep(); break; delay(10); switch(rec_ir() case 2: M1=0;M2=0;M3=0; break; case 4: M1=0;M2=1;M3=0; break; case 5: M3=1; break; case 6:
17、 M1=1;M2=0;M3=0; break; case 8: M1=1;M2=1;M3=0; break; 四实验电路1.L293D2.74HCT595N五实验问题及应对试验中发现调用74HCT595N操控电机时,电机反馈与指令不符且毫无规律,多次修正无果后,放弃调用74HCT595N函数,使用arduino对电机控制,通过若干IO口实现和51单片机之间的通信,达到实验目的。六小车操作说明1.向51单片机板提供3V至5V电压,向arduino板提供9V左右电压,向L293D电池盒中装入两节18650电池。2.通过固定键盘按键S2,S3可以调节占空比,以达到调速目的,数值在0-255之间,并显
18、示在数码管上,达到上限或下限会有蜂鸣器警报。LED8号灯的显示亮度可以提供参考。3.通过红外遥控发送指令,2为前进,4为左转,5为停止,6为右转,8为后退。LED1号2号3号灯可以提供参考,3号灯灭为停止,1号2号4种亮灭组合对应四种行进方式。七应用及前景红外遥控车功能可以进一步完善。如加装传感器模块后,可以实现自动避障功能,循迹功能,自动导航功能等。搭载摄像头以及小型计算机后,可以实现自动识别功能。小车也称轮式机器人,最适合在那些人类无法工作的环境中工作,该技术可以应用于无人驾驶机动车,无人生产线,仓库,服务机器人等领域。在危险环境下,机器人非常适合使用。在这些险恶的环境下工作,人类必需采取严密的保护措施。而机器人可以进入或穿过这些危险区域进行维护和探测工作,且不需要得到像对人一样的保护。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1