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

📄 lcd_12864.lst

📁 1. UC/OS 8051中完全应用。 2. 显示各个任务的执行时间, 执行时间占总时间百分比, tick计数器 3.任务中信号量,消息以及消息队列的使用。 我自己仔细测试过了
💻 LST
字号:
C51 COMPILER V8.08   LCD_12864                                                             08/19/2008 10:59:11 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LCD_12864
OBJECT MODULE PLACED IN .\obj\LCD_12864.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE driver\lcd\LCD_12864.C LARGE OBJECTADVANCED BROWSE DEBUG PRINT(.\lst\LCD_12
                    -864.lst) OBJECT(.\obj\LCD_12864.obj)

line level    source

   1          #define ASCII_LIB_GLOBLE
   2          #include <stdarg.h>
   3          #include <string.h>
   4          #include <stdlib.h>
   5          
   6          #include "ascii.h"
   7          #include "..\..\Source\includes.h"
   8          #include "..\c51.h"
   9          sbit  P1_7    =   P1^7;
  10          sbit  P1_6    =   P1^6;
  11          sbit  P1_5    =   P1^5;
  12          sbit  P1_4    =   P1^4;
  13          sbit  P1_3    =   P1^3;
  14          sbit  P1_2    =   P1^2;
  15          sbit  P1_1    =   P1^1;
  16          sbit  P1_0    =   P1^0;
  17          
  18          sbit  P3_7    =   P3^7;
  19          sbit  P3_6    =   P3^6;
  20          sbit  P3_5    =   P3^5;
  21          sbit  P3_4    =   P3^4;
  22          sbit  P3_3    =   P3^3;
  23          sbit  P3_2    =   P3^2;
  24          sbit  P3_1    =   P3^1;
  25          sbit  P3_0    =   P3^0;
  26          
  27          #define Selcom (P3_2=1)
  28          #define Seldata (P3_2=0)
  29          #define WR_H (P3_4=1)
  30          #define WR_L (P3_4=0)
  31          
  32          #define RD_H (P3_3=1)
  33          #define RD_L (P3_3=0)
  34          
  35          
  36          
  37          #define  LCD_CUR_POS            0x21    /* 光标位置设置(只有设置到有效显示地址并打开显示时才看到) */
  38          #define  LCD_CGR_POS            0x22    /* CGRAM偏置地址设置(可以增加自已的符号) */
  39          #define  LCD_ADR_POS            0x24    /* 地址指针位置(设置读写操作指针) */
  40          
  41          #define  LCD_TXT_STP            0x40    /* 文本区首址(从此地址开始向屏幕左上角显示字符) */
  42          #define  LCD_TXT_WID            0x41    /* 文本区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */
  43          #define  LCD_GRH_STP            0x42    /* 图形区首址(从此地址开始向屏幕左上角显示点) */
  44          #define  LCD_GRH_WID            0x43    /* 图形区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */
  45          
  46          #define  LCD_MOD_OR                     0x80    /* 显示方式:逻辑或 */
  47          #define  LCD_MOD_XOR            0x81    /* 显示方式:逻辑异或 */
  48          #define  LCD_MOD_AND            0x82    /* 显示方式:逻辑与 */
  49          #define  LCD_MOD_TCH            0x83    /* 显示方式:文本特征 */
  50          
  51          #define  LCD_DIS_SW                     0x90    /* 显示开关:D0=1/0,光标闪烁启用/禁用 */
  52                                                                                  /*                       D1=1/0,光标显示启用/禁用 */
  53                                                                                  /*                      D2=1/0,文本显示启用/禁用(打开后再使用) */
  54                                                                                  /*                      D3=1/0,图形显示启用/禁用(打开后再使用) */
C51 COMPILER V8.08   LCD_12864                                                             08/19/2008 10:59:11 PAGE 2   

  55                                                                                                                          
  56          #define  LCD_CUR_SHP            0xA0    /* 光标形状选择:0xA0-0xA7表示光标占的行数 */
  57          
  58          #define  LCD_AUT_WR                     0xB0    /* 自动写设置 */
  59          #define  LCD_AUT_RD                     0xB1    /* 自动读设置 */
  60          #define  LCD_AUT_OVR            0xB2    /* 自动读/写结束 */
  61          
  62          #define  LCD_INC_WR                     0xC0    /* 数据一次写,地址加1 */
  63          #define  LCD_INC_RD                     0xC1    /* 数据一次读,地址加1 */
  64          #define  LCD_DEC_WR                     0xC2    /* 数据一次写,地址减1 */
  65          #define  LCD_DEC_RD                     0xC3    /* 数据一次读,地址减1 */
  66          #define  LCD_NOC_WR                     0xC4    /* 数据一次写,地址不变 */
  67          #define  LCD_NOC_RD                     0xC5    /* 数据一次读,地址不变 */
  68          
  69          #define  LCD_SCN_RD                     0xE0    /* 屏读 */
  70          
  71          #define  LCD_SCN_CP                     0xE8    /* 屏拷贝 */
  72          
  73          #define  LCD_BIT_OP                     0xF0    /* 位操作:D0-D2--定义D0-D7位,D3--1为置位,0为清除 */
  74          
  75          
  76          
  77          #define LCD_WIDTH 128
  78          #define LCD_HEIGH 64
  79          
  80          #define status_busy 0x80;       //忙状态.
  81          #define disp_start_set 0xc0     //显示起始行设置.
  82          #define page_addr_set 0xb0      //页面地址设置.
  83          #define col_up_addr_set 0x10    //高位列地址设置.
  84          #define col_down_addr_set 0x00  //低位列地址设置.
  85          #define disp_on 0xaf            //打开显示.
  86          
  87          sfr iodata=0x90;
  88          
  89          
  90          
  91          
  92          extern OS_EVENT     *pPrintSem;
  93          extern OS_EVENT     *pPutSem;
  94          
  95          /********************分别为读忙信号写指令写数据.******************************************/
  96          
  97          
  98          /********************分别为读忙信号写指令写数据.******************************************/
  99          void chkbusy(void)              //检查忙信号.等待LCD内部操作完成.
 100          {
 101   1              
 102   1      
 103   1              
 104   1      
 105   1      
 106   1      }
 107          
 108          void send_comm(unsigned char command)
 109          {
 110   1          RD_H;
 111   1          Selcom;
 112   1          iodata=command;
 113   1          WR_L;
 114   1          WR_H;
 115   1      
 116   1      }
C51 COMPILER V8.08   LCD_12864                                                             08/19/2008 10:59:11 PAGE 3   

 117          
 118          void send_data(unsigned char dat)
 119          {
 120   1              RD_H;
 121   1              Seldata;
 122   1          iodata=dat;
 123   1          WR_L;
 124   1          WR_H;
 125   1      }
 126          /********************LCD初始化******************************************/
 127          void lcd_init(void)                             //LCD初始化.
 128          {
 129   1              send_data(0x00);
 130   1              send_data(0x14);
 131   1              send_comm(LCD_TXT_STP);
 132   1      
 133   1              send_data(30);
 134   1              send_data(0x0);
 135   1              send_comm(LCD_TXT_WID);
 136   1      
 137   1          send_data(0x0);
 138   1              send_data(0x0);
 139   1              send_comm(LCD_GRH_STP);
 140   1      
 141   1              send_data(30);
 142   1              send_data(0x0);
 143   1              send_comm(LCD_GRH_WID);
 144   1      
 145   1              send_comm(LCD_MOD_XOR);
 146   1      
 147   1              send_comm(LCD_DIS_SW|0x0c);
 148   1      
 149   1      
 150   1      
 151   1      
 152   1      }
 153          
 154          
 155          /********************LCD清屏******************************************/
 156          void lcd_clr(unsigned char disp)                                //LCD清屏.
 157          {
 158   1              unsigned char i,j;
 159   1              int addr;
 160   1      
 161   1              OS_ENTER_CRITICAL();
 162   1          send_data(0);
 163   1              send_data(0x0);
 164   1          send_comm(LCD_ADR_POS); 
 165   1              for(j=0;j<128;j++)
 166   1              {
 167   2                      for(i=0;i<30;i+=1)
 168   2                      {
 169   3              addr = j*30 + i;
 170   3              send_data(disp);
 171   3                      send_comm(LCD_INC_WR);
 172   3              
 173   3                      }
 174   2              }
 175   1           send_data(0);
 176   1               send_data(0x14);
 177   1              send_comm(LCD_ADR_POS); 
 178   1              for(j=0;j<16;j++)
C51 COMPILER V8.08   LCD_12864                                                             08/19/2008 10:59:11 PAGE 4   

 179   1              {
 180   2                      for(i=0;i<30;i+=1)
 181   2                      {
 182   3              addr = j*30 + i;
 183   3              send_data(' '-0x20);
 184   3                      send_comm(LCD_INC_WR);        
 185   3                      }
 186   2              }
 187   1              OS_EXIT_CRITICAL();
 188   1      }
 189          
 190          
 191          void putchar5x8(unsigned char x8,unsigned char y8,unsigned char mod,unsigned char Ascii)  reentrant
 192          {
 193   1          int addr;
 194   1          UBYTE err;
 195   1                      if(Ascii<0x20) return;                  //p表示宽度的索引,即它的值为0到width之间.
 196   1      
 197   1              addr = 30*y8 + x8 + 0x1400;
 198   1          OSSemPend(pPutSem, 0, &err);        //禁止中断,以防止2个任务同时调用显示函数
 199   1                       send_data(addr&0xff);
 200   1                   send_data(addr>>8);
 201   1               send_comm(LCD_ADR_POS);
 202   1               send_data((Ascii-0x20));
 203   1                       send_comm(LCD_INC_WR);
 204   1              OSSemPost(pPutSem);
 205   1      
 206   1      }
