一个基于S3C2410芯片的简单应用系统的C语言代码,该代码带有一个RS232通信接 口带有一个4x4键盘,各个按键对应编号为:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,某个键摁下时通过RS232口将对应的ASCII码发送出去。
时间: 2023-07-04 14:05:16 浏览: 126
获知键盘按键对应的ASCII码
下面是一个基于S3C2410芯片的简单应用系统的C语言代码,带有一个RS232通信接口和一个4x4键盘,按键对应编号为:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,按下某个键时通过RS232口将对应的ASCII码发送出去。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "2410lib.h"
#define UART0_BAUD_RATE 115200
#define UART0_CLOCK_RATE 50000000
// 定义键盘按键对应的ASCII码
char keymap[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// 初始化UART0串口
void init_uart0(void)
{
rGPHCON &= ~(0xff<<4); // 设置GPH2和GPH3引脚为UART0功能
rGPHCON |= (0x22<<4);
rULCON0 = 0x3; // 8位数据位,1位停止位,无校验
rUCON0 = 0x5; // 时钟源为PCLK,禁止FIFO
rUFCON0 = 0x0;
rUBRDIV0 = (UART0_CLOCK_RATE / (UART0_BAUD_RATE * 16)) - 1;
}
// 发送一个字符到UART0串口
void putchar_uart0(char ch)
{
while (!(rUTRSTAT0 & 0x2)); // 等待发送缓冲区为空
rUTXH0 = ch; // 发送字符
}
// 发送一个字符串到UART0串口
void puts_uart0(char *str)
{
while (*str) {
putchar_uart0(*str++);
}
}
// 初始化4x4键盘
void init_keypad(void)
{
rGPGCON = 0x1111; // 设置GPG0~3为输出,GPG4~7为输入
rGPGDAT |= 0xf; // GPG0~3输出高电平
}
// 读取键盘按键
char read_key(void)
{
int row, col;
for (row = 0; row < 4; row++) {
rGPGDAT &= ~(0xf << 4); // 将GPG4~7置为0
rGPGDAT |= (1 << (4 + row)); // 将当前行置为1
for (col = 0; col < 4; col++) {
if (!(rGPGDAT & (1 << col))) { // 判断当前列是否为0
return keymap[row][col]; // 返回对应的ASCII码
}
}
}
return '\0'; // 没有按键按下
}
int main(void)
{
char ch;
init_uart0();
init_keypad();
while (1) {
ch = read_key();
if (ch != '\0') {
putchar_uart0(ch); // 发送按键对应的ASCII码
}
}
return 0;
}
```
阅读全文