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

📄 upd6464a.lst

📁 这是一个对OSD芯片upd6464A操作的接口测试程序,使用KC51编译
💻 LST
字号:
C51 COMPILER V8.01   UPD6464A                                                              06/12/2006 14:33:13 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE UPD6464A
OBJECT MODULE PLACED IN .\output\upd6464a.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\upd6464a.c ROM(COMPACT) BROWSE ORDER INCDIR(.\Head) DEBUG OBJECTEXTEND 
                    -PRINT(.\output\upd6464a.lst) TABS(8) 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 V8.01   UPD6464A                                                              06/12/2006 14:33:13 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 V8.01   UPD6464A                                                              06/12/2006 14:33:13 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 V8.01   UPD6464A                                                              06/12/2006 14:33:13 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 data 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                      _nop_();_nop_();_nop_();
 204   2                      _nop_();_nop_();_nop_();
 205   2                      CLK_HIGH;
 206   2                      dat <<=1;
 207   2              }
 208   1              _nop_();_nop_();_nop_();
 209   1              _nop_();_nop_();_nop_();
 210   1      }
 211          
 212          //------------------------------
 213          //1-byte 单字节命令的发送
 214          //输入:
 215          //      s       单字节命令
 216          //输出:
 217          //      无
 218          //------------------------------
 219          void upd6464a_send_cmd_1byte(uchar s)
 220          {
 221   1              CS_LOW;
 222   1              _nop_();_nop_();
 223   1              _nop_();_nop_();
 224   1      
 225   1              upd6464a_send_byte(s);
 226   1                      
 227   1              CS_HIGH;
 228   1              _nop_();_nop_();
 229   1              _nop_();_nop_();
 230   1              _nop_();_nop_();
 231   1              _nop_();_nop_();
 232   1      }
 233          
 234          //------------------------------
 235          //2-byte 双字节命令的发送
 236          //输入:
 237          //      s1      双字节命令的高字节
 238          //      s2      双字节命令的低字节
 239          //输出:
 240          //      无
C51 COMPILER V8.01   UPD6464A                                                              06/12/2006 14:33:13 PAGE 5   

 241          //------------------------------
 242          void upd6464a_send_cmd_2byte(uchar s1, uchar s2)
 243          {
 244   1              CS_LOW;
 245   1              _nop_();_nop_();
 246   1              _nop_();_nop_();
 247   1      
 248   1              upd6464a_send_byte(s1);
 249   1              upd6464a_send_byte(s2);
 250   1              
 251   1              CS_HIGH;
 252   1              _nop_();_nop_();
 253   1              _nop_();_nop_();
 254   1              _nop_();_nop_();
 255   1              _nop_();_nop_();
 256   1      }
 257          
 258          
 259          //------------------------------
 260          //2-byte continue 双字节连续命令的发送
 261          //输入:
 262          //      cmd_high        双字节连续命令的起始字节
 263          //      cmd_low[]       双字节连续命令的第二字节串
 264          //      cmd_len         双字节连续命令的第二字节串的字节长度(不包括结束标志字节)
 265          //输出:
 266          //      无
 267          //------------------------------
 268          void upd6464a_send_cmd_continue_2byte(uchar cmd_high, uchar *cmd_low, uchar cmd_len)
 269          {
 270   1      uchar data j;
 271   1      
 272   1              CS_LOW;
 273   1              _nop_();_nop_();
 274   1              _nop_();_nop_();
 275   1      
 276   1              upd6464a_send_byte(cmd_high);
 277   1              _nop_();_nop_();
 278   1              _nop_();_nop_();
 279   1              for(j=0; j<cmd_len; j++)
 280   1              {       //进行字符值得限制
 281   2                      upd6464a_send_byte(cmd_low[j] &0x7f);
 282   2              }       
 283   1              upd6464a_send_byte(CONST_UPD6464A_CMD_CONTINUE_END);
 284   1              
 285   1              CS_HIGH;
 286   1              _nop_();_nop_();
 287   1              _nop_();_nop_();
 288   1              _nop_();_nop_();
 289   1              _nop_();_nop_();
 290   1      }
 291          
 292          
 293          //End Of File


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    528    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.01   UPD6464A                                                              06/12/2006 14:33:13 PAGE 6   

   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 + -