📄 vfdtask.lst
字号:
C51 COMPILER V7.20 VFDTASK 06/30/2005 14:02:58 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE VFDTASK
OBJECT MODULE PLACED IN vfdtask.OBJ
COMPILER INVOKED BY: C:\Keil51\C51\BIN\c51.exe vfdtask.c DB OE SMALL ROM(LARGE)
line level source
1 #include "reg52.h"
2 #include "intrins.h"
3 #include "..\..\inc\globedef.h"
4 #include "..\..\inc\delay.h"
5 #include "..\..\inc\keyproc.h"
6 #include "..\..\inc\vfddef.h"
7 #include "..\..\inc\Tuner.h"
8
9 /*===========================================
10 将输入的数转换成VFD显示字符输出
11 ===========================================*/
12 code WORD NUMBER_DISPLAY[10] =
13 {
14 CHAR_0,CHAR_1,CHAR_2,CHAR_3,CHAR_4,
15 CHAR_5,CHAR_6,CHAR_7,CHAR_8,CHAR_9
16 };
17
18 /*===========================================
19 将输入的字母转换成VFD显示字符输出
20 ===========================================*/
21 code WORD LETTER_DISPLAY[26] =
22 {
23 CHAR_A,CHAR_B,CHAR_C,CHAR_D,CHAR_E,
24 CHAR_F,CHAR_G,CHAR_H,CHAR_I,CHAR_J,
25 CHAR_K,CHAR_L,CHAR_M,CHAR_N,CHAR_O,
26 CHAR_P,CHAR_Q,CHAR_R,CHAR_S,CHAR_T,
27 CHAR_U,CHAR_V,CHAR_W,CHAR_X,CHAR_Y,
28 CHAR_Z
29 };
30
31 /*===============================================
32 描述: 从PT16312读取一个字节的数据
33 参数: 无
34 返回: 从VFD芯片读到的数据
35 ================================================*/
36 BYTE VFD_ReadByte(void)
37 {
38 1 BYTE i;
39 1 BYTE ReceiveData = 0;
40 1 for (i = 0;i <8;i++)
41 1 {
42 2 ReceiveData >>= 1;
43 2 CLEAR_VFD_CLK;
44 2 Delay5US();
45 2 SET_VFD_CLK;
46 2 Delay5US();
47 2 if (VFD_DATA_HIGH)
48 2 ReceiveData |= 0x80;
49 2 }
50 1 TRISTATE_DATA;
51 1 return ReceiveData;
52 1 }
53 /*===============================================
54 描述: 向PT16312发送一个字节的数据
55 参数: 向VFD芯片发送的数据字节
C51 COMPILER V7.20 VFDTASK 06/30/2005 14:02:58 PAGE 2
56 返回: 无
57 ================================================*/
58 void VFD_SendByte(BYTE VFD_SendByte)
59 {
60 1 BYTE i;
61 1 CLEAR_VFD_DATA;
62 1 Delay5US();
63 1 for (i = 0;i <8;i++)
64 1 {
65 2 CLEAR_VFD_CLK;
66 2 _nop_();
67 2 if (VFD_SendByte & 0x01) {
68 3 SET_VFD_DATA;
69 3 }
70 2 else
71 2 {
72 3 CLEAR_VFD_DATA;
73 3 }
74 2 _nop_();
75 2 SET_VFD_CLK;
76 2 VFD_SendByte >>= 1;
77 2 _nop_();
78 2 }
79 1 TRISTATE_DATA;
80 1 }
81 /*===============================================
82 描述: 向PT16312发送命令
83 参数: 向VFD芯片发送的数据字节
84 返回: 无
85 ================================================*/
86 void VFD_SendCmd(BYTE VFD_Byte)
87 {
88 1 DelayX1ms(1);
89 1 CLEAR_VFD_CS;
90 1 Delay5US();
91 1 Delay5US();
92 1 VFD_SendByte(VFD_Byte);
93 1 Delay5US();
94 1 Delay5US();
95 1 SET_VFD_CS;
96 1 DelayX1ms(2);
97 1 }
98
99 /*===============================================
100 描述: 向VFD显示芯片发送一系列数据
101 参数: length,向VFD芯片发送的数据字节的长度,
102 *str, 指向数据的指针
103 返回: 无
104 ================================================*/
105
106 /*===============================================
107 描述: 向VFD显示芯片发送一系列数据
108 参数: length,向VFD芯片发送的数据字节的长度,
109 *str, 指向数据的指针
110 返回: 无
111 ================================================*/
112 //void VFD_Display(BYTE G_Connect, BYTE P_Connect, BYTE *str, BYTE str_Start,
113 // DWORD Number, BYTE )
114 void VFD_DisplayString(BYTE *str, BYTE length)
115 {
116 1 BYTE i;
117 1 BYTE i_temp;
C51 COMPILER V7.20 VFDTASK 06/30/2005 14:02:58 PAGE 3
118 1 VFD_SendCmd(VFD_ADDRESS_INC);
119 1 CLEAR_VFD_CS;
120 1 Delay5US();
121 1 Delay5US();
122 1 VFD_SendByte(VFD_ADDRESS_MASK + 2);
123 1
124 1 for(i=0; i < length; i++)
125 1 {
126 2 i_temp = length - i - 1;
127 2 if((str[i] >= '0') && (str[i] <= '9'))
128 2 VFD_RAMData[i_temp] = NUMBER_DISPLAY[str[i] - '0'];
129 2 else if((str[i] >= 'A') && (str[i] <= 'Z'))
130 2 VFD_RAMData[i_temp] = LETTER_DISPLAY[str[i] - 'A'];
131 2 else if(str[i] == ' ')
132 2 VFD_RAMData[i_temp] = CHAR_;
133 2 else if(str[i] == '+')
134 2 VFD_RAMData[i_temp] = CHAR_PLUS;
135 2 else if(str[i] == '-')
136 2 VFD_RAMData[i_temp] = CHAR_MINUS;
137 2 }
138 1 for(i=0; i < length; i++)
139 1 {
140 2 VFD_SendByte(LowByte(VFD_RAMData[i]));
141 2 VFD_SendByte(HighByte(VFD_RAMData[i]));
142 2 }
143 1 Delay5US();
144 1 Delay5US();
145 1 SET_VFD_CS;
146 1
147 1 }
148
149 WORD Idempotent(BYTE n)
150 {
151 1 if(n > 4)
152 1 return 1;
153 1 else
154 1 {
155 2 switch (n)
156 2 {
157 3 case 4:
158 3 return 10000;
159 3 break;
160 3
161 3 case 3:
162 3 return 1000;
163 3 break;
164 3
165 3 case 2:
166 3 return 100;
167 3 break;
168 3
169 3 case 1:
170 3 return 10;
171 3 break;
172 3 case 0:
173 3 return 1;
174 3 break;
175 3 }
176 2 }
177 1 }
178 void VFD_DisplayNumber(WORD Number, BYTE Need_Dot_On, BYTE Other_to_Zero)
179 {
C51 COMPILER V7.20 VFDTASK 06/30/2005 14:02:58 PAGE 4
180 1 BYTE i;
181 1 BYTE i_temp;
182 1 BYTE Number_temp;
183 1 BYTE Zero_Display;
184 1 BYTE length;
185 1
186 1 if(Number >= 10000)
187 1 length = 5;
188 1 else if(Number >= 1000)
189 1 length = 4;
190 1 else if(Number >= 100)
191 1 length = 3;
192 1 else if(Number >= 10)
193 1 length = 2;
194 1 else
195 1 length = 1;
196 1 Zero_Display = 0;
197 1 VFD_SendCmd(VFD_ADDRESS_INC);
198 1 CLEAR_VFD_CS;
199 1 Delay5US();
200 1 VFD_SendByte(VFD_ADDRESS_MASK + 2);
201 1
202 1 if(Number < 10)
203 1 Zero_Display = 1;
204 1
205 1 for(i=0; i < length; i++)
206 1 {
207 2 i_temp = length -1 - i;
208 2 Number_temp = Number/Idempotent(i_temp);
209 2 if(Number_temp > 0)
210 2 Zero_Display = 1;
211 2 Number %= Idempotent(i_temp);
212 2 if(( Number_temp > 0) && ( Number_temp <= 9))
213 2 VFD_RAMData[i_temp] = NUMBER_DISPLAY[Number_temp];
214 2 else
215 2 {
216 3 if(Zero_Display == 1)
217 3 VFD_RAMData[i_temp] = NUMBER_DISPLAY[0];
218 3 else
219 3 VFD_RAMData[i_temp] = CHAR_;
220 3 }
221 2 }
222 1 for(i=0; i < length; i++)
223 1 {
224 2 if((length > 1) && (i == 1))
225 2 {
226 3 if(Need_Dot_On == 1)
227 3 VFD_RAMData[i] |= 0x8000;
228 3
229 3 }
230 2 VFD_SendByte(LowByte(VFD_RAMData[i]));
231 2 VFD_SendByte(HighByte(VFD_RAMData[i]));
232 2
233 2
234 2 }
235 1 if( Other_to_Zero == 1)
236 1 {
237 2 for(i=length; i < 5; i++)
238 2 {
239 3 VFD_SendByte(0);
240 3 VFD_SendByte(0);
241 3 }
C51 COMPILER V7.20 VFDTASK 06/30/2005 14:02:58 PAGE 5
242 2 }
243 1 Delay5US();
244 1 SET_VFD_CS;
245 1
246 1 }
247
248 /*===================================================================
249 描述: 将要显示的内容拷贝到BUFFER中, 内容长度=Grid_Size
250 参数: VFD_MSG *msg, 指向VFD_MSG结构常量的指针,包括长度和消息字符
251 返回: 无
252 ===================================================================*/
253 void VFD_WriteLedPort(BYTE LedPort)
254 {
255 1 CLEAR_VFD_CS;
256 1 Delay5US();
257 1 Delay5US();
258 1 VFD_SendByte(VFD_WRITE_LED);
259 1 VFD_SendByte(LedPort);
260 1 Delay5US();
261 1 Delay5US();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -