?? keyboard451.lst
字號:
C51 COMPILER V7.08 KEYBOARD451 03/05/2007 16:38:04 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE KEYBOARD451
OBJECT MODULE PLACED IN keyboard451.OBJ
COMPILER INVOKED BY: D:\程序\keil c\C51\BIN\C51.EXE keyboard451.c LARGE INCDIR(c:|keil) DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 標題: 藍海微芯LJD-SY-5100單片機開發系統演示程序 *
3 * 文件: keyboard451.c *
4 * 日期: 2006-7-22 *
5 * 版本: 1.0 *
6 * 作者: Pillar *
7 ********************************************************************************
8 * 描述: *
9 * 鍵盤管理 *
10 * *
11
12 ********************************************************************************
13 * 【版權】 Copyright(C) belongs to 天宇藍翔科技有限公司 All Rights Reserved *
14 * 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
15 *******************************************************************************/
16 #include <keyboard451.h>
17
18 BYTE ch451_key; // 存放鍵盤中斷中讀取的鍵值
19 BOOL renew_key_id;
20 //*************************************************
21
22 void ch451_init() //初始化
23 {
24 1 P1 = 0x60;
25 1
26 1 ch451_din =0;
27 1 ch451_dclk=1; //先低后高,選擇4線輸入
28 1 ch451_din =1;
29 1 ch451_load=1;
30 1 ch451_dout=1;
31 1
32 1
33 1 IT1=0; //設置低電平觸發
34 1 IE1=0; //清中斷標志
35 1 PX1=1; //設置中斷1為高優先級
36 1 EX1=1; //開外部中斷1
37 1 //ch451_write(0x201); //451 reset
38 1 ch451_write(0x402); //set keyboard mode
39 1
40 1 }
41 //*****************************************************
42 //used in num key
43 BYTE get_num_address_from_key_value(BYTE key_value) //讀鍵值
44 {
45 1 switch (key_value){
46 2 case ZONGQING_KEY: //6
47 2 return 5;
48 2 case DANQING_KEY: //7
49 2 return 6;
50 2 case HUIZONG_KEY: //8
51 2 return 7;
52 2 case ZIDONG_KEY: //9
53 2 return 8;
54 2 case JIUCUO_KEY: //
55 2 return 'e';
C51 COMPILER V7.08 KEYBOARD451 03/05/2007 16:38:04 PAGE 2
56 2 case ZONGZHONG_KEY: //
57 2 return 1;
58 2 case CHAXUN_KEY: //
59 2 return 2;
60 2 case ZOUZHI_KEY: //
61 2 return 3;
62 2 case BEIGUANG_KEY:
63 2 return 4;
64 2 case CUNRU_KEY: //
65 2 return 'f';
66 2 case GUILING_KEY: //0
67 2 return 0;
68 2 case ZONGCI_KEY: //1
69 2 return 9;
70 2 case LEIBIE_KEY: //2
71 2 return 'a';
72 2 case SHEPI_KEY: //3
73 2 return 'b';
74 2 case RIQI_KEY: //4
75 2 return 'c';
76 2 case SHIJIAN_KEY: //5
77 2 return 'd';
78 2 case GUANJI_KEY: //5
79 2 return 'g';
80 2 default :
81 2 return 17;
82 2 }
83 1
84 1 }
85
86 void ch451_write(WORD command)
87 {
88 1 BYTE i;
89 1 WORD tem;
90 1
91 1 tem = command;
92 1 EX1=0; //禁止鍵盤中斷
93 1 //tem1 = command&0xff;
94 1 ch451_load=0; //命令開始
95 1 for(i=0;i<12;i++){ //送入12位數據,低位在前
96 2
97 2 ch451_din = (tem &1);
98 2 ch451_dclk=0;
99 2 tem = (tem >> 1);
100 2 ch451_dclk =1; //上升沿有效
101 2 }
102 1 ch451_load =1; //加載數據
103 1 EX1=1;
104 1 }
105
106
107
108 //*************************************************
109 //輸入命令子程序,MCU從451讀一字節
110 BYTE ch451_read()
111 {
112 1 BYTE i;
113 1 BYTE command,keycode; //定義命令字,和數據存儲器
114 1 EX1=0; //關中段
115 1 command=0x07; //輸入讀451命令字
116 1 ch451_load=0;
117 1 for(i=0;i<4;i++){
C51 COMPILER V7.08 KEYBOARD451 03/05/2007 16:38:04 PAGE 3
118 2
119 2 ch451_din=command&1; //送入最低位
120 2 ch451_dclk=0;
121 2 command>>=1; //往右移一位
122 2 ch451_dclk=1; //產生時鐘上升沿鎖通知CH451輸入位數據
123 2 }
124 1 ch451_load=1; //產生加載上升沿通知CH451處理命令數據
125 1 keycode=0; //清除keycode
126 1 for(i=0;i<7;i++){
127 2 keycode<<=1; //數據移入keycode,高位在前,低位在后
128 2 keycode|=ch451_dout; //從高到低讀入451的數據
129 2 ch451_dclk=0; //產生時鐘下升沿通知CH451輸出下一位
130 2 ch451_dclk=1;
131 2 }
132 1 IE1=0; //清中斷標志
133 1 EX1=1;
134 1 return(keycode); //反回鍵值
135 1 }
136
137
138 //*************************************************
139 //中斷子程序 使用中斷2,寄存器組1
140
141 void ch451_inter(void) interrupt 2 using 1
142 {
143 1 BYTE i,keycode;
144 1 BYTE command;
145 1
146 1 EX1 = 0; //關中斷
147 1 command=0x07; //讀取鍵值命令的高4位0111B
148 1 ch451_load=0; //命令開始
149 1 for(i=0;i<4;i++){
150 2 ch451_din=command&1; //低位在前,高位在后
151 2 ch451_dclk=0;
152 2 command>>=1; //右移一位
153 2 ch451_dclk=1; //產生時鐘上升沿鎖通知CH451輸入位數據
154 2 }
155 1 ch451_load=1; //產生加載上升沿通知CH451處理命令數據
156 1 keycode=0; //清除keycode
157 1 for(i=0;i<7;i++){
158 2 keycode<<=1; //數據作移一位,高位在前,低位在后
159 2 keycode|=ch451_dout; //從高到低讀入451的數據
160 2 ch451_dclk=0; //產生時鐘下升沿通知CH451輸出下一位
161 2 ch451_dclk=1;
162 2 }
163 1 ch451_key=keycode; //保存上次的鍵值
164 1 renew_key_id = 1;
165 1 EX1 = 1; //開中斷
166 1 IE1 = 0; //清中斷標志,可由cpu自動進行
167 1 }
168
169
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 306 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
C51 COMPILER V7.08 KEYBOARD451 03/05/2007 16:38:04 PAGE 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -