6显示模块的选择
方案一 采用LCD12864液晶显示
LCD12864液晶显示器具有汉字、英文显示的功能;控制简单、显示清晰、美观、耗能低、分辨率较好。
方案二 采用LED数码管显示
LED数码管显示器亮度高、清晰;但是不能显示汉字图形,而且控制较复杂。 6
由于本题要求显示实时坐标,我们考虑到显示信息的可读性和信息的清晰度,我们选择方案一。
三 单片机供电、电机供电供电模块
采用锂电池供电。利用LM2596稳压芯片控制电路,将锂电池电压降至凌阳61单片机可用的5V稳定电压。LM2596稳压模块可以提供5V稳定电压和持续电流,使单片机供电持续稳定(LM2596稳压模块电路见附录图三)。
四 系统软件流程
遥控器单片机程序框图 小车单片机程序框图
7
五 理论分析与计算
坐标定位的计算
行走示意图
小车车轮内侧贴有黑色胶带,将白色圆盘平均分为八份。利用光电对管检测黑线的个数,利用两个外部中断对其计数,并取其平均值。并通过单片机内部自能计算、处理,得到小车的实际坐标。
计算中要用到的量:小车两车轮间的距离为A;小车车轮的半径R;周长L;每两个黑线的路程M;车轮上贴的黑色线条数N;液晶上显示X坐标X;液晶上显示Y坐标Y;沿Y轴行走时测得的黑线条数Y0;沿X轴行走时测得的黑线条数X0;设定自动行走时的X坐标为X1;设定自动行走时的Y坐标为Y1,设定形式为(X1,Y1),液晶上显示的坐标形式为(X,Y),沿Y轴行走需要中断的次数Zy,沿X轴行走需要中断的次数Zx。
具体的计算如下:
(1)小车两后轮连线中点设定为小车中心点。
(2)L=2πR;M=L/N。当遥控器按下时,小车沿Y轴平行方向前进,Y=M×Y0,小车右转后Y=M×Y0+9,控制小车左转或右转后,小车沿X轴平行方向前行,Y轴坐标自动保持显示,X=M×X0+9。
(3)设定坐标自动行走时,单片机根据设定的(X1,Y1),首先沿Y平行方向前进,计算需要中断的次数Zy=Y1/M。转弯后小车沿X轴平行方向前进,计算需要中断的次数Zx=X1/M。最终显示到液晶上的数据X=M×Zx+A/2(需取整),最终显示到液晶上的数据Y=M×Zy+A/2(需取整)。
8
六 测试方案与测试结果
七 总结
通过参加TI杯电子设计大赛,我们懂得了团队协作的重要性,体会到了科技的发展;我们发挥了自己的优点,同时又发现了与别人的差距。我们在项目制作中遇到了各种困难,然后去克服困难。一路走下来我们学会了坚持,学会了努力奋斗,学会了成功不自是一个人的。
设计过程中我们遇到了很多困难,但从中也学会了喝很多东西。比如说小车两轮电机不同速度的问题,导致程序运行与小车实际行走不匹配。苦苦寻找了很久才找到问题。这件事我们体会到:即便是相同型号的东西也会存有差异。这也更加要求我们在以后的工作学习中全面透彻的考虑问题。
9
附录1:
系统主要电路图
图一 L298电机驱动原理图
图二 NRF2401无线通信模块
10
图三 LM2596单片机供电模块
图四 光电耦合模块
附录2:
部分源程序代码:
(1)小车遥控器部分主程序
#include<spce061a.h>
#include"nRF2401.h"
#include"key.h"
#include "SPLC501User.h"
#include"Word.h"
unsigned int Address[5] = {0x00,0x00,0x00,0x00,0x02}; char shuzi[]={'0','1','2','3','4','5','6','7','8','9'};
11
unsigned int i,j=0,jianzhi,high,highpy,low,sheding,num1,shu=0,RxBuf[25],Rhigh,Rlow;
int word[5];
int zhuangtai;
unsigned int num=20;
void display(void);
void send(void);
void diszhuangtai(int zt);
int main()
{
*P_IOA_Dir = 0x0f00; //设置IOA口高8口为矩阵按键接口
*P_IOA_Attrib = 0x0f00;
*P_IOA_Data = 0x0000;
LCD501_Init(0);
nRF2401_SetAddress(Address,5);
nRF2401_Initial();
nRF2401_Mode(0);
// *P_INT_Ctrl=C_IRQ4_1KHz;
// __asm("INT IRQ");
LCD501_Bitmap(0,0,(unsigned int *)encoding_00);//状
LCD501_Bitmap(16,0,(unsigned int *)encoding_01);//态
LCD501_Bitmap(0,16,(unsigned int *)encoding_02);//设
LCD501_Bitmap(16,16,(unsigned int *)encoding_03);//定
LCD501_Bitmap(0,32,(unsigned int *)encoding_04);//当
LCD501_Bitmap(16,32,(unsigned int *)encoding_05);//前
while(1)
{
*P_Watchdog_Clear = 0x1;
display();
num1=keyscan_high();
if(num1!=20)
{
nRF2401_Mode(1);
send();
nRF2401_Mode(0);
}
if((nRF2401_RxStatus()) == 1) // nRF2401A有数据请求,且无按键按下
12
{
nRF2401_ReceiveWord(RxBuf); // 接收数据1111001 11001101
shu=RxBuf[0];
Rhigh=shu&0xff00;
Rhigh>>=8;
Rlow=shu&0x007f;
}
Delay_Us(500);
}
}
(2)小车主程序:
#include <spce061a.h>
#include "nRF2401.h"
#include"key.h"
#include"dianji.h"
#include"supercheck.h"
#define uint unsigned int
unsigned int shu=0,data,Flag;
unsigned int RxBuf[25];
unsigned int zuolun,youlun,luchengL,luchengR,biaozhi=0,Ybaochi;
//zuozhuan,youzhuan 计算检测到得信号次数
//luchengL,luchengR 计算两轮的路程
//biaozhi 检
测按下向哪转,1左转,2右转
//Ybaochi 当
转向时,保持走过的距离,为了显示
int main()
{
init();
nRF2401_Initial(); // nRF2401A初始化 nRF2401_SetAddress(Address,5);
nRF2401_Mode(0); // 设置nRF2401A
工作方式:接收
while(1)
{
getkey();
switch(shu)
{
13
case 0x000a: //前进101 Flag=1;qianjin();break;
case 0x000b:
Flag=2;houtui();break;
case 0x000c:
Flag=3;zuozhuan();break;
case 0x000d:
Flag=4;youzhuan();break;
case 14:
Flag=5;tingzhi();break;
default:break;
}
data=shu;
data=data&0x0080;
标数据
if(data==0x0080) //走坐标
{
// __asm("int off");
zuobiao();
}
tingzhi();
*P_Watchdog_Clear = 0x0001;
}
}
//后退 011 //左转 110 //右转转 110 //停止 //检测是不是接收的坐 //调用函数。自动 //函数结束,停止 14
bbs.99jianzhu.com内容:建筑图纸、PDF/word 流程,表格,案例,最新,施工方案、工程书籍、建筑论文、合同表格、标准规范、CAD图纸等内容。