cjb114b 发表于 2007-5-1 14:35:42

马潮老师,请帮帮忙!怎样能把键盘上所表示的字符发送给电脑让电脑显示出来?

我现在做一个键盘设计,怎样能把键盘上所表示的字符发送给电脑让电脑显示出来!这是我的程序,是这样些写吗?如果不对,应该怎样写才对!



#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接CLKPB7接DATA

int main(void)

{

    DDRB=0X00;

        DDRC=0X00;   //PCIN

        PORTC=0XFF;

        while(1)

       {

       while(1)

         {

         recheck:

             DDRB=0X00;

             while((PINB&0X01)!=0X00);   //判断CLK是否为LOW

                   _delay_us(50);

                   if((PINB&0X01)!=0X01)//判断CLK是否为HIGH

                  gotorecheck;

                  while((PINB&0X80)!=0X80) gotorecheck; //判断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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;//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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck; //判断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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck; //判断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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck;

                     _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) gotorecheck; //判断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) gotorecheck; //判断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) gotorecheck; //判断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) gotorecheck; //判断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) gotorecheck; //判断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) gotorecheck;

                     _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);

         }

   }

}


























-----此内容被cjb114b于2007-05-01,15:19:35编辑过

machao 发表于 2007-5-8 14:29:05

实在看不下去。你把这个程序彻底望掉,老老实实从基础开始学。
页: [1]
查看完整版本: 马潮老师,请帮帮忙!怎样能把键盘上所表示的字符发送给电脑让电脑显示出来?