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