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

📄 lcd.lst

📁 单片机做的图片菜单显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   LCD                                                                   09/23/2007 22:58:14 PAGE 1   


C51 COMPILER V7.09, 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"zimo.h"
   2          #include <reg52.h>  //头文件
   3          //液晶信号控制引脚定义
   4          sbit DI=P2^2; // 数据\指令 选择
   5          sbit RW=P2^1; // 读\写 选择
   6          sbit E=P2^0; // 读\写使能
   7          sbit CS1=P2^4; // 片选1
   8          sbit CS2=P2^3; // 片选2
   9          
  10          //以下是外面是数组说明
  11          extern unsigned char code ziku[];
  12          extern uchar code picture[][64];
  13          extern uchar code Hzk[][32];
  14          unsigned int number=0,mstcnt=0;
  15          
  16          //自己定义函数说明
  17          void  delay(uint ms);
  18          
  19          
  20          
  21          
  22          //以下为基本操作程序
  23          ////*******************************//
  24          //液晶判忙函数********************//
  25          //*******************************//
  26          void checkstate() //判断液晶是否忙
  27          {
  28   1              unsigned char dat;
  29   1              DI=0;  //指令模式
  30   1              RW=1;  //读控制器
  31   1              do
  32   1              {
  33   2                  P1=0x00;
  34   2                      E=1; 
  35   2                      dat=P1;
  36   2                    E=0;
  37   2                      dat=0x80 & dat;                                 //仅当第7位为0时才可操作(判别busy信号)
  38   2              }while(!(dat==0x00));
  39   1      }
  40          //**********************************//
  41          // I/O口向液晶控制器写命令函数*******//
  42          //***********************************//
  43          void writecommand(unsigned char command)        //写命令
  44          {
  45   1              checkstate();
  46   1              RW=0;
  47   1              P1=command;
  48   1              E=1;         //要注意这个些数据或者命令写入液晶控制器都是下降延的
  49   1              E=0;
  50   1      }
  51          //************************************************//
  52          //******I/O口向液晶控制器写数据函数****//
  53          //***********************************************//
  54          void writedate(unsigned char date)              //写数据
  55          {
C51 COMPILER V7.09   LCD                                                                   09/23/2007 22:58:14 PAGE 2   

  56   1         checkstate();
  57   1         DI=1; RW=0;
  58   1         P1=date;
  59   1         E=1; E=0; 
  60   1      }
  61          //*********************************
  62          //***清屏幕************
  63          ///*******************************
  64          void cleanscreen()                                               //清屏
  65          {
  66   1              unsigned char page,i;
  67   1              for(page=0xb8;page<0xc0;page++) //一共写8页
  68   1              {
  69   2                      writecommand(page);
  70   2                      writecommand(0x40); //将控制器指针拉回到第0列
  71   2                      for(i=0;i<64;i++) //写64列数据,每列为一个字节
  72   2                              {writedate(0x00);//(8个位纵向组成一个页)
  73   3                              //delay(10);
  74   3                              }
  75   2              }
  76   1      }
  77          //*************************//
  78          //*****液晶片选函数******//
  79          //***********************//
  80          void choosescreen(unsigned char NO)             //选择屏幕
  81          {
  82   1              switch (NO)
  83   1              {
  84   2                      case    0: //选择2片(左右两片)
  85   2                              CS1=0;
  86   2                              CS2=0;
  87   2                              break;
  88   2                      case    1://选择左片液晶
  89   2                              CS1=0;
  90   2                              CS2=1;
  91   2                              break;
  92   2                      case    2:
  93   2                              CS1=1;//选择右片液晶
  94   2                              CS2=0;
  95   2                              break;
  96   2                      default:
  97   2                              break;
  98   2              }       
  99   1      }
 100          
 101          //*********************//
 102          //******初始化函数**** //
 103          //********************//
 104          void lce_init(void)
 105          {
 106   1              writecommand(0xc0); //显示起始为0页
 107   1              writecommand(0x3f);  //开启液晶
 108   1      }
 109          
 110          //*************************************************//
 111          //按照序号显示汉字程序
 112          //count 为要显示的汉字的序号
 113          //**按照数组中次序依次显示32个汉字。在两块液晶上面
 114          //**************
 115          void display(unsigned char count)
 116          {
 117   1              unsigned int i,m; 
C51 COMPILER V7.09   LCD                                                                   09/23/2007 22:58:14 PAGE 3   

 118   1              choosescreen(1);     //左块液晶
 119   1              writecommand(0xb8);     //页指针指向第0页
 120   1              writecommand(0x40); //列指针指向第0列
 121   1              for(i=0;i<count*16;i++)
 122   1              {
 123   2                      if(i!=0&&i%16==0) //一个汉字在控制器缓寸上占据16*16空间
 124   2                              m++;  //下个汉字
 125   2                      switch (i)
 126   2                      {
 127   3                              case    64:  //这里有两块液晶公八页,这里是要确定下一个汉字到底在
 128   3                                           //哪块液晶的哪一页起始,列都是从0开始所以写(0x40)
 129   3                                      choosescreen(2);
 130   3                                      writecommand(0xb8);     
 131   3                                      writecommand(0x40);
 132   3                                      break;
 133   3                              case    128:
 134   3                                      choosescreen(1);
 135   3                                      writecommand(0xba);     
 136   3                                      writecommand(0x40);
 137   3                                      break;
 138   3                              case    192:
 139   3                                      choosescreen(2);
 140   3                                      writecommand(0xba);     
 141   3                                      writecommand(0x40);
 142   3                                      break;
 143   3                              case    256:
 144   3                                      choosescreen(1);
 145   3                                      writecommand(0xbc);     
 146   3                                      writecommand(0x40);
 147   3                                      break;
 148   3                              case    320:
 149   3                                      choosescreen(2);
 150   3                                      writecommand(0xbc);     
 151   3                                      writecommand(0x40);
 152   3                                      break;
 153   3                              case    384:
 154   3                                      choosescreen(1);
 155   3                                      writecommand(0xbe);     
 156   3                                      writecommand(0x40);
 157   3                                      break;
 158   3                              case    448:
 159   3                                      choosescreen(2);
 160   3                                      writecommand(0xbe);     
 161   3                                      writecommand(0x40);
 162   3                                      break;
 163   3                              default:
 164   3                                      break;
 165   3                      }
 166   2                 writedate(*(ziku+i+m*16));//数组元素的访问的一种写法
 167   2                      //下面的语句等价的
 168   2             //writedate(ziku[i+(m*16)]);
 169   2              }
 170   1              choosescreen(1); 
 171   1              writecommand(0xb9);     //页指针指向下一页,送下半个汉字的字模数据
 172   1              writecommand(0x40);//列归零
 173   1              m=0;
 174   1              
 175   1              for(i=0;i<count*16;i++)
 176   1              {
 177   2                      if(i!=0&&i%16==0)
 178   2                              m++;
 179   2                      switch (i)
C51 COMPILER V7.09   LCD                                                                   09/23/2007 22:58:14 PAGE 4   

 180   2                      {
 181   3                              case    64:
 182   3                                      choosescreen(2);
 183   3                                      writecommand(0xb9);     //这段程序和上面那段类似就页加一就可以
 184   3                                      writecommand(0x40);
 185   3                                      break;
 186   3                              case    128:
 187   3                                      choosescreen(1);
 188   3                                      writecommand(0xbb);     
 189   3                                      writecommand(0x40);
 190   3                                      break;
 191   3      

⌨️ 快捷键说明

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