📄 ps2keybord.lst
字号:
C51 COMPILER V8.05a PS2KEYBORD 08/02/2007 16:30:54 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE PS2KEYBORD
OBJECT MODULE PLACED IN PS2KeyBord.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE PS2KeyBord\PS2KeyBord.c BROWSE DEBUG OBJECTEXTEND PRINT(.\PS2
-KeyBord.lst) OBJECT(PS2KeyBord.obj)
line level source
1 /******************************************************************************
2 * File Name: PS2KeyBord.c *
3 * Create Time: 2007/07/30 *
4 * Description: *
5 * Copyright : *
6 * History : *
7 * |---Data---|---Author---|--Version--|--------------Description-------------|
8 *****************************************************************************/
9 #define PSKEYBORD_ONOFF
10 #ifdef PSKEYBORD_ONOFF
11 /******************************
12 * Head File *
13 *****************************/
14 #include"PS2KeyBord.h"
15 /******************************
16 * Global Variable *
17 *****************************/
18 uchar g_ucPSkeydata = 0x00; //按下键的通码值
19 uchar ucRecBuf_ptr=0x00; //键盘按下键数据的缓冲区指针
20 uchar ucRecBuf[11]; //从键盘接收数据的缓冲区
21 uchar cntOddNum = 0x00;// 奇校验中‘1’的个数
22 /******************************
23 * Function Implement *
24 *****************************/
25
26 /*******************************************************************************
27 Function Name: 数据接收函数 *
28 Input Parameter : *
29 Output Parameter : *
30 Function Description : 接收从键盘输入的11位数据 *
31 *******************************************************************************/
32 void DataReceive(void)
33 {
34 1 if(ucRecBuf_ptr<=0x0a)
35 1 {
36 2 if(P3_2 == 0)
37 2 {ucRecBuf[ucRecBuf_ptr] = P3_7;
38 3 ucRecBuf_ptr++; }
39 2 else return;
40 2 }
41 1 else
42 1 {
43 2 GetData();
44 2 ucRecBuf_ptr = 0x00;
45 2 }
46 1
47 1 }
48 /*******************************************************************************
49 Function Name: 奇校验函数 *
50 Input Parameter : *
51 Output Parameter : *
52 Function Description : 对收到的数据进行校验和检验,防止数据出错 *
53 *******************************************************************************/
54 uchar oddCheck(void)
C51 COMPILER V8.05a PS2KEYBORD 08/02/2007 16:30:54 PAGE 2
55 {
56 1 uchar tmp;
57 1 for(tmp=0;tmp<9;tmp++)
58 1 {
59 2 if(ucRecBuf[tmp+1]==0x01)
60 2 cntOddNum++;
61 2 }
62 1 if(cntOddNum%2 == 1)
63 1 return TURE;
64 1 else return FALSE;
65 1 }
66 /*******************************************************************************
67 Function Name: 返回通码值函数 *
68 Input Parameter : *
69 Output Parameter : *
70 Function Description : 通过函数得到键盘按下的键的通码值 *
71 *******************************************************************************/
72 uchar PSkeydata_value(void)
73 {
74 1 return g_ucPSkeydata;
75 1 }
76 /*******************************************************************************
77 Function Name: 通码拾取函数 *
78 Input Parameter : *
79 Output Parameter : *
80 Function Description : 从接收的11位数据中抽取出8位通码 *
81 *******************************************************************************/
82 void GetData(void)
83 {
84 1 uchar tmp,tmp2;
85 1 if(oddCheck())
86 1 {
87 2 tmp2 = g_ucPSkeydata;
88 2 g_ucPSkeydata = 0x00;
89 2 for(tmp=0;tmp<0x08;tmp++)
90 2 {
91 3 g_ucPSkeydata |= ucRecBuf[tmp+1]<<tmp;
92 3 }
93 2 if(g_ucPSkeydata == 0xf0)
94 2 g_ucPSkeydata = tmp2;
95 2 }
96 1 }
97 /*******************************************************************************
98 Function Name: PS键盘中断0初始化函数 *
99 Input Parameter : *
100 Output Parameter : *
101 Function Description : 从接收的11位数据中抽取出8位通码 *
102 *******************************************************************************/
103 void Int0_init_PSkeybord(void)
104 {
105 1 TMOD = 0x01; //选择定时/计数器0,做定时器用,选择模式1,THx和TLx构成全16位计数器
106 1 TL0 = 0x00; //定时器中断时间为2.5ms
107 1 TH0 = 0xee; //65536 - 0.0025/(12/22118400)=X,反解求出
108 1 TR0 = 0x01; //开启定时器0
109 1 IE = 0x83; //允许全局中断,允许定时器/计数器0溢出中断
110 1 PT1 = 0x00;
111 1 PX0 = 0x01;
112 1 }
113
114 #endif
115 /*******************************************************************************
116 * The end of the entire file *
C51 COMPILER V8.05a PS2KEYBORD 08/02/2007 16:30:54 PAGE 3
117 ******************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 122 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -