网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文

关于PS2键盘的C程序

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/07/07

网学网C/C++编辑为广大网友搜集整理了:关于PS2键盘的C程序绩等信息,祝愿广大网友取得需要的信息,参考学习。

  用51操作和检测PS2键盘,接收数据已经搞定了,可是发送数据却出错,不知道怎么回事。给它的命令和它所执行的完全不同,请高手指教下,到底是哪里错了,还是没错,电路接得不对??接收函数是这样的。
  void send(uchar Data)
  {
  uchar i,high=0;
  EA=0;
  EX0=0;//关闭中断
  CLK=0;
  delay10us(11);
  DATA=0;
  delay10us(2);
  CLK=1;
  while(CLK==1);
  //开始发送八位数据
  for(i=0;i<=7;i++)
  {
  if(Data & 0x01)
  {
  DATA=1;
  high++;
  }
  DATA=(Data>>1);
  while(CLK==0);
  while(CLK==1);
  }
  if(high%2==0) DATA=1; //设置奇校验位
  else DATA=0;
  while(CLK==0);
  while(CLK==1);
  DATA=1;
  while(DATA==1);
  while(CLK==1);
  while(DATA==0);
  while(CLK==0);
  EA=1;
  EX0=1;//写数据程序结束后开中断
  }

  全部程序是这样的:
  #include <reg52.H>
  #include <intrins.H>
  #include <head.h>
  #define uchar unsigned char
  #define uint unsigned int
  #define LCD_DATA P2 //数据口
  sbit RS = P1^5; //并行的指令/数据选择信号, H数据, L命令
  sbit RW = P1^7; //并行读写选择信号, H读, L写
  sbit E = P1^6; //并行使能端, H有效, L无效
  sbit PSB = P1^1; //并/串接口选择, H并,L串
  sbit RET = P1^4; //复位, L有效
  sbit DATA=P0^2;
  sbit CLK=P3^2;
  uchar count,ASCII=65,Data;
  void trains(uchar Code);
  void send (uchar Data);
  //检测LCD是否处于忙状态, 若忙返回1, 空闲返回0
  bit checkBusy()
  {
  bit busy;
  RS = 0;
  RW = 1;
  E = 1;
  delayUs();
  busy = (bit)(LCD_DATA&0x80);
  E = 0;
  return busy;
  }
  //等待LCD到空闲
  void wait()
  {
  while(checkBusy());
  }
  //写命令
  void writeCmd(uchar cmd)
  {
  wait();
  RS = 0;
  RW = 0;
  E = 0;
  delayUs();
  LCD_DATA = cmd;
  delayUs();
  E = 1;
  delayUs();
  E = 0;
  }

  //写数据
  void writeData(uchar dat)
  {
  wait();
  RS = 1;
  RW = 0;
  E = 0;
  delayUs();
  LCD_DATA = dat;
  delayUs();
  E = 1;
  delayUs();
  E = 0;
  }
  //初始化LCD
  void init()
  {
  PSB = 1; //并口方式
  writeCmd(0x30); //基本指令, 扩充指令为34H
  delayMs(10);
  writeCmd(0x0c); //显示开, 关光标
  writeCmd(0x01); //清屏
  delayMs(10);
  }
  void init2()
  {
  PSB = 1; //并口方式
  RET=0; //复位
  delayUs(); //延时
  RET=1; //复位置高
  writeCmd(0x36);
  delayMs(10);
  writeCmd(0x3E);
  delayMs(10);
  writeCmd(0x01); //清屏
  delayMs(10);
  }
  void setPosition(uchar x, uchar y)
  {
  uchar p;
  switch(x%4)
  {
  case 0: p = 0x80; break; //第一行开始地址

  case 1: p = 0x90; break; //第二行
  case 2: p = 0x88; break; //第三行
  case 3: p = 0x98; break; //第四行
  }
  p += y;
  writeCmd(p);
  }
  void writeString(uchar * str)
  {
  uchar i = 0;
  while(str[i] != ''\0'')
  {
  writeData(str[i++]);
  }
  }

  • 上一篇资讯: C语言编写简单2D游戏
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号