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

📄 test_osd.lst

📁 这是一个对OSD芯片upd6464A操作的接口测试程序,使用KC51编译
💻 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 + -