打印
[AVR单片机]

关于PS2的问题,请问单片机怎样发送字符让电脑显示出来

[复制链接]
2768|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjb114b|  楼主 | 2007-5-1 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我写的程序,我想显示一个a字,我先发a的通码给电脑,接着发0XFF和a的断码给电脑,为什么电脑不显示a,还有我一动一下鼠标就报警!请问为什么,是不是我的程序不对,请各位指教 


#include <avr/io.h> 
#include <avr/delay.h>  
#include <avr/signal.h>  
#include <stdio.h> 
unsigned char del_1,key_data,key_down; 
//本程序想在电脑上显示a字符,发送流程是先发送A的通码,再发0XFF,接着发A的断码,请问我这样做对吗?PB0接CLK  PB7接DATA 
int main(void) 
  { 
    DDRB=0X00; 
   DDRC=0X00;   //PC  IN 
   PORTC=0XFF; 
   while(1) 
    { 
       while(1) 
         { 
           recheck: 
          DDRB=0X00; 
          while((PINB&0X01)!=0X00);   //判断CLK是否为LOW 
         _delay_us(50); 
         if((PINB&0X01)!=0X01)//判断CLK是否为HIGH 
          goto  recheck; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20);      //0 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck;//0 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck;  
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck;   
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          _delay_ms(50); 
          while((PINB&0X80)!=0X80) goto  recheck;  
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20);      //0 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          _delay_us(50); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck;  
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck;   
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          _delay_ms(50); 
          while((PINB&0X80)!=0X80) goto  recheck; 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck; //判断DATA是否为HIGH 
           _delay_us(20); 
          DDRB=0X81; 
          PORTB&=~_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          DDRB=0X00; 
          while((PINB&0X80)!=0X80) goto  recheck;   
           _delay_us(20);    //1 
          DDRB=0X81; 
          PORTB|=_BV(PB7); 
          _delay_us(20); 
          PORTB&=~_BV(PB0); 
          _delay_us(40); 
          PORTB|=_BV(PB0); 
          _delay_us(20); 
          _delay_ms(1000); 
         } 
     } 
  } 

相关帖子

沙发
turmary| | 2007-5-1 17:15 | 只看该作者

要看PC机运行DOS或WIN才行

要是WIN要看当前的焦点是不是在文本框之类的可显示输入字符的地方。

使用特权

评论回复
板凳
cjb114b|  楼主 | 2007-5-1 22:05 | 只看该作者

PC运行在WIN

就是想键盘一样,在WIN下,能显示字符的地方都可以显示

使用特权

评论回复
地板
turmary| | 2007-5-1 22:14 | 只看该作者

是这样儿的

发关A字符,发送流程是先发送A的通码1C,再发断码,有0XF0,0X1C

使用特权

评论回复
5
cjb114b|  楼主 | 2007-5-2 11:39 | 只看该作者

我发送给电脑也是象turmary所说那样发,但是电脑不显示

发给电脑的时候我也是先发A的通码1C,再发断码,有0XF0,0X1C,也按照PS2的协议来发了,但是电脑没有显示,不是单片机和电脑通信还要什么初始化的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

7

帖子

0

粉丝