📄 upd6464a.lst
字号:
C51 COMPILER V7.50 UPD6464A 02/26/2009 08:55:32 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE UPD6464A
OBJECT MODULE PLACED IN upd6464a.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\upd6464a.c BROWSE DEBUG OBJECTEXTEND PRINT(.\upd6464a.lst) OBJECT(upd64
-64a.obj)
line level source
1 //==============================
2 //FileName=upd6464a.c
3 //Date=20060518
4 //==============================
5 #include"public.h"
*** WARNING C318 IN LINE 5 OF src\upd6464a.c: can't open file 'public.h'
6 #include"delay_s.h"
*** WARNING C318 IN LINE 6 OF src\upd6464a.c: can't open file 'delay_s.h'
7 #include"upd6464a.h"
*** WARNING C318 IN LINE 7 OF src\upd6464a.c: can't open file 'upd6464a.h'
8 #include<ctype.h>
9
10 //内部底层函数的说明
11 static void upd6464a_send_byte(uchar dat);
*** ERROR C141 IN LINE 11 OF SRC\UPD6464A.C: syntax error near 'dat', expected ')'
12 static void upd6464a_send_cmd_1byte(uchar s);
*** ERROR C141 IN LINE 12 OF SRC\UPD6464A.C: syntax error near 's', expected ')'
13 static void upd6464a_send_cmd_2byte(uchar s1, uchar s2);
*** ERROR C141 IN LINE 13 OF SRC\UPD6464A.C: syntax error near 's1', expected ')'
14 static void upd6464a_send_cmd_continue_2byte(uchar cmd_high, uchar *cmd_low, uchar cmd_len);
*** ERROR C141 IN LINE 14 OF SRC\UPD6464A.C: syntax error near 'cmd_high', expected ')'
15
16 //==============================
17 // 外部调用函数部分
18 //==============================
19 //0)将输入的ASCII码(包含一些自定义的特殊字符)转换为显示码
20 //注意: 大写字母'O'正常转换后对应的字符是白块!
21 uchar upd6464a_get_disp_code(uchar ascii)
*** ERROR C129 IN LINE 21 OF SRC\UPD6464A.C: missing ';' before 'upd6464a_get_disp_code'
22 {
23 if (isdigit(ascii)) return(ascii -'0');
24 else if(islower(ascii)) return(ascii -0x10);
25 else if(ascii =='O') return(0x5f); //'O'用'o'来替代显示!
26 else if(isupper(ascii)) return(ascii -'0');
27 else
28 {
29 switch(ascii)
30 {
31 case ':':
32 return(0x0a);
33
34 case '<':
35 return(0x0b);
36
37 case '>':
38 return(0x0c);
39
40 case '-':
41 return(0x0d);
42
43 case '.':
44 return(0x0e);
45
46 case ',':
C51 COMPILER V7.50 UPD6464A 02/26/2009 08:55:32 PAGE 2
47 return(0x0f);
48
49 case ' ':
50 return(0x10);
51
52 case '?':
53 return(0x50);
54
55 case ';':
56 return(0x6b);
57
58 case '/':
59 return(0x6d);
60
61 case CHAR_CA: //'x'
62 return(0x6c);
63
64 case CHAR_RIGHT: //以下四个是方向符号
65 return(0x3b);
66
67 case CHAR_LEFT:
68 return(0x3c);
69
70 case CHAR_UP:
71 return(0x3d);
72
73 case CHAR_DOWN:
74 return(0x3e);
75
76 default: //异常字符显示为空白
77 return(0x10);
78 }
79 }
80 }
81
82
83 //1-byte 命令部分
84 //1-1)清除RAM,执行后需要延时1ms
85 void upd6464a_video_clr_ram(void)
86 {
87 upd6464a_send_cmd_1byte(UPD6464A_CMD_VIDEO_RAM_CLR);
88 delay_x1ms(10);
89 }
90
91 //1-2)显示控制
92 //参数依次为: 显示,LC振荡,闪烁的设置
93 void upd6464A_display_control(uchar disp, uchar lc, uchar blink)
94 {
95 upd6464a_send_cmd_1byte(0x10 | ((disp &0x01)<<3) | ((lc &0x01)<<2) | (blink &0x03) );
96 }
97
98 //1-3)内部视频输出时的颜色控制,如果使用外部视频叠加则无效
99 void upd6464A_internal_color_control(uchar color)
100 { //输入大于等于4则只能是white
101 upd6464a_send_cmd_1byte(0x20 | (( ((color &0x07)<4) ?(color &0x03) :0x07) <<1) );
102 }
103
104 //1-4)背景控制
105 void upd6464A_background_control(uchar select_bg)
106 {
107 upd6464a_send_cmd_1byte(0x30 | ((select_bg&0x03)<<1) );
108 }
C51 COMPILER V7.50 UPD6464A 02/26/2009 08:55:32 PAGE 3
109
110 //1-5)晶振模式控制
111 void upd6464A_osc_mode_control(uchar osc, uchar vs_mode)
112 {
113 upd6464a_send_cmd_1byte(0x40 | ((vs_mode &0x01)<<2) | (osc &0x01) );
114 }
115
116 //1-6)视频分类模式控制
117 void upd6464A_format_mode_control(uchar format)
118 {
119 upd6464a_send_cmd_1byte(0x48 | ((format <4) ? (format &0x03) :0x04 ) );
120 }
121
122 //1-7)OSC振荡方式控制
123 void upd6464A_osc_method_control(uchar method)
124 {
125 upd6464a_send_cmd_1byte(0x50 | ((method &0x01) <<1) );
126 }
127
128 //2-byte命令部分
129 //2-1)显示位置的控制
130 //参数:
131 // x 水平方向离开左端的位置(0-31)
132 // y 垂直方向离开上端的位置(0-31)
133 void upd6464A_disp_position_control(uchar x, uchar y)
134 {
135 upd6464a_send_cmd_2byte(0x80 | ((y >>3) &0x03), ((y&0x07)<<5) |(x &0x1f) );
136 }
137
138 //2-2)写入OSD的RAM地址的控制
139 //参数:
140 // line 垂直方向行的位置(0-11)
141 // coloum 水平方向列的位置(0-23)
142 void upd6464A_write_addr_control(uchar line, uchar coloum)
143 {
144 upd6464a_send_cmd_2byte(0x88 | ((line >>3) &0x01), ((line <<5) &0xe0) |(coloum &0x1f) );
145 }
146
147 //2-3)输出信号幅度的控制
148 //参数:
149 // lum 字符控制(0/1 =75/90 I.R.E)
150 // level 信号幅度控制(0/1 =1/2v pp)
151 void upd6464A_output_level_control(uchar lum, uchar level)
152 {
153 upd6464a_send_cmd_2byte(0x90 | (level &0x01), 0x04 | ( ((lum &0x01)==0) ?0x01 :0x03 ) );
154 }
155
156 //2-4)显示字符尺寸的控制
157 //参数:
158 // high 字符高度(占的行数: 0...11)
159 // dot 线宽控制(0/1 =1/2点线宽)
160 void upd6464A_character_size_control(uchar high, uchar dot)
161 {
162 upd6464a_send_cmd_2byte(0x98, ((dot ==0) ?0x00:0x40) | (high %(CONST_UPD6464A_CMD_WRITE_LINE_MAX+1)) );
163 }
164
165 //2-byte连续命令部分
166 //3-1)显示字符写入的控制
167 //参数:
168 // blink =1 字符闪烁
169 // dat_str[] 输出的连续字符串
170 // len 输出的连续字符串的字节数
C51 COMPILER V7.50 UPD6464A 02/26/2009 08:55:32 PAGE 4
171 //执行此命令前必须打开LC振荡!
172 void upd6464A_character_display_control(uchar blink, uchar *dat_str, uchar len)
173 {
174 upd6464a_send_cmd_continue_2byte(0xc0 | ((blink &0x01)<<1), dat_str, len);
175 }
176
177 //==============================
178 // 底层函数部分
179 //==============================
180 //------------------------------
181 //字节的串行输出,最底层函数
182 //输入:
183 // dat 单字节
184 //输出:
185 // 无
186 //要求进入时的状态: CLK=1,CS=0
187 //退出时的状态: CLK=1,CS=0
188 //------------------------------
189 static void upd6464a_send_byte(uchar dat)
190 {
191 uchar i;
192 for(i=0;i<8;i++)
193 {
194 CLK_LOW; //clk为低时送数据,数据高位在前
195 if((dat & 0x80) ==0x80)
196 {
197 DAT_HIGH;
198 }
199 else
200 {
201 DAT_LOW;
202 }
203 delay_1ms();
204 CLK_HIGH;
205 dat <<=1;
206 }
207 delay_1ms();
208 }
209
210 //------------------------------
211 //1-byte 单字节命令的发送
212 //输入:
213 // s 单字节命令
214 //输出:
215 // 无
216 //------------------------------
217 void upd6464a_send_cmd_1byte(uchar s)
218 {
219 CS_LOW;
220 delay_1ms();
221
222 upd6464a_send_byte(s);
223
224 CS_HIGH;
225 delay_1ms();
226 delay_1ms();
227 }
228
229 //------------------------------
230 //2-byte 双字节命令的发送
231 //输入:
232 // s1 双字节命令的高字节
C51 COMPILER V7.50 UPD6464A 02/26/2009 08:55:32 PAGE 5
233 // s2 双字节命令的低字节
234 //输出:
235 // 无
236 //------------------------------
237 void upd6464a_send_cmd_2byte(uchar s1, uchar s2)
238 {
239 CS_LOW;
240 delay_1ms();
241
242 upd6464a_send_byte(s1);
243 upd6464a_send_byte(s2);
244
245 CS_HIGH;
246 delay_1ms();
247 delay_1ms();
248 }
249
250
251 //------------------------------
252 //2-byte continue 双字节连续命令的发送
253 //输入:
254 // cmd_high 双字节连续命令的起始字节
255 // cmd_low[] 双字节连续命令的第二字节串
256 // cmd_len 双字节连续命令的第二字节串的字节长度(不包括结束标志字节)
257 //输出:
258 // 无
259 //------------------------------
260 void upd6464a_send_cmd_continue_2byte(uchar cmd_high, uchar *cmd_low, uchar cmd_len)
261 {
262 uchar j;
263
264 CS_LOW;
265 delay_1ms();
266
267 upd6464a_send_byte(cmd_high);
268 delay_1ms();
269 for(j=0; j<cmd_len; j++)
270 { //进行字符值得限制
271 upd6464a_send_byte(cmd_low[j] &0x7f);
272 }
273 upd6464a_send_byte(CONST_UPD6464A_CMD_CONTINUE_END);
274
275 CS_HIGH;
276 delay_1ms();
277 delay_1ms();
278 }
279
280
281 //End Of File
C51 COMPILATION COMPLETE. 3 WARNING(S), 5 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -