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

📄 lcd.lst

📁 变压器绕线机源代码, 经过测试,可以正常运作.
💻 LST
字号:
C51 COMPILER V7.06   LCD                                                                   05/21/2009 11:42:54 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //============================
   2          //绕线机程序
   3          //240*64LCD子程序
   4          //============================
   5          #ifndef __LCD_c__
   6          #define __LCD_c__
   7          #include "included.h"
   8          /*==========================
   9          LY-62256SRAM===32K*8
  10          字符区:DISPLAY RAM 0000H-07FFH(2K) 
  11          图形区:DISPLAY RAM 0800H-7FFFH(30K)
  12          ===========================*/
  13          void int_lcd(void)
  14          {
  15   1        pr_1(0x00,0x00,0x40);//设置文本显示区域首地址 
  16   1        pr_1(0x1e,0x00,0x41);//;一行所占字节数30个字符
  17   1      
  18   1        pr_1(0x00,0x08,0x42);//设置设置图形显示区域首地址 
  19   1        pr_1(0x1e,0x00,0x43);//设置图形显示区域宽度一行所占字节数30个字符
  20   1      
  21   1        pr_12(0xa7);       //光标形状设置
  22   1        
  23   1        pr_12(0x80);       //启动内部字符发生器
  24   1                           //;文本与图形以逻辑或的关系合成显示
  25   1        
  26   1        pr_12(0x9c);    //启动文本显示,启动图形显示
  27   1      
  28   1      }
  29          //===================
  30          //对LCD显示SRAM全部清零
  31          //==================
  32          void clr_dis_sram(void)
  33          {
  34   1        uint i;
  35   1      
  36   1        pr_1(0x00,0x00,0x24);//地址指针设置
  37   1        pr_12(0xb0);         //数据自动读写设置,进入自动写模式      //
  38   1      
  39   1        for(i=0;i<0x8000;i++)  //32k的字节空间
  40   1         { 
  41   2          st_3();
  42   2          d_add = 0x00;       //设置数据通道地址/数据写入入口
  43   2            }
  44   1      
  45   1        pr_12(0xb3);          //退出自动写模式
  46   1      }
  47          //===============
  48          //读状态字子程序
  49          //================
  50          uchar r_st(void)
  51          {
  52   1        return (c_add);
  53   1      }
  54          //==============
  55          //判断S1,S0子程序
C51 COMPILER V7.06   LCD                                                                   05/21/2009 11:42:54 PAGE 2   

  56          //==============
  57          void st_01(void)
  58          {
  59   1         uchar date_0;
  60   1        do
  61   1          {
  62   2            date_0 = r_st();
  63   2            date_0 &=0x03;
  64   2           }while(date_0 != 0x03);   
  65   1      }
  66          //==============
  67          //判断S2子程序
  68          //==============
  69          
  70          void st_2(void)
  71          {
  72   1       uchar date_0;
  73   1        do
  74   1          {
  75   2            date_0 = r_st();
  76   2            date_0 &=0x04;
  77   2           }while(date_0 != 0x04); 
  78   1       }
  79          
  80          //==============
  81          //判断S3子程序
  82          //==============
  83          void st_3(void)
  84          {
  85   1       uchar date_0;
  86   1        do
  87   1          {
  88   2            date_0 = r_st();
  89   2            date_0 &=0x08;
  90   2           }while(date_0 != 0x08); 
  91   1       }
  92          /*==========================
  93          ;写指令和数据子程序
  94          ;-----2个参数------------
  95          ===========================*/
  96          void  pr_1(uchar date_1,uchar date_2,uchar com_0)
  97          {
  98   1         st_01();
  99   1         d_add = date_1; //第一参数单元
 100   1        
 101   1         st_01();
 102   1         d_add = date_2; //取第二参数单元数据
 103   1      
 104   1         st_01();
 105   1         c_add = com_0;  //写入指令代码 
 106   1      }
 107          
 108          /*==========================
 109          ;写指令和数据子程序
 110          ;-----1个参数------------
 111          ===========================*/
 112          void  pr_11(uchar date_1,uchar com_0)
 113          {
 114   1         st_01();
 115   1         d_add = date_1; //一参数单元
 116   1        
 117   1         st_01();
C51 COMPILER V7.06   LCD                                                                   05/21/2009 11:42:54 PAGE 3   

 118   1         c_add = com_0;  //写入指令代码 
 119   1      }
 120          
 121          /*==========================
 122          ;写指令
 123          ;-----0个参数------------
 124          ===========================*/
 125          void  pr_12(uchar com_0)
 126          {   
 127   1         st_01();
 128   1         c_add = com_0;  //写入指令代码 
 129   1      }
 130          //=========================
 131          //读数据子程序
 132          //==========================
 133          uchar  pr_2(void)
 134          {  
 135   1         st_01();
 136   1         return ( d_add); //设置数据通道地址/数据写入入口
 137   1      }
 138          /*=========在LCD上显示图形===============
 139          图形写入子程序(图形方式)
 140          参数说明:
 141          X:在屏幕上水平方向的位置(字节为单位0--30)
 142          Y:在屏幕上垂直方向的位置(像数点为单位0--63)
 143          tim0:表示该图形在屏幕上一行上要显示多小个字节
 144          tim1:表示该图形在屏幕上要显示多小行
 145          tab_add:表的地址位置
 146          =================================*/
 147          
 148          void wri_pic(uchar x,uchar y,uchar tim0,uchar tim1,uchar *tab_add)
 149          {
 150   1        uint  dis_add;
 151   1        uint   cod;
 152   1        uchar  *pt;
 153   1        uint  temp_pos;  
 154   1      
 155   1        pt = tab_add;  //表的地址位置
 156   1        dis_add = x+y*0x1e+0x0800;//计算显示RAM的地址
 157   1      
 158   1        for(cod =0;cod<tim1;cod++ ) //tim1=图形的行数
 159   1           {
 160   2            pr_1(dis_add,dis_add>>8,0x24);//写指令和数据子程序2个参数
 161   2            for(temp_pos=0;temp_pos<tim0;temp_pos++ )//tim0 =图形的列数  
 162   2               {
 163   3                 pr_11(*pt,0xc0);//写指令和数据子程序1个参数
 164   3                 ++pt; 
 165   3                }
 166   2            dis_add +=30; //修正显示RAM的地址
 167   2             }
 168   1      }
 169          
 170          ///*;********在LCD上显示西文字符*********************
 171          //西文字符写入子程序(文本显示)
 172          //参数说明:
 173          //X:水平方向的坐标单位(字节)范围(0-30)240/8
 174          //Y:垂直方向的坐标单位(字节)范围(0-7)64/8
 175          //COD:ASCII码位置在00H-7FH之间,字符代码
 176          // ============================================= */
 177          void wri_c(uchar x,uchar y,uchar cod)
 178          {
 179   1         uint  dis_add;
C51 COMPILER V7.06   LCD                                                                   05/21/2009 11:42:54 PAGE 4   

 180   1      
 181   1         dis_add = y*0x1e+x;
 182   1         pr_1(dis_add,dis_add>>8,0x24);//写指令和数据子程序2个参数
 183   1         pr_11(cod,0xc0);
 184   1      }
 185          /*===========在LCD上显示一个西文字符===========
 186          图形方式下显示一个西文字符子程序
 187          X:显示屏行线上的第几个字节(0----240/8=30)字节为单位
 188          Y:显示屏上的第几行(0--63)像数点为单位
 189          cod:该字符在数组中的位置
 190          字体下对应的点阵为:宽x高=8x16 
 191          西文字符写入子程序(图形方式)
 192          =============================*/
 193          
 194          void wri_s(uchar x,uchar y,uchar cod,uchar *tab_add)
 195          {
 196   1         uint  dis_add;
 197   1         uchar count;
 198   1         uchar *true_add;
 199   1         
 200   1         dis_add = y*0x1e+x+0x0800; //0800H OF 30K
 201   1         true_add= tab_add+cod*0x10; //西文字符
 202   1         
 203   1         for(count=0;count<16;count++)
 204   1          {
 205   2            pr_1(dis_add,dis_add>>8,0x24);
 206   2            pr_11(*true_add,0xc0);
 207   2            ++true_add;
 208   2            dis_add +=30;
 209   2          } 
 210   1      }
 211          
 212          /*==========在LCD上显示一个汉字======================
 213          在图形方式下显示一个汉字的子程序
 214          参数说明:
 215          X:显示屏行线上的第几个字节(0----240/8=30)字节为单位
 216          Y:显示屏上的第几行(0--63)像数点为单位
 217          COD:在字模表中定义的要显示的字是哪个(32个字节为单位)
 218          ;汉字写入子程序(图形方式)
 219          ;y*30+x+0800 = 要显示的RAM地址d2,d1==>y,x
 220          ;====================================*/
 221          void wri_cc(uchar x,uchar y,uchar cod,uchar *tab_add)
 222          {
 223   1         uint  dis_add;
 224   1         uchar count;
 225   1         uchar *true_add;
 226   1      
 227   1         dis_add = y*0x1e+x+0x0800; //显示地址的偏移设置
 228   1         true_add = tab_add+cod *32;//数据在表中的地址    
 229   1         for(count=0;count<16;count++)
 230   1           {
 231   2            pr_1(dis_add,dis_add>>8,0x24);
 232   2            pr_11(*true_add,0xc0);
 233   2             ++true_add;
 234   2            pr_11(*true_add,0xc0);
 235   2             ++true_add;
 236   2            dis_add +=30;
 237   2          } 
 238   1      }
 239          //;*********在LCD上显示一个点********************
 240          //;绘点子程序(240X64)
 241          /*==========================================
C51 COMPILER V7.06   LCD                                                                   05/21/2009 11:42:54 PAGE 5   

 242          参数说明:
 243          X:显示屏上的水平方向(0--234)像数点为单位
 244          Y:显示屏上的垂直方向(0--63)像数点为单位
 245          ============================================*/
 246          
 247          void wri_d(void)
 248          {
 249   1          uint  dis_add;
 250   1          uchar  temp_0;
 251   1          dis_add = 5*0x1e+7/8+0x0800;  
 252   1          pr_1(dis_add,dis_add>>8,0x24);
 253   1          
 254   1          temp_0 =7%8;
 255   1          temp_0 = 0x07-temp_0;
 256   1          temp_0 |=0xf8;   //确定位,相应位为1    
 257   1          pr_12(temp_0);
 258   1      }
 259          
 260          //==============文本显示==ASCII码==========================
 261          /*=======显示外部RAM一个地址单元里的值==============
 262          参数说明:8*8
 263          X:水平方向的坐标单位(字节)范围(0-30)240/8
 264          Y:垂直方向的坐标单位(字节)范围(0-7)64/8
 265          tim0:数字位数的1/2数,N为数据的位数
 266          ==============================*/
 267           void dis_dat(uchar x,uchar y,uchar xdata_sram)
 268          {
 269   1          uint  dis_add;
 270   1          uchar  temp;
 271   1       
 272   1           dis_add = y*0x1e+x;
 273   1           pr_1(dis_add,dis_add>>8,0x24);
 274   1               
 275   1           temp =xdata_sram;
 276   1           temp =temp>>4;
 277   1           temp &=0x0f;
 278   1           temp |=0x10;   //显示BCD码,如0X79,则屏幕上就显示79
 279   1           pr_11(temp,0xc0);
 280   1      
 281   1           temp =xdata_sram;
 282   1           temp &=0x0f;
 283   1           temp |=0x10;
 284   1           pr_11(temp,0xc0);  
 285   1      }
 286          /*====================================== 
 287          读出2汉字并取反后再写入子程序(图形方式)
 288          取反显示,是选中的那2个字,变成空心字,
 289          以表示选中了当前要设置的子项目
 290          =======================================*/
 291          void wri_rd(uchar x,uchar y)
 292          {
 293   1          uchar count=0,col=0;
 294   1          uint  dis_add;
 295   1          uchar temp;
 296   1      
 297   1         dis_add=y*30+x+0x0800;//显示地址
 298   1           
 299   1         for(count=0;count<16;count++)
 300   1         {
 301   2           pr_1(dis_add,dis_add>>8,0x24);
 302   2       
 303   2           for(col=0;col<4;col++)
C51 COMPILER V7.06   LCD                                                                   05/21/2009 11:42:54 PAGE 6   

 304   2            {
 305   3              pr_12(0xc5);//执行一次读操作
 306   3              temp=pr_2(); //读数据子程序
 307   3              pr_11(~temp,0xc0);//一次写操作
 308   3             }      
 309   2             dis_add +=30;
 310   2           }
 311   1      }
 312          //==============================
 313          #endif
 314          
 315          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    691    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      42
   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 + -