好久没有更新了。最近搞怎么黑人搞上瘾了。所以没有时间更新这个了。当然不能半途而废。
今天的主要内容是更新分辨率和接收键盘输入。分辨率这部分我早就实现了。因为原来320×200的分辨率看着实在恶心。而且这部分也不难,主要涉及硬件,所以直接跳过。
基本原理:
键盘的原理是什么?学过电子的应该知道,TM的映射那么多键需要很多线,而且还有组合这不是坑爹吗?我也不是很清楚,概括来说就是有个单片机一直在扫描电路,看看有没有接通,接通了就传给计算机相应代码。具体可以看这个。搞过下面的那个板子的同学肯定也能理解原理。但是如何做到这么多键位我就有点糊涂了。
按下键盘的按键后,硬件会传入一个代码,这个代码代表什么字符就需要系统判断。一般的映射是Original XT scan code set。按下A就传如1E,松开传入9E。我也实现了这个。
代码实现:
其中接收部分之前就已经完成。就是传入到FIFO里。然后要做的就是解释代码。为了方便起见,用个数组。下面就是主要代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | static char keytable[0x54] = { 0,0,'1','2','3','4','5','6','7','8','9','0','~','^',0,0, 'Q','W','E','R','T','Y','U','I','O','P','@','[',0,0,'A','S', 'D','F','G','H','J','K','L',';',':',0,0,']','Z','X','C','V', 'B','N','M',',' , '.' ,'/',0,'*',0,' ',0,0,0,0,0,0, 0,0,0,0,0,0,0,'7','8','9','-','4','5','6','+','1', '2','3','0','.' }; if(fifo_data < 256 + 0x54){ if(keytable[fifo_data-256] != 0){ s[0] = keytable[fifo_data-256]; s[1] = 0; putfont8_asc_sht(sht_win, cursor_x, 28, COL8_000000, COL8_FFFFFF,s, 1); cursor_x += 8; // next pos } if(fifo_data == 256 + 0x0e && cursor_x >= 8){ putfont8_asc_sht(sht_win, cursor_x, 28, COL8_000000, COL8_FFFFFF," ", 1); cursor_x -= 8; } // boxfill8(sht_win->buf, sht_win->bxsize, cursor_c, cursor_x, 28, cursor_x+7, 43); // sheet_refresh(sht_win, cursor_x, 28, cursor_x+7, 43); } |
近期评论