📄 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 + -