📄 upd6464a.lst
字号:
C51 COMPILER V8.01 UPD6464A 06/12/2006 14:33:13 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE UPD6464A
OBJECT MODULE PLACED IN .\output\upd6464a.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\upd6464a.c ROM(COMPACT) BROWSE ORDER INCDIR(.\Head) DEBUG OBJECTEXTEND
-PRINT(.\output\upd6464a.lst) TABS(8) OBJECT(.\output\upd6464a.obj)
line level source
1 //==============================
2 //FileName=upd6464a.c
3 //Date=20060518
4 //==============================
5 #include"public.h"
6 #include"delay_s.h"
7 #include"upd6464a.h"
8 #include<ctype.h>
9
10 //内部底层函数的说明
11 static void upd6464a_send_byte(uchar dat);
12 static void upd6464a_send_cmd_1byte(uchar s);
13 static void upd6464a_send_cmd_2byte(uchar s1, uchar s2);
14 static void upd6464a_send_cmd_continue_2byte(uchar cmd_high, uchar *cmd_low, uchar cmd_len);
15
16 //==============================
17 // 外部调用函数部分
18 //==============================
19 //0)将输入的ASCII码(包含一些自定义的特殊字符)转换为显示码
20 //注意: 大写字母'O'正常转换后对应的字符是白块!
21 uchar upd6464a_get_disp_code(uchar ascii)
22 {
23 1 if (isdigit(ascii)) return(ascii -'0');
24 1 else if(islower(ascii)) return(ascii -0x10);
25 1 else if(ascii =='O') return(0x5f); //'O'用'o'来替代显示!
26 1 else if(isupper(ascii)) return(ascii -'0');
27 1 else
28 1 {
29 2 switch(ascii)
30 2 {
31 3 case ':':
32 3 return(0x0a);
33 3
34 3 case '<':
35 3 return(0x0b);
36 3
37 3 case '>':
38 3 return(0x0c);
39 3
40 3 case '-':
41 3 return(0x0d);
42 3
43 3 case '.':
44 3 return(0x0e);
45 3
46 3 case ',':
47 3 return(0x0f);
48 3
49 3 case ' ':
50 3 return(0x10);
51 3
52 3 case '?':
53 3 return(0x50);
54 3
C51 COMPILER V8.01 UPD6464A 06/12/2006 14:33:13 PAGE 2
55 3 case ';':
56 3 return(0x6b);
57 3
58 3 case '/':
59 3 return(0x6d);
60 3
61 3 case CHAR_CA: //'x'
62 3 return(0x6c);
63 3
64 3 case CHAR_RIGHT: //以下四个是方向符号
65 3 return(0x3b);
66 3
67 3 case CHAR_LEFT:
68 3 return(0x3c);
69 3
70 3 case CHAR_UP:
71 3 return(0x3d);
72 3
73 3 case CHAR_DOWN:
74 3 return(0x3e);
75 3
76 3 default: //异常字符显示为空白
77 3 return(0x10);
78 3 }
79 2 }
80 1 }
81
82
83 //1-byte 命令部分
84 //1-1)清除RAM,执行后需要延时1ms
85 void upd6464a_video_clr_ram(void)
86 {
87 1 upd6464a_send_cmd_1byte(UPD6464A_CMD_VIDEO_RAM_CLR);
88 1 delay_x1ms(10);
89 1 }
90
91 //1-2)显示控制
92 //参数依次为: 显示,LC振荡,闪烁的设置
93 void upd6464A_display_control(uchar disp, uchar lc, uchar blink)
94 {
95 1 upd6464a_send_cmd_1byte(0x10 | ((disp &0x01)<<3) | ((lc &0x01)<<2) | (blink &0x03) );
96 1 }
97
98 //1-3)内部视频输出时的颜色控制,如果使用外部视频叠加则无效
99 void upd6464A_internal_color_control(uchar color)
100 { //输入大于等于4则只能是white
101 1 upd6464a_send_cmd_1byte(0x20 | (( ((color &0x07)<4) ?(color &0x03) :0x07) <<1) );
102 1 }
103
104 //1-4)背景控制
105 void upd6464A_background_control(uchar select_bg)
106 {
107 1 upd6464a_send_cmd_1byte(0x30 | ((select_bg&0x03)<<1) );
108 1 }
109
110 //1-5)晶振模式控制
111 void upd6464A_osc_mode_control(uchar osc, uchar vs_mode)
112 {
113 1 upd6464a_send_cmd_1byte(0x40 | ((vs_mode &0x01)<<2) | (osc &0x01) );
114 1 }
115
116 //1-6)视频分类模式控制
C51 COMPILER V8.01 UPD6464A 06/12/2006 14:33:13 PAGE 3
117 void upd6464A_format_mode_control(uchar format)
118 {
119 1 upd6464a_send_cmd_1byte(0x48 | ((format <4) ? (format &0x03) :0x04 ) );
120 1 }
121
122 //1-7)OSC振荡方式控制
123 void upd6464A_osc_method_control(uchar method)
124 {
125 1 upd6464a_send_cmd_1byte(0x50 | ((method &0x01) <<1) );
126 1 }
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 1 upd6464a_send_cmd_2byte(0x80 | ((y >>3) &0x03), ((y&0x07)<<5) |(x &0x1f) );
136 1 }
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 1 upd6464a_send_cmd_2byte(0x88 | ((line >>3) &0x01), ((line <<5) &0xe0) |(coloum &0x1f) );
145 1 }
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 1 upd6464a_send_cmd_2byte(0x90 | (level &0x01), 0x04 | ( ((lum &0x01)==0) ?0x01 :0x03 ) );
154 1 }
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 1 upd6464a_send_cmd_2byte(0x98, ((dot ==0) ?0x00:0x40) | (high %(CONST_UPD6464A_CMD_WRITE_LINE_MAX+1)) );
163 1 }
164
165 //2-byte连续命令部分
166 //3-1)显示字符写入的控制
167 //参数:
168 // blink =1 字符闪烁
169 // dat_str[] 输出的连续字符串
170 // len 输出的连续字符串的字节数
171 //执行此命令前必须打开LC振荡!
172 void upd6464A_character_display_control(uchar blink, uchar *dat_str, uchar len)
173 {
174 1 upd6464a_send_cmd_continue_2byte(0xc0 | ((blink &0x01)<<1), dat_str, len);
175 1 }
176
177 //==============================
178 // 底层函数部分
C51 COMPILER V8.01 UPD6464A 06/12/2006 14:33:13 PAGE 4
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 1 uchar data i;
192 1 for(i=0;i<8;i++)
193 1 {
194 2 CLK_LOW; //clk为低时送数据,数据高位在前
195 2 if((dat & 0x80) ==0x80)
196 2 {
197 3 DAT_HIGH;
198 3 }
199 2 else
200 2 {
201 3 DAT_LOW;
202 3 }
203 2 _nop_();_nop_();_nop_();
204 2 _nop_();_nop_();_nop_();
205 2 CLK_HIGH;
206 2 dat <<=1;
207 2 }
208 1 _nop_();_nop_();_nop_();
209 1 _nop_();_nop_();_nop_();
210 1 }
211
212 //------------------------------
213 //1-byte 单字节命令的发送
214 //输入:
215 // s 单字节命令
216 //输出:
217 // 无
218 //------------------------------
219 void upd6464a_send_cmd_1byte(uchar s)
220 {
221 1 CS_LOW;
222 1 _nop_();_nop_();
223 1 _nop_();_nop_();
224 1
225 1 upd6464a_send_byte(s);
226 1
227 1 CS_HIGH;
228 1 _nop_();_nop_();
229 1 _nop_();_nop_();
230 1 _nop_();_nop_();
231 1 _nop_();_nop_();
232 1 }
233
234 //------------------------------
235 //2-byte 双字节命令的发送
236 //输入:
237 // s1 双字节命令的高字节
238 // s2 双字节命令的低字节
239 //输出:
240 // 无
C51 COMPILER V8.01 UPD6464A 06/12/2006 14:33:13 PAGE 5
241 //------------------------------
242 void upd6464a_send_cmd_2byte(uchar s1, uchar s2)
243 {
244 1 CS_LOW;
245 1 _nop_();_nop_();
246 1 _nop_();_nop_();
247 1
248 1 upd6464a_send_byte(s1);
249 1 upd6464a_send_byte(s2);
250 1
251 1 CS_HIGH;
252 1 _nop_();_nop_();
253 1 _nop_();_nop_();
254 1 _nop_();_nop_();
255 1 _nop_();_nop_();
256 1 }
257
258
259 //------------------------------
260 //2-byte continue 双字节连续命令的发送
261 //输入:
262 // cmd_high 双字节连续命令的起始字节
263 // cmd_low[] 双字节连续命令的第二字节串
264 // cmd_len 双字节连续命令的第二字节串的字节长度(不包括结束标志字节)
265 //输出:
266 // 无
267 //------------------------------
268 void upd6464a_send_cmd_continue_2byte(uchar cmd_high, uchar *cmd_low, uchar cmd_len)
269 {
270 1 uchar data j;
271 1
272 1 CS_LOW;
273 1 _nop_();_nop_();
274 1 _nop_();_nop_();
275 1
276 1 upd6464a_send_byte(cmd_high);
277 1 _nop_();_nop_();
278 1 _nop_();_nop_();
279 1 for(j=0; j<cmd_len; j++)
280 1 { //进行字符值得限制
281 2 upd6464a_send_byte(cmd_low[j] &0x7f);
282 2 }
283 1 upd6464a_send_byte(CONST_UPD6464A_CMD_CONTINUE_END);
284 1
285 1 CS_HIGH;
286 1 _nop_();_nop_();
287 1 _nop_();_nop_();
288 1 _nop_();_nop_();
289 1 _nop_();_nop_();
290 1 }
291
292
293 //End Of File
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 528 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
IDATA SIZE = ---- ----
C51 COMPILER V8.01 UPD6464A 06/12/2006 14:33:13 PAGE 6
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -