由于需要做一个单片机按键 通过串口发送按键信息的小程序 自己用AVR 模拟了一下 发送到LCD1602上 4x4一个16个键 正好两个字节 发送到串口 可以支持多个按键同时按下。 void KeyInit() { DDRA = 0x0f; //4个输出 4个输入 } unsigned int KeyScan() { unsigned char temp; unsigned int value; PORTA = 0x01; //扫描第一行 delay_nms(1); temp = PINA; value = temp>>4; PORTA = 0x02; //扫描第二行 delay_nms(1); temp = PINA; value += temp&0xf0; PORTA = 0x04; //扫描第三行 delay_nms(1); temp = PINA; value += (unsigned int)(temp&0xf0)<<4; PORTA = 0x08; //扫描第四行 delay_nms(1); temp = PINA; value += (unsigned int)(temp&0xf0)<<8; return value; } void main(void) { unsigned int keyvalue; unsigned int beforekey; unsigned char i; INIT_1602(); KeyInit(); while(1) { if( KeyScan()!=0) //有按键