历史上的今天
返回首页

历史上的今天

今天是:2025年08月14日(星期四)

正在发生

2020年08月14日 | mouse.h头文件下载( 51单片机ps2 鼠标 驱动)

2020-08-14 来源:51hei

/******************************************************

     演示鼠标引脚定义

CLK : 白色

SDA  : 绿色

GND:   橙色

VCC:   蓝色

*******************************************************/

#include"delay52.h"

#ifndef MOUSE_H

#define MOUSE_H


sbit mouse_SDA=P3^4;//数据线P3_5

sbit mouse_CLK=P3^3;//时钟线P3_3



                           

unsigned char bdata mouse_byte; //接收字节

sbit mouse_byte_bit0=mouse_byte^0;//mouse_byte第0位

sbit mouse_byte_bit1=mouse_byte^1;//mouse_byte第1位

sbit mouse_byte_bit2=mouse_byte^2;//mouse_byte第2位

sbit mouse_byte_bit3=mouse_byte^3;//mouse_byte第3位

sbit mouse_byte_bit4=mouse_byte^4;//mouse_byte第4位

sbit mouse_byte_bit5=mouse_byte^5;//mouse_byte第5位

sbit mouse_byte_bit6=mouse_byte^6;//mouse_byte第6位

sbit mouse_byte_bit7=mouse_byte^7;//mouse_byte第7位


unsigned char bdata mouse_fuction;//功能信息字节

                     

unsigned char mouse_buffer[11];//接收位数据缓冲区

unsigned char mouse_buffer_bit=0;//mouse_buffer[mouse_buffer_bit]

unsigned char mouse_data[3];//接收鼠标数据缓冲区,分别存放:功能信息字节,x位移量,y位移量

unsigned char mouse_data_bit=0;//mouse_data[mouse_data_bit]


unsigned int move_x=10000;//存放横坐标

unsigned int move_y=10000;//存放纵坐标


void Init_mouse(void)

{

     TCON=0x00;

     EA=1;

     EX1=1;//允许外部中断1

     ET0=0x01;//允许全局中断,允许定时器/计数器0溢出中断

     PX1=1;//设置中断优先级

}



/***********************************************************************

  发送数据

************************************************************************/

void mouse_send_data(unsigned char dat)

{

unsigned char i;

EX1=0;                              /*关闭外部中断1*/

ACC=dat;                            /*将要发送的数据放入A寄存器*/

mouse_CLK=0;                       /*拉低时钟线*/

delay10us(200);                      /*延时100us以上*/

mouse_SDA=0;                        /*拉低数据线*/

delay10us(40);

mouse_CLK=1;                       /*释放时钟线*/

for(i=0;i<=7;i++)             /*低位在前,一次发送8个数据位*/

{

  while(mouse_CLK==1);           /*等待设备拉低时钟线*/

  mouse_SDA=(dat>>i)&0x01;      /*发送数据位*/

  while(mouse_CLK==0);           /*等待设备释放时钟线*/

}

while(mouse_CLK==1);

mouse_SDA=~P;                       /*发送校验位,奇校验*/

while(mouse_CLK==0);

while(mouse_CLK==1);

mouse_SDA=1;                        /*发送停止位*/

while(mouse_CLK==0);        

while(mouse_CLK==1);    /*应答位*/

while(mouse_CLK==0);

EX1=1;                              /*打开外部中断1*/

}


/*********************************************

    奇校检

**********************************************/

unsigned char Checkout(void)   

{

ACC=mouse_byte;

if(~P==mouse_buffer[9])

  return 1;

else

  return 0;

}


/*********************************************************

     数据分析及处理

**********************************************************/

void data_analyse(void)

{

//将收到的11位信号中截取8位数据放进mouse_byte

mouse_byte_bit0=mouse_buffer[1];

mouse_byte_bit1=mouse_buffer[2];

mouse_byte_bit2=mouse_buffer[3];

mouse_byte_bit3=mouse_buffer[4];

mouse_byte_bit4=mouse_buffer[5];

mouse_byte_bit5=mouse_buffer[6];

mouse_byte_bit6=mouse_buffer[7];

mouse_byte_bit7=mouse_buffer[8];

if(Checkout())//如果校验正确

{

  if(mouse_data_bit<3)        

   mouse_data[mouse_data_bit++]=mouse_byte;

  if(mouse_data_bit==3)

  {

   mouse_data_bit=0;

   if(mouse_data[0]&0x10)//如果"X sign bit"为1,表示鼠标向左移

   {

    move_x-=(256-mouse_data[1]);//x坐标减

   }

   else

   {

    move_x+=mouse_data[1];//x坐标加

   }

   if(mouse_data[0]&0x20)

   {

    move_y-=(256-mouse_data[2]);//y坐标减

   }

   else

   {

    move_y+=mouse_data[2];//y坐标加

   }

  }

}

}


