📄 test_osd.lst
字号:
C51 COMPILER V8.01 TEST_OSD 06/12/2006 14:46:40 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE TEST_OSD
OBJECT MODULE PLACED IN .\output\test_osd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\test_osd.c ROM(COMPACT) BROWSE ORDER INCDIR(.\Head) DEBUG OBJECTEXTEND
-PRINT(.\output\test_osd.lst) TABS(8) OBJECT(.\output\test_osd.obj)
line level source
1 //==============================
2 //FileName=test_osd.c
3 //Date=20060518
4 //==============================
5 #include<SST89x5x4.H>
6 #include<string.h>
7 #include"public.h"
8 #include"test_osd.h"
9 #include"delay_s.h"
10 #include"upd6464a.h"
11 #include"menu.h"
12
13 uchar data disp_buff[25];
14 uchar data len;
15 uchar data tmp;
16 uchar data i;
17 uchar data j;
18
19 uchar doom_id;
20 uchar protocol;
21 uchar baud;
22 uint s_id;
23
24
25 void main(void)
26 {
27 1 EA =0;
28 1 for(i=0; i<5; i++)
29 1 {
30 2 LED_OFF;
31 2 delay_x250ms(3);
32 2 LED_ON;
33 2 delay_x250ms(3);
34 2 }
35 1
36 1 init_upd6464a();
37 1 /*
38 1 tmp =upd6464a_get_disp_code('A');
39 1 upd6464A_write_addr_control(0,0);
40 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, &tmp, 1);
41 1 delay_x250ms(4);
42 1
43 1
44 1 tmp =upd6464a_get_disp_code('B');
45 1 upd6464A_write_addr_control(0,1);
46 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, &tmp, 1);
47 1 delay_x250ms(4);
48 1
49 1 tmp =upd6464a_get_disp_code('Z');
50 1 upd6464A_write_addr_control(0,23);
51 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, &tmp, 1);
52 1 delay_x250ms(4);
53 1 */
54 1 memset(disp_buff,0,sizeof(disp_buff));
C51 COMPILER V8.01 TEST_OSD 06/12/2006 14:46:40 PAGE 2
55 1 memcpy(disp_buff,"123456789012345678901234",CONST_COLUMN_NUMBER_MAX);
56 1 for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
57 1 {
58 2 disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
59 2 }
60 1 upd6464A_write_addr_control(0,0);
61 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
62 1
63 1 memset(disp_buff,0,sizeof(disp_buff));
64 1 memcpy(disp_buff,"abcdefghijklmnopqrstuvwx",CONST_COLUMN_NUMBER_MAX);
65 1 for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
66 1 {
67 2 disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
68 2 }
69 1 upd6464A_write_addr_control(1,0);
70 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
71 1
72 1
73 1 memset(disp_buff,0,sizeof(disp_buff));
74 1 memcpy(disp_buff,"yzABCDEFGHIJKLMNOPQRSTUV",CONST_COLUMN_NUMBER_MAX);
75 1 for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
76 1 {
77 2 disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
78 2 }
79 1 upd6464A_write_addr_control(2,0);
80 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
81 1
82 1
83 1 memset(disp_buff,0,sizeof(disp_buff));
84 1 memcpy(disp_buff,"WXYZ><-,. ;/\x80\x81\x82\x83\x84XYYYYYZ",CONST_COLUMN_NUMBER_MAX);
85 1 for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
86 1 {
87 2 disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
88 2 }
89 1 upd6464A_write_addr_control(3,0);
90 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
91 1
92 1
93 1 for(j=0; j<7; j++)
94 1 {
95 2 memset(disp_buff,0,sizeof(disp_buff));
96 2 memcpy(disp_buff,"123456789012345678901234",CONST_COLUMN_NUMBER_MAX);
97 2 for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
98 2 {
99 3 disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
100 3 }
101 2 upd6464A_write_addr_control(4+j,0);
102 2 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
103 2 }
104 1
105 1
106 1 memset(disp_buff,0,sizeof(disp_buff));
107 1 memcpy(disp_buff,"abcdefghijklmnopqrstuvwx",CONST_COLUMN_NUMBER_MAX);
108 1 for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
109 1 {
110 2 disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
111 2 }
112 1 upd6464A_write_addr_control(11,0);
113 1 upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
114 1 //======================================================================================================
115 1 delay_x250ms(8);
116 1 upd6464a_video_clr_ram();
C51 COMPILER V8.01 TEST_OSD 06/12/2006 14:46:40 PAGE 3
117 1 upd6464A_display_control(UPD6464A_CMD_DISPLAY_DISP_ON, UPD6464A_CMD_DISPLAY_LC_ON, UPD6464A_CMD_DISPLAY_N
-O_BLINK);
118 1
119 1 doom_id =1;
120 1 protocol=0;
121 1 baud =1;
122 1 s_id =12345;
123 1 disp_init_menu();
124 1
125 1 delay_x250ms(12);
126 1
127 1 while(1);
128 1 }
129
130
131 //字符芯片的初始化
132 void init_upd6464a(void)
133 {
134 1 uchar i;
135 1 P1 =0xff;
136 1
137 1 //内部清除,设置显示模式
138 1 upd6464a_video_clr_ram();
139 1 upd6464A_display_control(UPD6464A_CMD_DISPLAY_DISP_ON, UPD6464A_CMD_DISPLAY_LC_ON, UPD6464A_CMD_DISPLAY_N
-O_BLINK);
140 1
141 1 //设置PAL制
142 1 upd6464A_format_mode_control(UPD6464A_CMD_VSM_PAL);
143 1 //设置NTSC制:如果选择内同步则输出图象不稳定(无法同步)
144 1 // 如果选择外同步则输出图象稳定,但是字符显示缺少!
145 1 //说明芯片外部17.734MHz晶振和LC振荡决定了芯片只能使用PAL制!
146 1 //upd6464A_format_mode_control(UPD6464A_CMD_VSM_NTSC);
147 1
148 1 //设置显示字符块的原点
149 1 //这里的原点需要根据upd6464a外部的晶振以及显示的实际情况进行调试
150 1 //以所有字符都显示在屏幕的中央为合适!
151 1 //测试后: x差2大约1个字符的宽度
152 1 // y差1大约半个字符的高度
153 1 upd6464A_disp_position_control(8,5);
154 1
155 1 //设置视频模式和前景、后景
156 1 //现在是蓝色背景白色字符显示,芯片产生视频信号
157 1 //upd6464A_osc_mode_control(UPD6464A_CMD_OSC_ON,UPD6464A_CMD_VS_MODE_INTERNAL);
158 1 //upd6464A_internal_color_control(UPD6464A_CMD_COLOR_BLUE);
159 1 //现在是相机图象为背景,黑色字符显示,芯片 不 产生视频信号
160 1 //本模式下:如果要禁止字符的叠加输出,则通过upd6464A_display_control()将显示关闭即可!
161 1 // 如果不加外部视频,则没有图象输出!
162 1 upd6464A_osc_mode_control(UPD6464A_CMD_OSC_ON,UPD6464A_CMD_VS_MODE_EXTERNAL);
163 1 //upd6464A_internal_color_control(UPD6464A_CMD_COLOR_BLUE);
164 1 upd6464A_internal_color_control(UPD6464A_CMD_COLOR_WHITE);
165 1
166 1 //后景蓝色,显示字体是白色(内部视频输出的时候)
167 1 //后景蓝色,显示字体是黑色(外部视频输出的时候)
168 1 //upd6464A_background_control(UPD6464A_CMD_BACKGROUND_NO);
169 1 //字体具有黑色勾边(内部视频输出的时候)
170 1 //后景外部图象,显示字体是白色的(外部视频输出的时候)
171 1 upd6464A_background_control(UPD6464A_CMD_BACKGROUND_BLACK_FRAMING);
172 1 //字体具有黑色背景(内部视频输出的时候)
173 1 ////后景蓝色,显示字体是黑底白字(外部视频输出的时候)
174 1 //upd6464A_background_control(UPD6464A_CMD_BACKGROUND_BLACK_FILLING);
175 1 //除了字符显示区的前景是蓝色外,显示字符是黑底白字(内部视频输出的时候)
176 1 //显示底色是黑色,导致黑屏(外部视频输出的时候)
C51 COMPILER V8.01 TEST_OSD 06/12/2006 14:46:40 PAGE 4
177 1 //upd6464A_background_control(UPD6464A_CMD_BACKGROUND_BLACK_ON_WHITE);
178 1
179 1 //外部振荡
180 1 //upd6464A_osc_method_control(UPD6464A_CMD_OSC_METHOD_Q);
181 1 //由于硬件和晶振都接上,两者没有明显差异
182 1 upd6464A_osc_method_control(UPD6464A_CMD_OSC_METHOD_4);
183 1
184 1 //视频输出幅度
185 1 //输出强度太大时,如果使用外部视频信号叠加则可能造成显示字符别扭,同步不稳定!
186 1 //upd6464A_output_level_control(UPD6464A_CMD_90_IRE,UPD6464A_CMD_2V_PP);
187 1 //字符颜色的浓度比上面浅一些
188 1 //1/2Vpp的幅度设置要求和信号输出以及接收者的输入相匹配!
189 1 upd6464A_output_level_control(UPD6464A_CMD_75_IRE,UPD6464A_CMD_1V_PP);
190 1
191 1 //字符尺寸
192 1 //测试后可知: 设置为UPD6464A_CMD_1_DOT,正好可以全屏显示12行*24列
193 1 // 说明全屏高度大致可以分为8*12=96(line unit),可以根据实际要显示的行数来设置字体的大小!
194 1 //字体的大小为UPD6464A_CMD_2_DOT时可以显示6行×14列
195 1 //芯片设置为PAL制,并且使用外同步后,pal制相机显示正常字符,NTSC制的相机显示的字符略高一些,
196 1 //所以造成最后一行显示一小半而已,所以做菜单如果兼容两种制式则应将行数限制在10行以下!
197 1 //补充的方法可以通过调节前面 upd6464A_disp_position_control()的参数完成,所有行的显示!
198 1 for(i=0; i<CONST_UPD6464A_CMD_WRITE_LINE_MAX+1; i++)
199 1 {
200 2 upd6464A_character_size_control(i, UPD6464A_CMD_1_DOT);
201 2 }
202 1 }
203
204 //End Of File
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 666 ----
CONSTANT SIZE = 100 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 34 1
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 + -