📄 upd6464a.lst
字号:
C51 COMPILER V7.50 UPD6464A 02/26/2009 08:58:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE UPD6464A
OBJECT MODULE PLACED IN .\output\upd6464a.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\upd6464a.c BROWSE ORDER INCDIR(.\Head) DEBUG OBJECTEXTEND PRINT(.\outpu
-t\upd6464a.lst) 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 V7.50 UPD6464A 02/26/2009 08:58:10 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 V7.50 UPD6464A 02/26/2009 08:58:10 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 V7.50 UPD6464A 02/26/2009 08:58:10 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 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 delay_1ms();
204 2 CLK_HIGH;
205 2 dat <<=1;
206 2 }
207 1 delay_1ms();
208 1 }
209
210 //------------------------------
211 //1-byte 单字节命令的发送
212 //输入:
213 // s 单字节命令
214 //输出:
215 // 无
216 //------------------------------
217 void upd6464a_send_cmd_1byte(uchar s)
218 {
219 1 CS_LOW;
220 1 delay_1ms();
221 1
222 1 upd6464a_send_byte(s);
223 1
224 1 CS_HIGH;
225 1 delay_1ms();
226 1 delay_1ms();
227 1 }
228
229 //------------------------------
230 //2-byte 双字节命令的发送
231 //输入:
232 // s1 双字节命令的高字节
233 // s2 双字节命令的低字节
234 //输出:
235 // 无
236 //------------------------------
237 void upd6464a_send_cmd_2byte(uchar s1, uchar s2)
238 {
239 1 CS_LOW;
240 1 delay_1ms();
C51 COMPILER V7.50 UPD6464A 02/26/2009 08:58:10 PAGE 5
241 1
242 1 upd6464a_send_byte(s1);
243 1 upd6464a_send_byte(s2);
244 1
245 1 CS_HIGH;
246 1 delay_1ms();
247 1 delay_1ms();
248 1 }
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 1 uchar j;
263 1
264 1 CS_LOW;
265 1 delay_1ms();
266 1
267 1 upd6464a_send_byte(cmd_high);
268 1 delay_1ms();
269 1 for(j=0; j<cmd_len; j++)
270 1 { //进行字符值得限制
271 2 upd6464a_send_byte(cmd_low[j] &0x7f);
272 2 }
273 1 upd6464a_send_byte(CONST_UPD6464A_CMD_CONTINUE_END);
274 1
275 1 CS_HIGH;
276 1 delay_1ms();
277 1 delay_1ms();
278 1 }
279
280
281 //End Of File
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 537 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
IDATA SIZE = ---- ----
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 + -