⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_osd.lst

📁 用upd6464 给TV信号 加叠加字符
💻 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 + -