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

📄 lcd.lst

📁 这是一个用12864液晶显示屏的驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   LCD                                                                   04/25/2007 10:47:47 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include<ziku.h>
   3          #define uint  unsigned int
   4          #define DISP_ON    0x3f
   5          #define DISP_OFF   0x3e
   6          #define COL        0x40    //列地址
   7          #define PAGE 0xb8          //行地址
   8          #define START_LINE 0xc0
   9          #define LCD_BUS     P1  
  10          sbit CS2=P3^3;             //  CS2
  11          sbit CS1=P3^4;             //  CS1
  12          sbit E=P3^0;               //Enable
  13          sbit DI=P3^5;              //Data or Instrument Select
  14          sbit RW=P3^6;              //Write or Read
  15          sbit s0=P2^0;
  16          sbit s1=P2^1;
  17          uchar state=0;
  18          uchar cnt0,move=0,m=0,n=32,d=0,ii=0;
  19          //******************************子函数*****************************************
  20          
  21          //void cpl_disp_str(uchar page,uchar col,uchar code *str,uchar n);      //反显
  22          //void cpl_disp_ascII(uchar page,uchar col,uchar code *english,uchar n);//反显
  23          void disp_str(uchar page,uchar col,uchar code *str,uchar n);
  24          //void disp_ascII(uchar page,uchar col,uchar code *english,uchar n);
  25          void display(uchar page,uchar col,uchar code *str,uchar n);
  26          void displaye(uchar page,uchar col,uchar code *english,uchar n);
  27          void delay(uint);         //延时程序
  28          void write_cmd(uchar);    //写命令操作字
  29          void write_data(uchar);   //写数据
  30          void cls();               //清屏程序
  31          void init();              //初始化程序
  32          uchar read_data();        //读数据
  33          uchar key();
  34          void point(uchar x,uchar y);
  35          void screen0();
  36          void screen1();
  37          void screen2();
  38          void screen3();
  39          void screen4();
  40          void screen5();
  41          void screen6();
  42          void screen7();
  43          void screen71();
  44          void screen72();
  45          void screen73();
  46          void screen74();
  47          void  rectangle(x,y);
  48          void  rectangleb(x,y);
  49          void pointb(uchar x,uchar y);
  50          /*
  51          void sceen8();
  52          void sceen9();
  53          
  54          */
  55          
C51 COMPILER V7.50   LCD                                                                   04/25/2007 10:47:47 PAGE 2   

  56          //********************************主程序*******************************************
  57          
  58          main()  
  59          {
  60   1              uchar i=0;
  61   1              init();
  62   1              cls();
  63   1              for(i=0;i<6;i++)
  64   1              {     
  65   2                          
  66   2                      display(0,16*(i+1),str1,i);
  67   2               }
  68   1      
  69   1                       for(i=0;i<3;i++)
  70   1              {     
  71   2                          
  72   2                      display(6,16*i,str2,i);
  73   2                                      display(6,(80+16*i),str2,i+3);              
  74   2               }
  75   1      
  76   1      
  77   1               while(1)
  78   1                       {
  79   2                                       switch(state)
  80   2                                       {
  81   3                                              case 0: screen0();break;        //中国移动通信
  82   3                                                      case 1: screen1();break;        //通话记录 
  83   3                                                      case 2: screen2();break;    //文本信息
  84   3                                              case 3: screen3();break;    //语音功能
  85   3                                                      case 4: screen4();break;    //铃声设定
  86   3                                                      case 5: screen5();break;    //设置
  87   3                                                  case 6: screen6();break;    //管理目录
  88   3                                                      //////////////////////////////////////////////////
  89   3                                          case 7: screen7();break;    //游戏
  90   3                                                      case 71:screen71();break;
  91   3                                                      case 72:screen72();break;
  92   3                                                      case 73:screen73();break;
  93   3                                                      case 74:screen74();break;
  94   3                                                      //////////////////////////////////////////////////
  95   3                                                                                                              
  96   3                                                      default:screen0();break;
  97   3                                      }
  98   2                        }
  99   1                                              
 100   1      }
 101          
 102          
 103          
 104          //********************************** 延时子程序***************************
 105          
 106          void delay(uint t)             
 107          {
 108   1              uint i,j;
 109   1              for(i=0;i<t;i++)
 110   1                      for(j=0;j<10;j++);
 111   1      }
 112          
 113          //*******************************写命令到LCD***************************
 114          
 115          void write_cmd(uchar cmd)  
 116          {
 117   1      
C51 COMPILER V7.50   LCD                                                                   04/25/2007 10:47:47 PAGE 3   

 118   1              DI=0; RW=0;
 119   1              LCD_BUS=cmd;
 120   1              E=1;
 121   1              E=0;
 122   1      }
 123          
 124          
 125          //************************写数据到LCD******************************
 126          
 127          
 128          void point(uchar x,uchar y)
 129          {
 130   1        uchar y1,y2,pp;
 131   1        uchar datain;
 132   1        
 133   1        pp=1;
 134   1        y1=y>>3;
 135   1        y2=y%8;
 136   1        pp=pp<<y2;
 137   1        
 138   1        if (x<64)
 139   1        {
 140   2          CS2=1;
 141   2              CS1=0;
 142   2              write_cmd(PAGE+y1);
 143   2          write_cmd(COL+x);  
 144   2          datain=read_data();
 145   2          write_cmd(PAGE+y1);
 146   2          write_cmd(COL+x);
 147   2          delay(10);
 148   2          datain=read_data();
 149   2      
 150   2          write_cmd(PAGE+y1);
 151   2          write_cmd(COL+x);
 152   2          datain=datain|pp;
 153   2          write_data(datain);
 154   2        }
 155   1        else
 156   1        {
 157   2      
 158   2          CS2=0;
 159   2              CS1=1;
 160   2              write_cmd(PAGE+y1);
 161   2              write_cmd(COL+x-64);
 162   2          datain=read_data();
 163   2          write_cmd(PAGE+y1);
 164   2          write_cmd(COL+x-64);
 165   2          delay(10);
 166   2          datain=read_data();
 167   2      
 168   2          write_cmd(PAGE+y1);
 169   2          write_cmd(COL+x-64);
 170   2          datain=datain|pp;
 171   2          write_data(datain);
 172   2        }
 173   1        
 174   1      
 175   1        
 176   1      }
 177          
 178          
 179          
C51 COMPILER V7.50   LCD                                                                   04/25/2007 10:47:47 PAGE 4   

 180          void pointb(uchar x,uchar y)
 181          {
 182   1        uchar y1,y2,pp;
 183   1        uchar datain;
 184   1        
 185   1        pp=1;
 186   1        y1=y>>3;
 187   1        y2=y%8;
 188   1      
 189   1        pp=~(pp<<y2);
 190   1        
 191   1        if (x<64)
 192   1        {
 193   2          CS2=1;
 194   2              CS1=0;
 195   2              write_cmd(PAGE+y1);
 196   2          write_cmd(COL+x);  
 197   2          datain=read_data();
 198   2          write_cmd(PAGE+y1);
 199   2          write_cmd(COL+x);
 200   2          delay(10);
 201   2          datain=read_data();
 202   2      
 203   2          write_cmd(PAGE+y1);
 204   2          write_cmd(COL+x);
 205   2          datain=datain&pp;
 206   2          write_data(datain);
 207   2        }
 208   1        else
 209   1        {
 210   2      
 211   2          CS2=0;
 212   2              CS1=1;
 213   2              write_cmd(PAGE+y1);
 214   2              write_cmd(COL+x-64);
 215   2          datain=read_data();
 216   2          write_cmd(PAGE+y1);
 217   2          write_cmd(COL+x-64);
 218   2          delay(10);
 219   2          datain=read_data();
 220   2      
 221   2          write_cmd(PAGE+y1);
 222   2          write_cmd(COL+x-64);
 223   2          datain=datain&pp;
 224   2          write_data(datain);
 225   2        }
 226   1        
 227   1      
 228   1        
 229   1      }
 230          void write_data(uchar dout)  
 231          {
 232   1      
 233   1              DI=1; RW=0;
 234   1              LCD_BUS=dout;
 235   1              E=1;
 236   1              E=0;
 237   1      }
 238          
 239          
 240          
 241          
C51 COMPILER V7.50   LCD                                                                   04/25/2007 10:47:47 PAGE 5   

 242          
 243          
 244          //***************************读LCD数据********************************** 
 245           
 246          uchar read_data()  
 247          {
 248   1                      uchar din;
 249   1                      LCD_BUS=0xff;
 250   1                      DI=1; RW=1;
 251   1                      E=0;
 252   1                      E=0;
 253   1                      E=1;
 254   1                      E=1;
 255   1                      E=1;
 256   1                      din=LCD_BUS;
 257   1                      return din;        
 258   1      }
 259          
 260          
 261          
 262          
 263          //****************************清除内存******************************************
 264          
 265          void cls()  
 266          {
 267   1              uchar j,k;
 268   1              CS2=1;CS1=0;
 269   1              for(k=0;k<8;k++)
 270   1              {
 271   2                      write_cmd(PAGE+k);
 272   2                          write_cmd(COL);       //列地址0
 273   2                          for(j=0;j<64;j++)     //列地址自动加一
 274   2                                  write_data(0x00);
 275   2               }
 276   1                   CS2=0;CS1=1;
 277   1                   for(k=0;k<8;k++)
 278   1                   {
 279   2                          write_cmd(PAGE+k);
 280   2                          write_cmd(COL);           //列地址0
 281   2                          for(j=0;j<64;j++)         //列地址自动加一
 282   2                                      write_data(0x00);
 283   2        }
 284   1      }
 285          
 286          
 287          
 288          
 289              
 290          
 291          
 292          
 293          
 294          void display(uchar page,uchar col,uchar code *str,uchar n)  
 295          {
 296   1                              
 297   1                      uchar j=0,i=0;
 298   1                      if(col<64)
 299   1                      {
 300   2                              CS2=1;CS1=0;
 301   2                       }

⌨️ 快捷键说明

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