/**************************************************

       外部中断1

***************************************************/

void ReceiveData(void)  interrupt 2

{

if(mouse_buffer_bit<=10)

{                                 

  while(mouse_CLK==0);//等待设备拉高时钟线

  mouse_buffer[mouse_buffer_bit++]=mouse_SDA;//接收数据

}

if(mouse_buffer_bit==10)

{

  data_analyse();//数据分析及处理

  mouse_buffer_bit=0;

}           

}


推荐阅读

史海拾趣

Altera (Intel)公司的发展小趣事

Altera是一家以FPGA(可编程逻辑器件)和相关技术为主的半导体公司,于1983年成立于美国加利福尼亚州的圣塔克拉拉。以下是关于Altera公司发展的五个相关故事:

  1. 成立与早期发展:Altera公司由Robert Hartmann和Michael Magranet等人创立,最初以设计和制造EEPROM(可擦除可编程只读存储器)为主。1984年,Altera推出了全球第一个可编程逻辑器件EP300系列,开创了FPGA行业。随后,Altera不断扩大产品线,致力于FPGA技术的研发和推广。

  2. FPGA技术创新:Altera在FPGA技术方面持续进行创新,推出了一系列新产品和技术。1992年,公司推出了第一个基于SRAM(静态随机存储器)的FPGA器件,从而实现了更高的速度和灵活性。随后,Altera不断改进器件结构、设计工具和软件支持,提高了产品性能和用户体验。

  3. 与竞争对手的竞争:在FPGA市场,Altera与Xilinx是两大竞争对手。两家公司在技术、产品性能、市场份额等方面展开激烈竞争。为了在市场上取得优势,Altera不断加大研发投入,推出了更具竞争力的产品,并积极开展营销和销售活动。

  4. 收购与合并:Altera在发展过程中进行了一系列收购与合并,以扩大市场份额和提升技术实力。2015年,英特尔公司以约160亿美元的价格收购了Altera,将其并入英特尔旗下,成为英特尔的子公司。这一收购使英特尔获得了Altera在FPGA领域的技术优势和市场份额,进一步巩固了英特尔在半导体行业的领先地位。

  5. 公司发展与创新:作为英特尔的子公司,Altera继续发展和创新。公司不仅致力于FPGA技术的进一步改进和推广,还在其他领域进行探索和拓展,如数据中心、人工智能、物联网等。Altera不断推出新产品和解决方案,满足不同行业和应用领域的需求,保持了在半导体行业的竞争优势。

以上是关于Altera公司发展的五个相关故事,这些故事展示了Altera从成立初期到被英特尔收购的发展历程,以及其在FPGA技术领域的技术创新、市场竞争和业务拓展等方面的重要进展。

Dau Semiconductor Inc公司的发展小趣事

在市场竞争日益激烈的今天,Dau Semiconductor Inc公司深知只有不断创新和升级技术,才能保持市场竞争力。因此,公司不断加大对研发的投入,引进先进的设备和人才,探索新的技术方向。近年来,公司成功研发出了多款具有创新性的半导体芯片产品,如基于人工智能技术的智能芯片、基于物联网技术的低功耗传感器芯片等。这些产品的推出,不仅为公司带来了更多的商业机会,也为行业的发展注入了新的活力。

Hirect公司的发展小趣事
通过增加散热片、采用风扇散热或液冷散热等方式,提高变压器和晶闸管的散热性能,确保在高温环境下也能稳定运行。
潮州三环(Three-circle)公司的发展小趣事

随着公司业务的不断拓展和市场的日益全球化,三环集团开始积极推进全球化战略。公司在广东潮州、深圳,四川成都、南充、德阳,江苏苏州,湖北武汉,中国香港,德国,泰国等地设立公司,形成了覆盖全球的产业布局。通过与国际知名企业的合作与交流,三环集团不断提升自身的技术水平和市场竞争力,逐步成为电子行业的领军企业之一。同时,公司还积极参与国际展览和论坛等活动,展示自身实力和品牌形象,为全球客户提供更优质的产品和服务。

