📄 ch451.lst
字号:
C51 COMPILER V4.01, CH451 20/08/04 10:59:13 PAGE 1
DOS C51 COMPILER V4.01, COMPILATION OF MODULE CH451
OBJECT MODULE PLACED IN D:\YANTEST\NEWREAD\CH451S\CH451.OBJ
COMPILER INVOKED BY: D:\WAVE6000\COMP51\C51.EXE D:\YANTEST\NEWREAD\CH451S\CH451.C DB SB OE
stmt level source
1 #include "ch451.h"
2 #include "cd4094.h"
3 #include "hardware.h"
4 /*
5 *****************************************************
6 **硬件说明:
7 **1.显示 [] [] : [] []
8 ** DIG0 DIG1 DIG2 DIG3 DIG4
9 **2. :DIG2-SEG0,SEG1
10 **3. 键盘dig5,dig6,dig7------seg0~seg7
11 **4. ch451_cs接CD4094输出口线
12 *****************************************************
13 */
14
15 /////////////////////////////////////////////////////////////////////////
16 //
17 void WriteCh451(unsigned int iCmd);
18 unsigned char ReadCh451();
19
20
21 void InitCh451();
22 unsigned char IsKbhit();
23 unsigned char GetKeyValue(unsigned char *ch);
24 unsigned char WaitForKeyDown(unsigned char *ch,unsigned long timeout);
25 void WaitForKeyUp();
26 void DispClock(unsigned char hour,unsigned char minute,bit flag);
27
28
29 void WriteCh451(unsigned int iCmd)
30 {
31 1 unsigned int xdata i;
32 1
33 1 WatchDog();
34 1
35 1 SelectChip(SEL_CH451);
36 1
37 1 NOP;NOP;NOP;
38 1 for(i=0;i<12;i++)
39 1 {
40 2
41 2 if(iCmd&0x01) SPI_SI=1;
42 2 else SPI_SI=0;
43 2
44 2
45 2 SPI_SCK=0;
46 2 NOP;NOP;NOP;
47 2 SPI_SCK=1;
48 2 NOP;NOP;NOP;
49 2
50 2 iCmd=iCmd>>1;
51 2
52 2 }
53 1 NOP;NOP;NOP;
54 1
55 1 SelectChip(SEL_NULL);
56 1
57 1 }
58
59
C51 COMPILER V4.01, CH451 20/08/04 10:59:13 PAGE 2
60 unsigned char ReadCh451()
61 {
62 1
63 1 unsigned int xdata i=0;
64 1 unsigned char xdata ch=0;
65 1 unsigned char xdata iCmd=0x07;
66 1 bit kk;
67 1
68 1 WatchDog();
69 1
70 1 //1.写4位标识
71 1 SelectChip(SEL_CH451);
72 1 //NOP;NOP;NOP;
73 1 for(i=0;i<4;i++)
74 1 {
75 2
76 2 SPI_SCK=0;
77 2 NOP;NOP;NOP;
78 2
79 2 if(iCmd&0x01) SPI_SI=1;
80 2 else SPI_SI=0;
81 2
82 2 SPI_SCK=1;
83 2 NOP;NOP;NOP;
84 2 iCmd=iCmd>>1;
85 2
86 2 }
87 1
88 1 SelectChip(SEL_NULL);
89 1
90 1 //2.read data
91 1 for(i=0;i<7;i++)
92 1 {
93 2
94 2 NOP;NOP;NOP;
95 2 kk=CH451_SO;
96 2 ch=ch<<1;
97 2 if(kk)ch=ch+1;
98 2
99 2 NOP;NOP;NOP;
100 2 SPI_SCK=0;
101 2 NOP;NOP;NOP;
102 2 SPI_SCK=1;
103 2
104 2
105 2 }
106 1
107 1 return ch;
108 1 }
109
110 /////////////////////////////////////////////////////////////////////////
111 //CH451函数库
112 //初始化
113 void InitCh451()
114 {
115 1 WatchDog();
116 1
117 1 SPI_SI=0;
118 1 SPI_SCK=1;
119 1 SelectChip(SEL_CH451);
120 1 CH451_SO=1;
121 1 WriteCh451(CH451CMD_RESET );
122 1 WriteCh451(CH451CMD_SET_SYSPARA+0x02);
123 1 WriteCh451(CH451CMD_SET_DISPPARA+0x80);
124 1 }
125
C51 COMPILER V4.01, CH451 20/08/04 10:59:13 PAGE 3
126
127 /*
128 **************************************
129 **fun:scan key
130 **in:
131 **out:ch
132 **ret:0-表示有键按下
133 ** 1-无键按下
134 **************************************
135 */
136
137 unsigned char IsKbhit()
138 {
139 1 if(CH451_SO==0)return ID_OK;
140 1 else return ID_ERR;
141 1 }
142 /*
143 #define KEY_NUM_0 0x00
144 #define KEY_NUM_1 0x01
145 #define KEY_NUM_2 0x02
146 #define KEY_NUM_3 0x03
147 #define KEY_NUM_4 0x04
148 #define KEY_NUM_5 0x05
149 #define KEY_NUM_6 0x06
150 #define KEY_NUM_7 0x07
151 #define KEY_NUM_8 0x08
152 #define KEY_NUM_9 0x09
153 #define KEY_DOT 0x0a
154 #define KEY_ESC 0x0b
155 #define KEY_ENTER 0x0c
156 #define KEY_UP 0x0d
157 #define KEY_DOWN 0x0e
158 #define KEY_RESERVE 0x0f
159 */
160 /*
161 **************************************
162 **fun:获取键值
163 **in:
164 **out:ch
165 **ret:0-表示新键按下
166 ** 1-表示旧键按下
167 **************************************
168 1,2,3,4,5,6,7, 8, 9, 10, 11
169 seg0 _ seg7 dig5,dig6,dig7
170 0--------------7 dig5
171 8-------------15 dig6
172 8,9 10 11 12 13 14 15
173 dot, esc enter up down
174 */
175 unsigned char GetKeyValue(unsigned char *ch)
176 {
177 1
178 1 unsigned char xdata key=0;
179 1
180 1 WatchDog();
181 1
182 1 key=ReadCh451();
183 1 if(key&0x40) //有键按下?
184 1 {
185 2 switch(key)
186 2 {
187 3 case 0x45:
188 3 *ch=KEY_NUM_0;break;
189 3 case 0x4d:
190 3 *ch=KEY_NUM_1;break;
191 3 case 0x55:
C51 COMPILER V4.01, CH451 20/08/04 10:59:13 PAGE 4
192 3 *ch=KEY_NUM_2;break;
193 3 case 0x5d:
194 3 *ch=KEY_NUM_3;break;
195 3 case 0x65:
196 3 *ch=KEY_NUM_4;break;
197 3 case 0x6d:
198 3 *ch=KEY_NUM_5;break;
199 3 case 0x75:
200 3 *ch=KEY_NUM_6;break;
201 3 case 0x7d:
202 3 *ch=KEY_NUM_7;break;
203 3
204 3 case 0x46:
205 3 *ch=KEY_NUM_8;break;
206 3 case 0x4e:
207 3 *ch=KEY_NUM_9;break;
208 3 case 0x56:
209 3 *ch=KEY_DOT;break;
210 3 case 0x5e:
211 3 *ch=KEY_ESC;break;
212 3 case 0x66:
213 3 *ch=KEY_ENTER;break;
214 3 case 0x6e:
215 3 *ch=KEY_UP;break;
216 3 case 0x76:
217 3 *ch=KEY_DOWN;break;
218 3 case 0x7e:
219 3 *ch=KEY_RESERVE;break;
220 3
221 3 default:
222 3 *ch=KEY_RESERVE;break;
223 3 }
224 2 return ID_OK;
225 2
226 2 }
227 1
228 1 return ID_ERR;
229 1
230 1 }
231
232 /*
233 **************************************
234 **fun:wait for a key
235 **in:timeout超时 ,循环计数,0---死等,其他超时
236 **out:ch
237 **ret:0-表示有键按下
238 ** 1-无键按下,超时
239 **************************************
240 */
241 unsigned char WaitForKeyDown(unsigned char *ch,unsigned long timeout)
242 {
243 1 unsigned char xdata key=0;
244 1
245 1 WatchDog();
246 1
247 1 if(timeout==0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -