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

📄 ks0108.lst

📁 一个占用内存极少的菜单系统的实现
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE KS0108
OBJECT MODULE PLACED IN .\Obj\Ks0108.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Src\Ks0108.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\Lst\Ks0108.lst) OBJECT
                    -(.\Obj\Ks0108.obj)

stmt level    source

   1          /******************************************************************************
   2           * Ks0108.C - Ks0108 液晶控制器驱动程序
   3           *
   4           *
   5           * DESCRIPTION: -
   6           *
   7           * modification history
   8           * --------------------
   9           * 01a, 04/sep/2007, 梁炎昌 written
  10           * --------------------
  11           ******************************************************************************/
  12          
  13          #include "CPU.H"
  14          #include "Ks0108.H"
  15          #include "Chinese.C"
  16          #include "ASCII.c"
  17          
  18          
  19          
  20          //------------------------------------------------------------------------------------------
  21          
  22          /*
  23          -------------------------------------------------------------------------
  24          GUI相关全局变量
  25          -------------------------------------------------------------------------
  26          */
  27          U8  GUIEnFont = En_8x16;                //英文字体
  28          U8  GUITextMode = GUI_TEXTMODE_NORMAL;  //显示模式
  29          
  30          U8 Char_XSIZE;   //英文字体X宽度
  31          U8 Char_YSIZE;   //英文字体Y宽度
  32          
  33          U8 PosX = 0;     //当前系统X坐标
  34          U8 PosY = 0;     //当前系统Y坐标
  35          
  36          U8 NoXY = true;//是否使用PosX PosY的标志   1-->不使用   0-->使用
  37          
  38          
  39          // ---- 延迟程序 ----------------------------------------------------
  40          #if OSC_48MHZ == true
  41          
  42          #define SomeNop();      {               \
  43              _nop_(); _nop_(); _nop_(); _nop_(); \
  44              _nop_(); _nop_(); _nop_(); _nop_(); \
  45             }
  46          
  47          #elif OSC_24MHZ == true
              
              #define SomeNop();      {               \
                  _nop_(); _nop_(); _nop_(); _nop_(); \
                  }
              
              #endif
  54          
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 2   

  55          
  56          
  57          
  58          
  59          
  60          /*
  61          *****************************************************************************
  62          * WriteCommand_0108 - 写命令到KS0108
  63          * DESCRIPTION: -
  64          * 本函数不接管片选信号
  65          * @Param CmdData:命令码
  66          * @Return :
  67          * ----
  68          *****************************************************************************
  69          */
  70          void WriteCommand_0108(U8 CmdData)
  71          {
  72   1          LCD_E = 0;
  73   1          LCD_RS = 0;
  74   1          LCD_RW = 0;
  75   1          LCD_Bus = CmdData;
  76   1          SomeNop();
  77   1          LCD_E = 1;
  78   1          SomeNop();
  79   1          LCD_E = 0;
  80   1      
  81   1      }
  82          
  83          
  84          /*
  85          *****************************************************************************
  86          * WriteData_0108 - 写数据到KS0108
  87          * DESCRIPTION: -
  88          * 本函数不接管片选信号
  89          * @Param Data:写入的数据
  90          * @Return :
  91          * ----
  92          *****************************************************************************
  93          */
  94          void WriteData_0108(U8 Data)
  95          {
  96   1          LCD_E = 0;
  97   1          LCD_RS = 1;
  98   1          LCD_RW = 0;
  99   1          LCD_Bus = Data;
 100   1          SomeNop();
 101   1          LCD_E = 1;
 102   1          SomeNop();
 103   1          LCD_E = 0;
 104   1      
 105   1      }
 106          /*-------------------读LCD数据----------------------------*/
 107          #if 0
              U8 ReadData_0108(void)
              {   U8 Temp;
                  LCD_Bus = 0xFF;//切换成输入
                  LCD_RS = 1;
                  LCD_RW = 1;
                  SomeNop();
                  LCD_E = 1;
                  SomeNop();
                  Temp = LCD_Bus;
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 3   

                  return(Temp);
              /*
                  U8 Temp;
                  PIN_KS0108_Di_HIGH;
                  PIN_KS0108_RW_HIGH;
                  DelayS(0);
                  PIN_KS0108_Enable_HIGH;
                  DelayS(0);
                  PIN_KS0108_Enable_LOW;
                  Temp = PIN_KS0108_Lcd_InBus;
                  return (Temp);
              */
              }
              
              U8 ReadState_0108(void)
              {
                  U8 Temp;
                  LCD_Bus = 0xFF;
                  LCD_RS = 0;
                  LCD_RW = 1;
                  SomeNop();
                  LCD_E = 1;
                  SomeNop();
                  LCD_E = 0;
                  Temp = LCD_Bus;
                  return (Temp);
              
              
              }
              
              U8 Busy(void)
              {
                  U16 TimeOut;
                  U8 Flag;
                  TimeOut = 200;
                  do{
                      Flag = ReadState_0108();
                      LED1 ^= 0x01;
                      if (TimeOut-- == 0){
                          return 0;
                      }
                  }while(Flag &0x80);
                  return 1;
              }
              #endif
 162          //Option = 1   --->Disp On
 163          //Option = 0   --->Disp Off
 164          void KS0108_DisplayOn(U8 Option)
 165          {
 166   1          if (Option == 1) {
 167   2              WriteCommand_0108(Ks0108_CMD_Disp_ON);
 168   2          }else{
 169   2              WriteCommand_0108(Ks0108_CMD_Disp_OFF);
 170   2          }
 171   1      }
 172          
 173          void KS0108_SetStartRow(U8 Row)
 174          {
 175   1          WriteCommand_0108(Ks0108_CMD_Disp_Start_Line + Row);
 176   1      }
 177          /*
 178          *****************************************************************************
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 4   

 179          * Display_Locate - LCD上指定位置 显示指定数据
 180          * DESCRIPTION: -
 181          *
 182          * @Param x0:0--191横向坐标
 183          * @Param y0:0--7  纵向坐标
 184          * @Param DisplayData:写入的数据
 185          * @Return :
 186          * ----
 187          *****************************************************************************
 188          */
 189          void Display_Locate(U8 DisplayData, U8 x0, U8 y0)
 190          {
 191   1          if ((x0 <= (LCD_XSIZE-1))&(y0 <= (LCD_YSIZE-1))){
 192   2              if (x0 <= 63){                                //0--191
 193   3                  LCD_CSA();
 194   3      //            Busy();//判忙
 195   3                  WriteCommand_0108(Ks0108_CMD_Set_Addr + x0);
 196   3              } else if (x0 <= 127){
 197   3                  LCD_CSB();
 198   3      //            Busy();//判忙
 199   3                  WriteCommand_0108(Ks0108_CMD_Set_Addr + x0 - 64);
 200   3              } else if (x0 <= 191){
 201   3                  LCD_CSC();
 202   3      //            Busy();//判忙
 203   3                  WriteCommand_0108(Ks0108_CMD_Set_Addr + x0 -128);
 204   3              }
 205   2      //        Busy();//判忙
 206   2              WriteCommand_0108(y0 + Ks0108_CMD_Set_Page);   //0--7
 207   2      //        Busy();//判忙
 208   2              WriteData_0108(DisplayData);
 209   2              LCD_CS_None();//不再片选任何一个Ks0108
 210   2          }
 211   1      }
 212          
 213          
 214          /*
 215          *****************************************************************************
 216          * Display_Clear - 清空LCD显示
 217          * DESCRIPTION: -
 218          *
 219          * @Param void:
 220          * @Return :
 221          * ----
 222          *****************************************************************************
 223          */
 224          void Display_Clear(void)
 225          {
 226   1          U8 j,k;
 227   1      //--------------------------------------
 228   1          LCD_CSA();
 229   1          for(k = 0; k < 8; k++){
 230   2              WriteCommand_0108(0 + Ks0108_CMD_Set_Addr); //0--7
 231   2              WriteCommand_0108(k + Ks0108_CMD_Set_Page); //0--63
 232   2              for(j = 0;j < 64;j++){
 233   3                  WriteData_0108(0x00);
 234   3              }
 235   2          }
 236   1          KS0108_SetStartRow(0);
 237   1      //--------------------------------------
 238   1          LCD_CSB();
 239   1          for(k = 0; k < 8; k++){
 240   2              WriteCommand_0108(0 + Ks0108_CMD_Set_Addr); //0--7
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 5   

 241   2              WriteCommand_0108(k + Ks0108_CMD_Set_Page); //0--63
 242   2              for(j = 0;j < 64;j++){
 243   3                  WriteData_0108(0x00);
 244   3              }
 245   2          }
 246   1          KS0108_SetStartRow(0);
 247   1      //-------------------------------------
 248   1          LCD_CSC();
 249   1          for(k = 0; k < 8; k++){
 250   2              WriteCommand_0108(0 + Ks0108_CMD_Set_Addr);//0--7
 251   2              WriteCommand_0108(k + Ks0108_CMD_Set_Page);//0-63
 252   2              for(j = 0;j < 64;j++){
 253   3                  WriteData_0108(0x00);
 254   3              }
 255   2          }
 256   1          KS0108_SetStartRow(0);
 257   1      //-------------------------------------
 258   1          LCD_CS_None();
 259   1      }
 260          
 261          
 262          /*
 263          *****************************************************************************
 264          * Display_Init - 初始化LCD
 265          * DESCRIPTION: -
 266          *
 267          * @Param void:
 268          * @Return :
 269          * ----
 270          *****************************************************************************
 271          */
 272          void Display_Init(void)
 273          {
 274   1      //---------------------------
 275   1          LCD_CSA();
 276   1          KS0108_DisplayOn(0);
 277   1          KS0108_SetStartRow(0);
 278   1          KS0108_DisplayOn(1);
 279   1      //---------------------------
 280   1          LCD_CSB();
 281   1          KS0108_DisplayOn(0);
 282   1          KS0108_SetStartRow(0);
 283   1          KS0108_DisplayOn(1);
 284   1      //---------------------------
 285   1          LCD_CSC();
 286   1          KS0108_DisplayOn(0);
 287   1          KS0108_SetStartRow(0);
 288   1          KS0108_DisplayOn(1);
 289   1      //---------------------------
 290   1          LCD_CS_None();
 291   1      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -