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

📄 z12864.lst

📁 51单片机Proteus仿真多级菜单实现
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   Z12864                                                                12/07/2007 16:07:50 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE Z12864
OBJECT MODULE PLACED IN Z12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Z12864.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          //[字符图象输出文件=hzk.c]
   4          //[字体名称=宋体]
   5          //[字体大小=16]
   6          //[字节方向=垂直]
   7          //[字位顺序=从低到高]
   8          
   9          #include <reg51.h>
  10          #include <math.h>
  11          #include <hzk.c>
  12          
  13          
  14          #define UP 0xfe
  15          #define DOWN 0xfd
  16          #define LEFT 0xfb
  17          #define RIGHT 0xf7
  18          #define ESC 0xdf
  19          #define ENTER 0xef
  20          
  21          #define BLACK   1
  22          #define WHITE   0
  23          
  24          
  25          #define MENU_BACK_COLOR  WHITE   //定义菜单系统当中的背景色 
  26          #define MENU_FONT_COLOR  BLACK   //定义菜单系统当中的文字色 
  27          #define MENU_SELE_COLOR   BLACK//定义菜单系统当中被选择的菜单项背景色 
  28          #define MENU_SELF_COLOR    WHITE //定义菜单系统当中被选择的菜单项文字色 
  29          
  30          
  31          #define Y_WIDTH_MENU 16
  32          #define Dis_Menu_Num  4
  33          
  34          
  35          #define  Dis_X_MAX   127
  36          #define  Dis_Y_MAX        64
  37          #define Key  P1
  38          
  39           unsigned char First_Index_old=0xff ;
  40           unsigned char y_Index_old=0xff  ;
  41          
  42          
  43          code unsigned char Menu_String01[]={"绘点"}; 
  44          code unsigned char Menu_String02[]={"绘直线"}; 
  45          code unsigned char Menu_String03[]={"绘矩形"}; 
  46          code unsigned char Menu_String04[]={"字符显示"}; 
  47          code unsigned char Menu_String05[]={"帮助"}; 
  48          
  49          code unsigned char Menu_String06[]={"单个西文字符"};
  50          code unsigned char Menu_String07[]={"西文字符串"}; 
  51          code unsigned char Menu_String08[]={"中文字符"}; 
  52          code unsigned char Menu_String09[]={"返回"}; 
  53          
  54          
  55           code unsigned char Menu_List01_Config[]={5}; 
C51 COMPILER V8.08   Z12864                                                                12/07/2007 16:07:50 PAGE 2   

  56          code unsigned char Menu_List02_Config[]={4}; 
  57          
  58          
  59          
  60          code unsigned char *Menu_List01[]=// 
  61          {
  62          (unsigned char *)Menu_List01_Config,
  63          (unsigned char *)Menu_String01, 
  64          (unsigned char *)Menu_String02,
  65          (unsigned char *)Menu_String03, 
  66          (unsigned char *)Menu_String04,
  67          (unsigned char *)Menu_String05
  68          }; 
  69          code unsigned char *Menu_List02[]=// 
  70          {
  71          (unsigned char *)Menu_List02_Config,
  72          (unsigned char *)Menu_String06, 
  73          (unsigned char *)Menu_String07,
  74          (unsigned char *)Menu_String08, 
  75          (unsigned char *)Menu_String09
  76          }; 
  77          
  78          
  79          unsigned char data Lcd_CurrentX,Lcd_CurrentY,Lcd_Mask;
  80          unsigned char code LeftMask[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
  81          unsigned char code RightMask[]={0xff,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};
  82          unsigned char code Mask1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  83          unsigned char code Mask2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  84          
  85          //前两位由5个口线决定,见SMG12864说明书 基本操作时序
  86          //Epin—p2.7 R/W—p2.1 cs1—p2.3 cs2—p2.2 RS—p2.0
  87          unsigned char xdata Lcd_Chip1_Cmd_W_Reg _at_ 0x8800;
  88          unsigned char xdata Lcd_Chip2_Cmd_W_Reg _at_ 0x8400;
  89          unsigned char xdata Lcd_Chip1_Data_W_Reg _at_ 0x8900;
  90          unsigned char xdata Lcd_Chip2_Data_W_Reg _at_ 0x8500;
  91          unsigned char xdata Lcd_Chip1_Data_R_Reg _at_ 0x8b00;
  92          unsigned char xdata Lcd_Chip2_Data_R_Reg _at_ 0x8700;
  93          unsigned char xdata Lcd_Chip1_Sta_R_Reg _at_ 0x8a00;
  94          unsigned char xdata Lcd_Chip2_Sta_R_Reg _at_ 0x8600;
  95          
  96          #define LCD_CMD_COL  0x40
  97          #define LCD_CMD_PAGE 0xB8
  98          #define LCD_CMD_ON   0x3F
  99          #define LCD_CMD_OFF  0x3E
 100          #define LCD_CMD_STARTLINE 0xC0
 101          #define LCD_LEFT 0
 102          #define LCD_TOP  0
 103          #define LCD_RIGHT 127
 104          #define LCD_BOTTOM 63
 105          
 106          //延时子程序
 107          void delay(unsigned int t)
 108          {  unsigned int i,j;
 109   1         for(i=0;i<t;i++)
 110   1            for(j=0;j<10;j++)
 111   1               ;
 112   1      }
 113          
 114          //片1测忙
 115          void lcdwaitidle1(void)
 116          {  while(((Lcd_Chip1_Sta_R_Reg)&0x80)==0x80);
 117   1      }
C51 COMPILER V8.08   Z12864                                                                12/07/2007 16:07:50 PAGE 3   

 118          
 119          //片2测忙
 120          void lcdwaitidle2(void)
 121          {  while(((Lcd_Chip2_Sta_R_Reg)&0x80)==0x80);
 122   1      }
 123          
 124          //写指令代码到片1
 125          void lcdwc1(unsigned char cmdcode)
 126          {  lcdwaitidle1();
 127   1         Lcd_Chip1_Cmd_W_Reg=cmdcode;
 128   1      }
 129          
 130          //写指令代码到片2
 131          void lcdwc2(unsigned char cmdcode)
 132          {  lcdwaitidle2();
 133   1         Lcd_Chip2_Cmd_W_Reg=cmdcode;
 134   1      }
 135          
 136          //写数据到片1
 137          void lcdwd1(unsigned char dispdata)
 138          {  lcdwaitidle1();
 139   1         Lcd_Chip1_Data_W_Reg=dispdata;
 140   1      }
 141          
 142          //写数据到片2
 143          void lcdwd2(unsigned char dispdata)
 144          {  lcdwaitidle2();
 145   1         Lcd_Chip2_Data_W_Reg=dispdata;
 146   1      }
 147          
 148          //读片1数据
 149          unsigned char lcdrd1(void)
 150          {  lcdwaitidle1();
 151   1         return Lcd_Chip1_Data_R_Reg;
 152   1      }
 153          
 154          //读片2数据
 155          unsigned char lcdrd2(void)
 156          {  lcdwaitidle2();
 157   1         return Lcd_Chip2_Data_R_Reg;
 158   1      }
 159          
 160          //写指令代码
 161          void lcdwc(unsigned char cmdcode)
 162          {  if((Lcd_CurrentX)<0x40)
 163   1            lcdwc1(cmdcode);
 164   1         else
 165   1            lcdwc2(cmdcode);
 166   1      }
 167          
 168          //写数据
 169          void lcdwd(unsigned char dispdata)
 170          {  if(Lcd_CurrentX<64)
 171   1            lcdwd1(dispdata);
 172   1         else
 173   1            lcdwd2(dispdata);
 174   1      }
 175          
 176          //内部数据地址指针定位
 177          void lcdpos(void)
 178          {  lcdwc(LCD_CMD_COL|(Lcd_CurrentX&0x3f));      //设置地址列指针
 179   1         lcdwc(LCD_CMD_PAGE|((Lcd_CurrentY/8)&0x7));  //设置地址页指针
C51 COMPILER V8.08   Z12864                                                                12/07/2007 16:07:50 PAGE 4   

 180   1      }
 181          
 182          //读数据
 183          unsigned char lcdrd(void)
 184          {  unsigned char i;
 185   1         lcdpos();
 186   1         if(Lcd_CurrentX<64)
 187   1         {  i=lcdrd1();
 188   2            i=lcdrd1();        //读两次
 189   2         }
 190   1         else
 191   1         {  i=lcdrd2();
 192   2            i=lcdrd2();
 193   2         }
 194   1         lcdpos();
 195   1         return i;
 196   1      }
 197          
 198          //当前坐标移动到下一个点
 199          void lcdcursornext(void)
 200          {  Lcd_CurrentX++;
 201   1         if(Lcd_CurrentX>LCD_RIGHT)
 202   1         {  Lcd_CurrentX=LCD_LEFT;
 203   2            Lcd_CurrentY+=8;
 204   2            if(Lcd_CurrentY>LCD_BOTTOM)
 205   2               Lcd_CurrentY=LCD_TOP;
 206   2         }
 207   1      }
 208          
 209          void displaybyte(unsigned char dispdata)
 210          {  lcdpos();         //内部数据地址指针定位
 211   1         lcdwd(dispdata);  //写数据
 212   1         lcdcursornext();  //当前坐标移动到下一个点
 213   1      }
 214          
 215          //整屏显示
 216          void lcdfill(unsigned char FillData)
 217          {  for(Lcd_CurrentX=LCD_LEFT,Lcd_CurrentY=LCD_TOP;1;)
 218   1         {  displaybyte(FillData);
 219   2            if((Lcd_CurrentX==LCD_LEFT)&&(Lcd_CurrentY==LCD_TOP))
 220   2               break;
 221   2         }
 222   1      }
 223          /*//填充矩形
 224          void rectfill(signed char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char FillData)
 225          {  for(Lcd_CurrentX=x0,Lcd_CurrentY=y0;1;)
 226             {  displaybyte( FillData);
 227                if((Lcd_CurrentX==x1)&&(Lcd_CurrentY==y1))
 228                   break;
 229             }
 230          }
 231          
 232            */
 233          
 234          
 235          
 236          
 237          
 238          
 239          
 240          
 241          
C51 COMPILER V8.08   Z12864                                                                12/07/2007 16:07:50 PAGE 5   

 242          
 243          
 244          
 245          
 246          
 247          
 248          
 249          
 250          
 251          
 252          
 253          
 254          
 255          
 256          #include <display.c>
 257          #include <point.c>

⌨️ 快捷键说明

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