*** WARNING C280 IN LINE 191 OF DRIVER\LCD\LCD_12864.C: 'mod': unreferenced local variable
 207          
 208          void LCD_PutStr(unsigned char x8,unsigned char y8,unsigned char mode, unsigned char *pstr) reentrant {
 209   1         
 210   1         unsigned char p;
 211   1         unsigned char CursorX=x8,CursorY=y8;
 212   1              for(p=0;(*(pstr+p)!=0);p++)     {               
 213   2                                                                         
 214   2              if (CursorX>=30||'\n'==*(pstr+p)) {
 215   3                          CursorX=0;
 216   3                              CursorY++; 
 217   3                          if(CursorY>=16) CursorY=0;                  
 218   3                      }       
 219   2                      
 220   2                      if('\n'!=*(pstr+p))  putchar5x8(CursorX,CursorY,mode,*(pstr+p));
 221   2      
 222   2                      CursorX+=1;
 223   2                              
 224   2              
 225   2              }
 226   1      
 227   1      }
 228          
 229          
 230          
 231          void LCD_Print(unsigned char x8,unsigned char y8,unsigned char mode,char *fmt,...) reentrant {
 232   1        va_list ap;
 233   1        UBYTE err;
 234   1        char string[40];
 235   1       
 236   1        OSSemPend(pPrintSem, 0, &err); 
 237   1        va_start(ap,fmt);
 238   1        vsprintf(string,fmt,ap);
 239   1        va_end(ap);
C51 COMPILER V8.08   LCD_12864                                                             08/19/2008 10:59:11 PAGE 5   

 240   1        OSSemPost(pPrintSem);
 241   1          LCD_PutStr(x8,y8,mode,string);
 242   1       
 243   1        
 244   1      
 245   1       
 246   1        
 247   1      }
 248          
 249          void LCD_ClrLine(unsigned char x8_Start,unsigned char x8_end,unsigned char y) reentrant 
 250          {
 251   1          INT16U addr;
 252   1              INT8U i;
 253   1              if(x8_Start>x8_end||x8_end>=30||y>=128) return;
 254   1      
 255   1               addr = y*30 + x8_Start;
 256   1              OS_ENTER_CRITICAL();
 257   1              send_data(addr&0xff);
 258   1          send_data(addr>>8);
 259   1          send_comm(LCD_ADR_POS);
 260   1      
 261   1                      for(i=x8_Start;i<=x8_end;i++)
 262   1                      {
 263   2              send_data(0xff);
 264   2                      send_comm(LCD_INC_WR);
 265   2              
 266   2                      }
 267   1               OS_EXIT_CRITICAL();
 268   1      
 269   1      }
 270          
 271          
 272          void LCD_draw(unsigned char x8_Start,unsigned char x8_end,unsigned char y_start,unsigned char y_end,unsign
             -ed char *pBmp) reentrant 
 273          {
 274   1          INT16U addr,p;
 275   1              INT8U i,j;
 276   1              if(x8_Start>x8_end||y_start>y_end||x8_end>=30||y_end>=128) return;
 277   1      
 278   1               
 279   1              OS_ENTER_CRITICAL();
 280   1              p=0;
 281   1              for(j=y_start;j<=y_end;j++)   {
 282   2                  addr = j*30 + x8_Start;
 283   2                  send_data(addr&0xff);
 284   2              send_data(addr>>8);
 285   2              send_comm(LCD_ADR_POS);
 286   2                      for(i=x8_Start;i<=x8_end;i++)  {
 287   3              send_data(*(pBmp+p));
 288   3                      send_comm(LCD_INC_WR);
 289   3              p++;
 290   3                      }
 291   2              }
 292   1               OS_EXIT_CRITICAL();
 293   1      
 294   1      }
 295          
 296          
 297          
 298          
 299          
 300          
C51 COMPILER V8.08   LCD_12864                                                             08/19/2008 10:59:11 PAGE 6   

 301          
 302          
 303          
 304          
 305          
 306          
 307          
 308          
 309          
 310          
 311          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1483    ----
   CONSTANT SIZE    =    480    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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