登录
|
注册会员
开启辅助访问
设为首页
收藏本站
扫一扫关注官方微信
论坛
BBS
M币充值
M currency prepaid phone
M币获取
附件中心
搜索
search
全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
MCU资讯论坛
»
论坛
›
单片机论坛
›
51单片机论坛
›
用51单片机做的USB鼠标程序,对与玩USB从机开发的朋友很 ...
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版
用51单片机做的USB鼠标程序,对与玩USB从机开发的朋友很有参考价值
[复制链接]
14306
17
ad***
管理员
发表于 2010-5-21 22:37:08
|
查看全部
|
阅读模式
本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要
登录
才可以下载或查看,没有帐号?
注册会员
x
用51
单片机
做的USB鼠标程序,对与玩USB从机开发的朋友很有参考价值
/******************************************************************
本程序只供学习使用,未经作者许可,不得用于其它任何用途
config.h file
来源:
MCU资讯论坛
作者:电脑圈圈
建立日期: 2008.06.27
修改日期: 2008.07.10
版本:V1.1
版权所有,盗版必究。
Copyright(C) 电脑圈圈 2008-2018
All rights reserved
*******************************************************************/
以下是部分源代码全部代码见附件
/******************************************************************
本程序只供学习使用,未经作者许可,不得用于其它任何用途
main.c file
来源:MCU资讯
论坛
作者:电脑圈圈
建立日期: 2008.06.27
修改日期: 2008.07.10
版本:V1.1
版权所有,盗版必究。
Copyright(C) 电脑圈圈 2008-2018
All rights reserved
*******************************************************************/
#include <AT89X52.H> //头文件
#include "Key.h"
#include "Led.h"
#include "UART.h"
#include "pdiusbd12.h"
#include "UsbCore.h"
#include "config.h"
code uint8 HeadTable[][74]={
"********************************************************************\r\n",
"****** 《圈圈教你玩USB》之 USB鼠标 ******\r\n",
"****** AT89S52 CPU ******\r\n",
"****** 建立日期:",__DATE__," ******\r\n",
"****** 建立时间:",__TIME__," ******\r\n",
"****** 作者:电脑圈圈 ******\r\n",
"****** 欢迎访问作者的 ******\r\n",
"****** MCU资讯论坛:http://www.mcuzx.net/ ******\r\n",
"****** MCU资讯论坛:http://www.mcuzx.net/ ******\r\n",
"****** MCU资讯论坛:http://www.mcuzx.net/ ******\r\n",
"****** 请按K1-K8分别进行测试 ******\r\n",
"****** K1:光标左移 K2:光标右移 K3:光标上移 K4:光标下移 ******\r\n",
"****** K5:滚轮下滚 K6:滚轮上滚 K7:鼠标左键 K8:鼠标右键 ******\r\n",
"********************************************************************\r\n",
};
/********************************************************************
函数功能:根据按键情况返回报告的函数。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void SendReport(void)
{
//需要返回的4字节报告的缓冲
//Buf[0]的D0就是左键,D1就是右键,D2就是中键(这里没有)
//Buf[1]为X轴,Buf[2]为Y轴,Buf[3]为滚轮
uint8 Buf[4]={0,0,0,0};
//我们不需要KEY1~KEY6按键改变的信息,所以先将它们清0
KeyUp &=~(KEY1|KEY2|KEY3|KEY4|KEY5|KEY6);
KeyDown &=~(KEY1|KEY2|KEY3|KEY4|KEY5|KEY6);
//如果有按键按住,并且不是KEY7、KEY8(左、右键)
//或者KEY7、KEY8任何一个键有变动的话,则需要返回报告
if((KeyPress&(~(KEY7|KEY8)))||KeyUp||KeyDown)
{
if(KeyPress & KEY1) //如果KEY1按住,则光标需要左移,即X轴为负值。
{
Buf[1]=-1; //这里一次往左移动一个单位。
}
if(KeyPress & KEY2) //如果KEY2按住,则光标需要右移,即X轴为正值。
{
Buf[1]=1; //这里一次往右移动一个单位。
}
if(KeyPress & KEY3) //如果KEY3按住,则光标需要上移,即Y轴为负值。
{
Buf[2]=-1; //这里一次往上移动一个单位。
}
if(KeyPress & KEY4) //如果KEY4按住,则光标需要下移,即Y轴为正值。
{
Buf[2]=1; //这里一次往下移动一个单位。
}
if(KeyPress & KEY5) //如果KEY5按住,则滚轮下滚,即滚轮值为负。
{
Buf[3]=-1; //这里一次往下滚动一个单位。
}
if(KeyPress & KEY6) //如果KEY6按住,则滚轮上滚,既滚轮值为正
{
Buf[3]=1; //这里一次往上滚动一个单位。
}
if(KeyPress & KEY7) //鼠标左键
{
Buf[0]|=0x01; //D0为鼠标左键
}
if(KeyPress & KEY8) //鼠标右键
{
Buf[0]|=0x02; //D1为鼠标右键
}
//报告准备好了,通过端点1返回,长度为4字节。
D12WriteEndpointBuffer(3,4,Buf);
Ep1InIsBusy=1; //设置端点忙标志。
}
//记得清除KeyUp和KeyDown
KeyUp=0;
KeyDown=0;
}
////////////////////////End of function//////////////////////////////
/********************************************************************
函数功能:主函数。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void main(void) //主函数
{
uint8 i;
uint16 id;
uint8 InterruptSource;
EA=1; //打开中断
InitKeyboard(); //初始化按键
InitUART(); //初始化串口
for(i=0;i<18;i++) //显示信息
{
Prints(HeadTable[i]);
}
id=D12ReadID();
Prints("Your D12 chip\'s ID is: ");
PrintShortIntHex(id);
if(id==0x1012)
{
Prints(". ID is correct! Congratulations!\r\n\r\n");
}
else
{
Prints(". ID is incorrect! What a pity!\r\n\r\n");
}
UsbDisconnect(); //先断开USB连接
UsbConnect(); //将USB连接上
ConfigValue=0; //配置值初始化为0
while(1) //死循环
{
if(D12GetIntPin()==0) //如果有中断发生
{
D12WriteCommand(READ_INTERRUPT_REGISTER); //写读中断寄存器的命令
InterruptSource=D12ReadByte(); //读回第一字节的中断寄存器
if(InterruptSource&0x80)UsbBusSuspend(); //总线挂起中断处理
if(InterruptSource&0x40)UsbBusReset(); //总线复位中断处理
if(InterruptSource&0x01)UsbEp0Out(); //端点0输出中断处理
if(InterruptSource&0x02)UsbEp0In(); //端点0输入中断处理
if(InterruptSource&0x04)UsbEp1Out(); //端点1输出中断处理
if(InterruptSource&0x08)UsbEp1In(); //端点1输入中断处理
if(InterruptSource&0x10)UsbEp2Out(); //端点2输出中断处理
if(InterruptSource&0x20)UsbEp2In(); //端点2输入中断处理
}
if(ConfigValue!=0) //如果已经设置为非0的配置,则可以返回报告数据
{
LEDs=~KeyPress; //利用板上8个LED显示按键状态,按下时亮
if(!Ep1InIsBusy) //如果端点1输入没有处于忙状态,则可以发送数据
{
KeyCanChange=0; //禁止按键扫描
if(KeyUp||KeyDown||KeyPress) //如果有按键事件发生
{
SendReport(); //则返回报告
}
KeyCanChange=1; //允许按键扫描
}
}
}
}
////////////////////////End of function//////////////////////////////
复制代码
39709594UsbMouse.rar
(102.82 KB, 下载次数: 224)
2010-5-21 22:36 上传
点击文件名下载附件
举报
回复
17 个评论
hpd***
新手上路
发表于 2010-5-27 13:48:27
|
显示全部楼层
不错!!!!!!!!!
举报
回复
支持
反对
smiles***
新手上路
发表于 2010-5-29 18:43:44
|
显示全部楼层
谢谢分享
学习一下
举报
回复
支持
反对
wuhu***
新手上路
发表于 2010-6-5 10:41:06
|
显示全部楼层
很感谢楼主的贴啊!最好每句代码交代一下就好了,让初学者能看得更加明白,学到更多东西!{:13_784:}
举报
回复
支持
反对
kevi***
新手上路
发表于 2010-7-24 12:25:40
|
显示全部楼层
谢谢分享 ................
举报
回复
支持
反对
wangb***
新手上路
发表于 2010-8-24 16:43:38
|
显示全部楼层
非常感谢...................
举报
回复
支持
反对
pxw***
新手上路
发表于 2010-8-27 18:50:43
|
显示全部楼层
回复
1#
admin
谢谢楼主分享,学习中。
举报
回复
支持
反对
lxq***
新手上路
发表于 2010-9-7 10:48:58
|
显示全部楼层
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
举报
回复
支持
反对
xie***
新手上路
发表于 2010-9-8 11:55:58
|
显示全部楼层
我下了,非常感谢我下了,非常感谢
举报
回复
支持
反对
wu***
新手上路
发表于 2010-9-18 07:25:50
|
显示全部楼层
我来学习。。。。。。。。。。。。。。。。。。。
举报
回复
支持
反对
查看下一页
返回列表
1
2
/ 2 页
下一页
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖后跳转到最后一页
回复
转播
评分
分享
打开支付宝扫一扫,最高立得1212元红包
搜索
本版
帖子
用户
热搜:
传感器
51串口程序
电子管放大器
夾式電表
夾式電流
Mentor论坛
打印机
版块推荐
百宝箱
My 布拉格
无边框Z9
Z9Max
Z9mini
nubia动态
问题 & 建议
资源分享
爱拍
同城会
牛仔生活
查看论坛所有版块>>
每日签到
论坛任务
摄影技巧
跳蚤市场
互助问答
论坛导读
申请内测
红包中心
每日摇一摇
活动中心
网站地图
官方旗舰店
图文热点
低成本、高性能、带EEPROM了解一下
无锡矽杰微电子的XCE855E 是一颗带 EEPROM 的 8 位单片机,专为多 IO 产品的应用而设
工控仪表/水电气表LCD驱动/抗干扰液晶段码
产品品牌:永嘉微电/VINKA 产品型号:VK2C21A 封装形式:SOP28 概述 VK2C21是一
为什么电动车会着火?原因是什么?电动车充
其实电动车起火的新闻我们也不是第一次看到了,让很多人对电动车的安全性产生质疑,但
性价比超高的国产单片机了解一下
hello大家好,我是无锡矽杰微电子的马甲小号 今天给大家介绍一颗单片机,我们的
上手简单,开发资料齐全的触摸单片机了解一
hello,各位工程师大大们新年快乐 我是无锡矽杰微电子的马甲号。 我司新推出了
更多
精华推荐
低成本、高性能、带EEPROM了解一下
工控仪表/水电气表LCD驱动/抗干扰液晶段码
软件模拟2812通信协议导致的种种问题,你遇
适用于电子鞭炮、电子蜡烛灯等方案的单片机
为什么电动车会着火?原因是什么?电动车充
性价比超高的国产单片机了解一下
国产单片机推荐I 低功耗、强驱动、极具性价
上手简单,开发资料齐全的触摸单片机了解一
更多
社区学堂
低成本、高性能、带EEPROM了解一下
工控仪表/水电气表LCD驱动/抗干扰液晶
低成本、高性能、带EEPROM了解一下
无锡矽杰微电子的XCE855E 是一颗带 EEPROM 的 8 位单片机,专为多 IO 产品的应用而设
工控仪表/水电气表LCD驱动/抗干扰液晶段码
产品品牌:永嘉微电/VINKA 产品型号:VK2C21A 封装形式:SOP28 概述 VK2C21是一
为什么电动车会着火?原因是什么?电动车充
其实电动车起火的新闻我们也不是第一次看到了,让很多人对电动车的安全性产生质疑,但
更多
客服中心
QQ:187196467
服务时间:周一至周日 8:30-20:30
在线客服
客服微博
产品咨询
售后中心
关注我们
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
QQ:187196467
周一到周日 8:30-22:00 (全年无休)
7 x 24小时在线客服
手机版
Powered by
MCUZX!
X3.4 © 2008-2015
MCU资讯论坛
版权所有
京ICP备18035221号-2
客服QQ: 187196467
技术支持:
MCU资讯论坛
|
网站地图
快速回复
返回顶部
返回列表