以上五个故事分别从不同角度展现了潮州三环(Three-circle)公司在电子行业中的发展历程和成就。这些故事不仅展示了公司的创新能力和市场洞察力,也体现了公司在面对市场挑战时的勇气和决心。

ADL [ADL Embedded Solutions Inc]公司的发展小趣事

进入新世纪,三环集团继续加大研发投入,力求在电子元件领域取得更多突破。2001年,公司投资生产多层片式陶瓷电容器(MLCC),这是一种广泛应用于电子设备的关键元件。三环集团凭借其强大的研发能力和技术实力,成功实现了MLCC的量产,并将其应用于手机、电子、通讯等多个领域。这一突破不仅提升了公司的市场竞争力,也进一步巩固了其在电子行业中的地位。

Bipolar Integrated Technology Inc公司的发展小趣事

随着国内市场的饱和,BIT开始将目光投向国际市场。他们通过参加国际电子展会、与海外企业建立合作关系等方式,积极拓展海外市场。同时,BIT还在全球范围内设立研发中心和生产基地,以便更好地满足不同地区客户的需求。

问答坊 | AI 解惑

【转】"如何正确使用保险丝"在线研讨会问答精粹

慢熔断保险丝与快熔断有什么不同的性能和应用;相同特性和额定电流的保险丝能直接替换吗;保险丝分断能力在实际应用中有什么意义;保险丝性能的影响因素;一次性保险丝和可恢复保险丝的异同;保险电阻能起到保险丝的作用吗?这些都是工程师在保险丝 ...…

查看全部问答>

我觉得裸奔也要带着操作系统思想裸奔

我程序一直都是裸体的,在裸体中发现了几个问题: (1)WARNING L15: MULTIPLE CALL TO SEGMENT --函数重入 其实这个问题实际上就是函数重入问题,在操作系统的多线程很常见。例如在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样 ...…

查看全部问答>

我的小本系统是win7的,但装不了Protel 99se软件

我的小本系统是win7的,但装不了Protel 99se软件,装的是Protel 99se汉化中文第六版(含第二版),请各位友友帮帮忙…小弟我感激不尽……

查看全部问答>

SD卡的识别问题,一些卡无法识别。

SD卡驱动在很多情况下都可以正常的识别SD卡,但是有一些卡却无法识别。 查看log,可以看到一些初始化命令无法获得响应,总是超时。 请问大家遇到过类似的问题吗?可能是哪些方面的原因呢?…

查看全部问答>

ads中用jlink调试时 调试窗口看不到存储器变化? 但运行结果正常! 求救!!!

ads中用jlink调试时 调试窗口看不到存储器变化? 但运行结果正常! 求救!!!…

查看全部问答>

2440 camera 问题????--献上所有分

刚接触CE1个月 马上要在公司自己开发的主板上移植7645BF驱动了 还有些有关camera驱动问题还不是很清楚 希望高人解答!!! 比如 2440上 camera分配的是irq6 该irq可能由INTSUB_CAM_P、INTSUB_CAM_C或INT_CAM 被置一而引起,有的资料上说中断由VSYN ...…

查看全部问答>

大家觉得这个车架适合不适合做智能车!~

RT 在淘宝上看到的,就是价格稍高318元,但是相对飞思卡尔官方的车体价格还是便宜一点的!~   …

查看全部问答>

加载失败和运行不起来的原因

本帖最后由 dontium 于 2015-1-23 13:21 编辑 在我加载程序时,它提示我Data verification failed at address 0x48a0。Please  verify target memory and memory map.点我点确定后,又出现这个错误对话框,可地址改为ox6320了,当我打开 ...…

查看全部问答>

转贴:FreeRTOS port to eZ430-RF2500

FreeRTOS 在eZ430-RF2500 的移植,秒到eZ430-RF2500可以玩…

查看全部问答>

大神,求助?

    学习DSP真的让我学到了很多的东西,最开心的就是问题解决后高兴和满足,但是当困恼在一个地方的时候会很烦恼,但是这是一个学技术的历练。    最近在连接一个F28035和TOPWAY 的液晶屏,但是会出现一些问题,有的已经 ...…

查看全部问答>