基于单片机的模拟鼠标设计毕业作品.docx
《基于单片机的模拟鼠标设计毕业作品.docx》由会员分享,可在线阅读,更多相关《基于单片机的模拟鼠标设计毕业作品.docx(24页珍藏版)》请在冰点文库上搜索。
基于单片机的模拟鼠标设计毕业作品
毕设
业计
(20届)
基于单片机的模拟鼠标设计
所在学院
专业班级电子信息工程
学生姓名学号
指导教师职称
完成日期年月
摘要
鼠标自1968年诞生以来,已经经历了将近四十多年的演变与发展。
从早期的机械滚轮鼠标到目前主流的光电鼠标再到中高端的激光鼠标。
每一次的变革无不给用户带来使用上的快感。
随之而来的是用户对鼠标的要求也越来越高。
于是一款无电线束缚的无线鼠标也就诞生了。
本文将介绍一种基于89C51单片机、2.4G无线模块以及一块具有触屏功能的2.8寸液晶组成的无线模拟鼠标设计。
该设计是通过触摸液晶屏效果从而实现鼠标功能的。
实验结果表明:
该方案设计的无线鼠标具有良好的灵敏度和可靠性,可完成无线鼠标的基本功能,且通信距离可达到5M-10M。
本文将就该课题方案的硬件设计和软件设计进行系统的描述。
关键词:
单片机;无线模块;液晶
Abstract
Mousewasbornin1968,Ithasgonethroughnearlyfortyyearsofevolutionanddevelopment.Fromtheearlymechanicalwheelmousetothecurrentmainstreamopticalmousethentohigh-endlasermouse.Eachchangegaveusersthepleasureofuse.Followedbyamouseusersdemandmoreandmore.Soawirelessmousewithoutwirestiedborn.Thisarticleintroducesthedesignofbasedon89C51microcontroller,2.4Gwirelessmoduleandtouchscreenfunctionalitywitha2.8inchLCDwirelessmouse.ThedesignisbytouchingtheLCDscreentoachievemousefunctions.Practicehasprovedthat:
Thedesignofthewirelessmousehasagoodsensitivityandreliability,andthebasicfunctionsofthewirelessmouse,thenthecommunicationdistanceupto5m-10m.Thisarticlewilltaketheprogramdodescriptionofhardwareandsoftwaredesign.
KeyWords:
microcontroller;wirelessmodule;LCD
1引言
USB作为普通鼠标的一般接口,在如今的个人计算机上已经是必不可少的组成部分。
总之,只要是与计算机通信的外部设备,似乎都可以用USB来连接,这就足见USB的强大。
而USB之所以使用得如此广泛,得益于它具有连接简单、速度快、可扩展性强、支持热插拔操作和标准统一等特点[1]。
USB协议还详细地规定了各种参数以及数据结构、格式,从而使得各厂商生产出来的设备都能够很好地相互兼容。
而USB协议本身是一个相当庞大且复杂的系统,具有众多的子协议,所以学习的过程需要特别的认真、仔细。
随着科学技术的深入,有线的鼠标已经不能满足客户的需求。
因此,设计一款操作简单、时尚且高效的无线鼠标变得具有实在意义。
就当前主流的无线鼠标而言有27MHz无线鼠标、2.4G无线鼠标[2]和无线蓝牙鼠标三类。
但它们都有各种的缺点和不足,如27MHz无线鼠标的传输效率低,功耗大,只支持单向传输等缺点,而无线蓝牙鼠标也因为它昂贵价格使其注定不能广泛的普及。
相比之下,2.4G无线鼠标无疑是一款理想的首选对象。
它不仅传输效率高,功耗低,稳定性好,而且价格也是相当的实惠。
综上所述比较,本次课题将采用基于USB协议的2.4G传输模式设计无线鼠标。
本系统设计性能特点有:
1.无线传输距离:
5m-10m;
2.实现无线鼠标的基本功能;
2总体设计
本方案设计的无线鼠标是以单片机为核心结合PDIUSBD12芯片的一款体积小、重量轻、且可触屏式的无线鼠标[3]。
其设计原理是通过单片机将触摸液晶屏后产生的数据进行采集,将采集到的有效数据再通过2.4G无线模块发送端发送出去,接着由2.4G无线模块接收端将接收到的数据送给单片机处理,最后由单片机将处理后的数据经PDIUSBD12芯片送给计算机,从而实现基于USB的无线模拟鼠标设计[4]。
系统总体框图如图2-1所示:
图2-1系统总体框图
2.1触屏式液晶
本方案采用的液晶是一块2.8寸的可触屏式液晶,它是由ADS7843作为触屏的控制芯片。
该触摸屏也是最为常见的四线电阻触摸屏[5],所谓四线电阻触摸屏就是由两个透明电阻膜构成,当在水平和垂直电阻网上施加电压时,可通过A/D转换面板在触摸点上测量出电压,从而算出对应的坐标值。
ADS7843有差分(DIFFERETIAL)和单端(SINGLE-ENDEDMODE)两种工作模式[6]。
如果将A/D转换器配置成读绝对电压(单端模式)方式,那么驱动电压在下降时就容易导致转换输入数据的错误。
进而该方案采用差分模式来实现可触屏式液晶的设计。
2.2无线传输模块
为了能使数据更快、更有效地将传输,2.4G无线模块无疑是理想的首选对象。
它具有无线双向传输模块且整合高频键控制收发电路的功能,其中包含有先进先出(FIFO)缓冲器,来减轻微控制器的负担,从而实现低成本MCU的高速数据传输。
另外该2.4G无线模块具有快速调频、向前纠错、循环冗余校验(CRC)等功能。
这将大大提高数据传输的正确率,同时也降低了MCU的运算。
2.3接口协议
为了能使单片机能与计算机很好且方便的通信,本文决定采用可支持即插即用的USB接口。
目前USB协议出现过的版本有USB1.0、USB1.1、USB2.0等[7]。
通过对USB协议的难易程度和价格成本考虑,本方案决定采用USB1.1版本,它支持12Mb/s的全速模式,完全可胜任一般无线鼠标的基本要求。
3硬件设计
本系统硬件主要有五大部分组成:
单片机发射系统、单片机接收系统、可触屏式液晶模块、无线传输模块、接口协议模块[8]。
3.1单片机发射系统
本系统在发射端都采用89C52系列的单片机芯片,该芯片是采用INTEL公司可靠的CHMOS工艺技术制造的的高性能8位单片机,它结合了HMOS的高速和高密度技术CHMOS的低功耗特征,89C52单片机还内置了8位中央处理单元、256字节内部数据存储器RAM、8K片内程序存储器(ROM)、32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
整个发射单片机系统中都含有时钟电路、复位电路以及2.4G模块所需的3.3V稳压电路组成[9],如图3-1所示。
图3-1单片机发射系统
3.2单片机接收系统
在单片机接收端基本采用与发射端相同的电路模块和芯片,也包含有时钟电路、复位电路和2.4G模块所需的3.3V稳压电路,与发射系统有所不同的是连接位置有所改变,具体引脚如图3-2所示。
图3-2单片机接收系统
3.3可触屏式液晶模块
3.3.1ADS7843芯片简介
ADS7843是一个内置12位模数转换、低导通电阻模拟开关的串行接口芯片[10]。
供电电压为2.7~5V,参考电压VREF为1V~+VCC,转换电压的输入范围为0~VREF,最高转换速率为125kHz,功能引脚如表3-1所示。
表3-1ADS7843功能引脚
该芯片之所以能实现对触摸屏的控制,是因为其内部结构很容易实现电极电压的切换,并能快速A/D转换。
如图3-3所示为其内部结构,A2~A0和SER/为控制寄存器中的控制位,用来进行开关切换和参考电压的选择.。
图3-3ADS7843内部结构
3.3.2ADS7843液晶与单片机接口电路
本方案在无线鼠标发射模块中采用的2.8寸可触屏式液晶的数据传输模式具有8位和16位两种。
因考虑到单片机端口资源不足的原因,最终决定采用8位数据传输模式,液晶引脚连接如图3-4所示。
图中PL0~PL7端口为液晶显示的据
据端口,而以L开头的端口名称皆为液晶显示的控制引脚,其余端口都为触屏控制引脚。
图3-4ADS7843与单片机接口
3.3无线传输模块
2.4G无线模块工作在全球免申请ISM频道的2400-2483M范围内,具有开机自动扫频功能,且拥有多个工作频道,可根据不同要求在同一场合同时工作,无需人工协调、配置信道。
在接收单元和遥控器单元具有自动对码功能,以避免地址的重复。
并且该模块具有成本低、体积小、工作稳定、产品性能好等特点,最高速率可达2M,可以广泛应用在日常生活和活动中需要无线连接的场合。
具体引脚连接和功能说明分别参考图3-5与表3-2。
图3-52.4G模块引脚
表3-22.4G模块引脚功能说明
该模块与单片机收发系统的具体连接可参考图3-2和图3-1。
3.4接口协议模块
3.4.1PDIUSBD12简介
PDIUSBD12是一款性价比很高的USB器件,完全符合通用串口总线(USB)1.1版规范[11]。
高性能USB接口器件,集成了SIE、FIFO存储器、收发器及电压调整器,且适用大多数器件的分类规格,可通过软件控制与USB连接,具有可编程时钟频率输出,内置上电复位和低电压复位电路。
另外PDIUSBD12还支持本地的DMA传输。
PDIUSBD12管脚描述如表3-3所示。
表3-3PDIUSBD12管脚描述
3.4.2USB接口连接电路
PDIUSBD12是一款内置于无线鼠标接收端的驱动控制芯片。
它具有8位数据传输口,可与微控制器/微处理器进行高速的数据传输(2M字节/秒)[12],另外值得注意的是PDIUSBD12的8位数据口与89C52的P0口相连时应加上拉电阻(S2为10K的上拉电阻),因为P0口作为普通的数据口是不能输出高电平的,其中J4是USB的接口部分,D+和D-为USB的差分数据线。
具体引脚连接电路如图3-6所示。
图3-6PDIUSBD12引脚连接图
4软件设计
本系统软件部分采用的是C语言编程,图4-1与图4-2分别为该设计方案的发射程序流程图和接收主流程图。
主要完成的是触屏液晶数据的采集[13],2.4G无线模块的收发以及单片机调用USB协议功能。
4.1主程序部分
主程序主要是完成系统各个部分的初始化和2.4G无线模块的参数设置等功能。
其中初始化包括I/O口、液晶屏、晶振以及usb协议的初始化[14]。
图4-1发射主流程图图4-2接收主流程图
4.2液晶数据采集部分
液晶数据的采集是通过单片机控制ADS7843产生的,其软件部分主要包括
ADS7843初始化设置和数据的采集。
4.2.1ADS7843初始化设置
ADS7843是触屏液晶的是控制芯片,对其设置至关重要,ADS7843采用的是12位数据传输模式。
参考子函数如下:
/************初始化SPI(串行外围设备接口)******************/
voidSPI_Init()
{
DCLK=0;
CS=1;
DIN=1;
DCLK=1;
CS=0;
}
/****************SPI写数据代码********************/
voidWR_AD7843(unsignedcharDat){
unsignedchari;
DCLK=0;
for(i=0;i<8;i++)
{
Dat<<=1;//Dat向左移一位
DIN=CY;
DCLK=0;_nop_();_nop_();_nop_();//上升沿写数据
DCLK=1;_nop_();_nop_();_nop_();
}
}
4.2.2数据采集
ADS7843虽然采用的是差分工作模式,但对采集到的数据的精度和可靠性并不是很高,所以在设计方案时采用了多次采集取平均值的方法,以减小有效数据的误差。
平均法采集数据参考代码如下:
/***************对采集到的点取平均值********************/
unsignedintAverage(unsignedint*p)
{
unsignedintMax,Min,Sum=0,Average=0;
unsignedchari;
Max=p[0];
Min=p[0];
for(i=0;i<6;i++)
{
if(Max
Max=p[i];
if(Min>p[i])
Min=p[i];
Sum=Sum+p[i];
}
Average=(Sum-Max-Min)/4;
returnAverage;
}
/*************通过外部扫描,来进行多次采集数据***********/
voidRead_AD7843()
{
unsignedintTouch_X[6],Touch_Y[6];
unsignedchari;
for(i=0;i<6;i++)
{
CS=0;
WR_AD7843(0x90);//送控制字10010000即用差分方式读X坐标详细请见有关资料
DCLK=1;_nop_();_nop_();_nop_();_nop_();
DCLK=0;_nop_();_nop_();_nop_();_nop_();//下降沿读取
Touch_X[i]=RD_AD7843();
WR_AD7843(0xD0);//送控制字10010000即用差分方式读X坐标详细请见有关资料
DCLK=1;_nop_();_nop_();_nop_();_nop_();
DCLK=0;_nop_();_nop_();_nop_();_nop_();//下降沿读取
Touch_Y[i]=RD_AD7843();
CS=1;
}
Ave_X=Average(Touch_X);
Ave_Y=Average(Touch_Y);
}
4.32.4G无线模块初始化设置
2.4G无线模块是收发一体化的模块,因而只需对该模块的初始化代码进行设置就可完成无线间的收发功能。
无线发送模块初始化程序代码如下:
voidNRFSetTxMode(unchar*TxDate)
{//发送模式
CE=0;
NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);//写寄存器指令+接收地址使能指令+接收地址+地址宽度
NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);//为了应答接收设备,接收通道0地址和发送地址相同
NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);//写入数据
/******下面有关寄存器配置**************/
NRFWriteReg(W_REGISTER+EN_AA,0x01);//使能接收通道0自动应答
NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);//使能接收通道0
NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a);//自动重发延时等待250us+86us,自动重发10次
NRFWriteReg(W_REGISTER+RF_CH,0x40);//选择射频通道0x40
NRFWriteReg(W_REGISTER+RF_SETUP,0x07);//数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
NRFWriteReg(W_REGISTER+CONFIG,0x0e);//CRC使能,16位CRC校验,上电
CE=1;
Delay(5);//保持10us秒以上
}
通过将“NRFWriteReg(W_REGISTER+CONFIG,0x0e);”这条语句设置成“NRFWriteReg(W_REGISTER+CONFIG,0x0f);”即可完成无线的接收功能。
4.4USB协议类设置
USB协议的结构是一个相对比较庞大且复杂的系统,这其中包括有USB中断处理函数、USB标准请求、USB描述符等模块[15]。
本文就对以上几个主要的部分做个大概的介绍。
4.4.1USB中断处理函数
当PDIUSBD12芯片完成一个操作后,就会产生中断请求信号,以通知CPU来进行相关处理。
导致中断的事件有USB总线复位、D12进入挂起状态、成功接收到数据等。
这里的主程序中是一直查询中断引脚电平的状态是否有中断发生,从而进行进一步的处理。
以下就是中断处理的函数:
voidUsb_Disconnect(void);//USB断开连接
voidUsb_Connect(void);//USB连接
voidUsb_Bus_Suspend(void);//总线挂起中断处理
voidUsb_Bus_Reset(void);//总线复位中断处理
voidUsb_Ep0_Out(void);//端点0输出中断处理
voidUsb_Ep0_In(void);//端点0输入中断处理
voidUsb_Ep1_Out(void);//端点1输出中断处理
voidUsb_Ep1_In(void);//端点1输入中断处理
voidUsb_Ep2_Out(void);//端点2输出中断处理
voidUsb_Ep2_In(void);//端点2输入中断处理
4.4.2USB标准请求
USB协议定义了一个8个字节的标准设备请求,主要用在设备的枚举过程中。
这8字节的数据是在控制传输的建立过程通过默认控制端点0发出的,在这8个字节的数据中,包含了数据的过程所需要的传输数据的传输方向、长度以及数据的类型等信息。
USB协议规定,端点0的最大包长度至少8个字节,也就是说,凡是USB设备都必须接收8个字节的标准请求。
标准请求代码如下:
#defineGET_STATUS0
#defineCLEAR_FEATURE1
#defineSET_FEATURE3
#defineSET_ADDRESS5
#defineGET_DESCRIPTOR6
#defineSET_DESCRIPTOR7
#defineGET_CONFIGURATION8
#defineSET_CONFIGURATION9
#defineGET_INTERFACE10
#defineSET_INTERFACE11
#defineSYNCH_FRAME12
4.4.3描述符
USB协议涉及有较多的描述符,它主要包括有:
设备描述符,配置描述符,接口描述符和端点描述符等。
这些描述符中就包含设备的类型,制造商信息,语言的ID和产品的序列号等一系列的信息。
以下就是USB协议的描述符函数:
unsignedcharDevice_Descriptor[0x12];//设备描述符为18字节
unsignedcharReport_Descriptor[52];//USB报告描述符的定义
unsignedcharConfig_Descriptor[9+9+9+7];//USB配置描述符集合的定义
unsignedcharLanguage_ID[4];//语言ID的定义
unsignedcharManufacturer_String_Descriptor[40];//厂商字符串描述符
unsignedcharProduct_String_Descriptor[22];//产品序列号字符串描述符
unsignedcharSerial_Number_String_Descriptor[20];//字符串描述符
5系统调试
完成了硬件设计之后,接下来的就是对制作好之后的硬件进行测试和调试,然而调试是个相当费精力的过程,所以本文决定采用先将各个模块调通之后,再进行最后的整体调试,以减小调试的难度。
5.1触摸屏坐标数据采集
首先要检查硬件连接是否正确,只有确保了硬件的连接无误才是保证系统调通的关键。
再是检查液晶VDD端的电压是否在2.7-3.3V之间,因为过高或过低的电压都容易使液晶不正常的显示。
接下来在判断触摸屏采集的数据是否正确时,可先通过串口调试工具将触摸前后的位置信息传输至计算机显示并记录下来,再来查看实际鼠标先后移动的距离是否成比例,以此来修改采集的触屏坐标代码程序。
具体查看图5-1和图5-2,
(图中F点液晶屏触摸前的鼠标位置,而当触摸A点到B点的距离时,鼠标由F点移动到了D点位置)
图5-1液晶屏触摸前鼠标位置
图5-2液晶屏触摸后鼠标位置
5.2无线模块的调试
有关2.4G无线模块的程序写的好坏将会直接影响该无线收发模块间能否
调通以及传输速度。
所以在写该模块的程序前不妨先去了解参考下别人的程序,再结合自己的想法去写程序,这样调试起来将会事半功倍。
当然在调试过程中也可选择串口调试工具进行调试,将收发端的数据都通过串口传输至电脑进行查看比较。
在调试过程中应注意发送端发送的数据应选择一连串不同的数据,因为只有这样才能有效地看出无线间传输的准确性和实时性。
5.3USB协议
USB协议类模块的调试是所有模块中调试最为费时的部分,因为它涉及太多的模块函数,稍有出错整个系统就不能呈现结果。
所以这需要制作者由足够的耐心和细心去写代码。
对于调试技巧方面,主张将各个模块函数逐个通过串口调试工具传输至计算机进行调试,最后将各调通的模块进行组合调试,以确保降低调试的难度。
在碰到比较重要的语句时,应在该语句后面标注解释,以方便下次查看时能迅速了解。
待计算机读取一系列的描述符之后,该计算机就能识别无线鼠标设备了。
具体参考图5-3和图5-4线鼠标插入前后对比。
图5-3鼠标插入前图5-4鼠标插入后
6结论
本文着重介绍了无线模拟鼠标的可触屏式液晶的数据采集部分和USB协议类技术。
虽然在方案的设计与作品的制作的过程的遇到了不少的难题和挫败,但是在困难与挫折中也积累了新的知识与经验,懂得了如何去面对出现在自己面前一道又一道的难题。
在每当通过自己的努力成功解决掉摆在自己面前的难题时,心中总是有说不出的自豪和喜悦。
本方案设计的无线鼠标实践结果表明,虽然该触屏式无线模拟鼠标可完成鼠标的基本功能,如鼠标的前后左右自由移动,鼠标左键和鼠标右键功能,但效果并