图3 无线收发模块
3.3 按键及LED显示电路
八位按键接到微控制器的P1口,发光二极管通过限流电阻接到微控制器的P2口,采用共阳极的方式。在电路板焊接完成后,按键和LED用于检验和测试电路板设计时的合理性及电路连接是否存在问题。在USB鼠标程序调试过程中,LED用于指示调试的中间状态变量,按键用于指示鼠标的各种按键动作。按键及LED指示灯如图4所示。
图4 按键及LED指示灯
4. 软件设计
基于PDIUSBD12 的USB 接口程序设计是USB 开发的核心也是难点所在。USB 接口程序设计包括底层程序、鼠标主程序、USB 设备驱动程序和主机应用程序。四者互相配合,才能完成可靠、快速的数据传输。USB 设备驱动程序和主机应用程序已由生产厂家提供,这里所作的主要工作是底层程序和鼠标主程序的设计。各种初始化完成后,程序要模拟一个USB拔下的动作,因此需要将PDIUSBD12的内部上拉电阻断开,通过设置命令模式来完成这个功能。接口芯片完成一个操作后就会产生中断信号,在14引脚上输出中断请求。总线复位、成功接收数据、成功发送数据、总线挂起都能导致中断产生,在主程序中始终查询中断请求引脚的状态,从而决定下一步该如何处理。在程序中对所有的中断进行散转移,转到相应的处理,一步步的完成设备的枚举过程,当枚举过程结束并且成功后,主要工作就基本完成,接着只需要向主机返回报告描述符,当主机成功接收报告描述符后,光标就会根据报告描述符里面的内容发生相应的动作。程序包括众多头文件和子函数,为了方便书写和移植,将数据类型进行重新定义,放在mytype.h头文件中,由于要扫描按键,所以要写定时器0初始化子函数和定时器0中断处理函数,将定时器0中断处理函数中的变量和函数进行声明放在key.h中,时钟频率、波特率的信息放在config.h中,编写串口初始化子函数和串口中断处理函数,此外还要编写往串口发送一字节数据的子函数,发送一个字符串的子函数,将短整数按照十751进制发送的子函数,这些头文件和函数声明都是用于显示调试过程中的信息。在读PDIUSBD12的ID过程中需要编写写命令子函数,读一字节接口芯片数据子函数。为了对PDIUSBD12实现方便的操作,要定义一些与硬件相关的宏来代替直接对输入输出的操作,将这些宏定义放入PDIUSBD12.h中。在枚举的过程中需要编写读取端点缓冲区子函数,发送一字节数据子函数,清除接收端点缓冲区子函数,数据写入缓冲区的函数,设置地址请求子函数,应答包建立子函数,总线挂起中断处理函数,总线复位中断处理函数,端点0输出中断处理函数,端点0输入中断处理函数。根据USB定义设备描述符,应以配置描述符集合各个寄存器的值,构造USB报告描述符。具体分为底层程序和USB主程序的编写[6-8]。
4.1 底层程序
底层程序是为了USB鼠标程序的调试方便,底层程序包括按键驱动程序和对主芯片的读写操作函数。
4.1.1 按键驱动
八位按键分别定义为光标左移、右移、上移、下移、鼠标左键、鼠标右键、滚轮向下移动、滚轮向上移动。选用定时器中断方式来扫描八位按键并具且有去抖动功能。扫描按键的中间变量和状态需要用全局变量来保存,因此需要定义全局变量,同时为了方便书写,在按键驱动程序中要定义数据类型关键字的宏。按键驱动程序需要对键盘初始化,使用定时器0初始化函数,扫描周期设定为4毫秒,通过软件仿真来精确确定扫描时间。在写按键驱动主程序之前,需要写几个头文件:Key.h、Led.h、Uarh.h、PDIUSBD12.h。它们分别是定义变量和声明函数、定义按键的宏和按键值的宏的头文件,定义LED的宏的头文件,一些与硬件相关的宏,这样串口初始化的头文件,与硬件相关的宏代替直接对I/O操作,都使程序在调试过程中方便修改和移植。按键驱动流程图如图5所示。 通用串行总线及外设开发+电路图+流程图(4):http://www.751com.cn/tongxin/lunwen_1525.html