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

📄 显示部分程序.lst

📁 2013电子设计大赛手写板G题
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE 显示部穇程序
OBJECT MODULE PLACED IN 显示部分程序.OBJ
COMPILER INVOKED BY: D:\keil4\C51\BIN\C51.EXE 显示部分程序.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1                  #include <STC12C5A60S2.H>
   2          
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          
   6          #define LCD_PORT P2
   7          #define Left  1
   8          #define Right 2
   9          sbit  LCD_Busy=P2^7;
  10          sbit  LCD_EN = P0^3;
  11          sbit  LCD_RS = P0^1;
  12          sbit  LCD_RW = P0^2;
  13          sbit  LCD_RST= P0^0;
  14          sbit  LCD_CS2= P0^5;
  15          sbit  LCD_CS1= P0^4;
  16          //sbit  FR=P3^7;
  17          //sbit  key1=P3^2;
  18          sbit  key2=P3^3;
  19          //sbit  key3=P3^6;
  20          //sbit  key4=P2^0;
  21          
  22          uchar DisBuf[30],Page_Num,Clm_Num,zhou[4];
  23          uchar pointY=15,pointX=16;
  24          uchar i,cai3=0;
  25          uint x,y,caiy1=0,caiy2=0,caiy3=0,caiy4=0,caix1=0,caix2=0,caix3=0,caix4=0;
  26          uchar shi=0,ge=0,ms=0,stop=0,gao=0,di=0;
  27          uchar cai[4],cai0[3],temp[8] ;
  28          
  29          unsigned int n,m,count,count2,T0count,time,flag,shu1,shu2,shu3;
  30          
  31          code char Table[]=     //数字0~9
  32          { 
  33            0x7E, 0xa1, 0x99, 0x85, 0x7E,     //   0 0*5
  34            0x82, 0x81, 0xff, 0x80, 0x80,     //   1 1*5
  35            0xc2, 0xa1, 0x91, 0x89, 0x86,     //   2 2*5
  36            0x42, 0x81, 0x89, 0x89, 0x76,     //   3 3*5
  37            0x18, 0x14, 0x12, 0xff, 0x10,     //   4 4*5
  38            0x4F, 0x89, 0x89, 0x89, 0x71,     //   5 5*5
  39            0x7e, 0x89, 0x89, 0x89, 0x72,     //   6 6*5
  40            0x01, 0x01, 0xf9, 0x05, 0x03,     //   7 7*5
  41            0x76, 0x89, 0x89, 0x89, 0x76,     //   8 8*5
  42            0x4e, 0x91, 0x91, 0x91, 0x7E,     //   9 9*5  
  43            0x10, 0x28, 0x44, 0x82, 0x00,     //   < 10*5   
  44            0x00, 0x82, 0x44, 0x28, 0x10,     //   >  11*5      
  45          };
  46          
  47          code char Table1[]=     //括号
  48          {
  49            0x00, 0x3C, 0x42, 0x81,           //   (   4*0
  50            0x81, 0x42, 0x3C, 0x00,           //    )  4*1
  51                 //    <  8
  52          };
  53          
  54          code char Table3[]=     //字母
  55          { 
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 2   

  56            0xFF, 0x11, 0x11, 0x11, 0x0E,     //   P 0*5
  57            0x3f, 0x40, 0x80, 0x40, 0x3f,     //   V 1*5
  58            0xff, 0x08, 0x08, 0x08, 0xff,     //   H 2*5
  59            0xc4, 0xa4, 0x94, 0x8c, 0x00,     //   z 3*5    
  60            0xff, 0x09, 0x09, 0x09, 0x09,     //   F 4*5
  61            0xFF, 0x19, 0x29, 0x49, 0x86,     //   R 5*5
  62            0xFF, 0x89, 0x89, 0x89, 0x89,     //   E 6*5
  63            0x7e, 0x81, 0xa1, 0x41, 0xBE,     //   Q 7*5
  64          };
  65          
  66          code char Table4[]=     //小数点
  67          {
  68             0x80,          
  69          };
  70          
  71          void Delay_us(unsigned int DelayTime)
  72           {
  73   1         while(DelayTime) DelayTime--;
  74   1        }
  75          
  76          void Delay_x10ms(unsigned char DelayTime)   //***************10ms延时**********//
  77             {
  78   1             unsigned char i,j,k;
  79   1             for(i=0;i<DelayTime;i++)
  80   1                for(j=0;j<10;j++)
  81   1                   for(k=0;k<120;k++) {;}
  82   1          }
  83          
  84          
  85          /*---------------------------------------------------------------------------- 
  86          下面这个函数用于液晶模块的忙信号检测。 
  87          ----------------------------------------------------------------------------*/ 
  88          
  89          void LCD_Check_Busy(void)
  90            {    
  91   1          LCD_PORT = 0x00;
  92   1          Delay_us(5);
  93   1          while(LCD_Busy)
  94   1          {
  95   2           LCD_EN = 0;
  96   2           LCD_RS = 0;
  97   2           LCD_RW = 1;
  98   2           Delay_us(5);
  99   2           LCD_EN = 1;
 100   2           Delay_us(10);
 101   2          }
 102   1         LCD_EN = 0;
 103   1        }
 104          
 105          //度屏程序
 106          
 107          uchar Readdata1()
 108          {
 109   1      uchar rdata;
 110   1      LCD_CS1=1;LCD_CS2=0;
 111   1       LCD_Check_Busy();
 112   1       LCD_RS=1;
 113   1       LCD_RW=1;
 114   1       LCD_EN=1;
 115   1       rdata=LCD_PORT;
 116   1      Delay_us(3);
 117   1       LCD_EN=0;
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 3   

 118   1      Delay_us(1);
 119   1      return rdata;
 120   1      }
 121          
 122          uchar Readdata2()
 123          {
 124   1      uchar rdata;
 125   1      LCD_CS1=0;LCD_CS2=1;
 126   1       LCD_Check_Busy();
 127   1       LCD_RS=1;
 128   1       LCD_RW=1;
 129   1       LCD_EN=1;
 130   1       rdata=LCD_PORT;
 131   1      Delay_us(3);
 132   1       LCD_EN=0;
 133   1      Delay_us(1);
 134   1      return rdata;
 135   1      }
 136          
 137          /*---------------------------------------------------------------------------- 
 138          下面这个函数用于向液晶模块写入控制指令代码。 
 139          函数入口参数:Command ------ 向液晶模块写入的控制指令代码 。 
 140                        CS_Num  ------ 左右半屏的选数值 
 141          ----------------------------------------------------------------------------*/ 
 142          void LCD_WriteCommand(uchar Command, uchar CS_Num) 
 143          { 
 144   1        LCD_Check_Busy();
 145   1        if(CS_Num==1)                 /*选择左半屏*/
 146   1         {
 147   2           LCD_CS1 = 1;
 148   2                LCD_CS2 = 0;
 149   2              }
 150   1        else  /*选择右半屏*/
 151   1         {
 152   2           LCD_CS1 = 0;
 153   2                LCD_CS2 = 1;
 154   2              }
 155   1        Delay_us(2);
 156   1        LCD_EN = 0;           /* 使能信号为L */ 
 157   1        LCD_RS = 0;           /* 置寄存器选择为L */ 
 158   1        LCD_RW = 0;           /* 置读/写选择为L */ 
 159   1        LCD_PORT= Command;   /* 将控制指令代码输出到的数据端口 */ 
 160   1        LCD_EN = 1;           /* 使能信号为H */ 
 161   1        Delay_us(2);          /* 延时2us */ 
 162   1        LCD_EN = 0;           /* 使能信号为L */ 
 163   1        LCD_CS1 = 1;          /* 置片选1为L */ 
 164   1        LCD_CS2 = 1;          /* 置片选2为L */ 
 165   1       
 166   1      } 
 167          
 168          
 169          /*---------------------------------------------------------------------------- 
 170          下面这个函数用于向液晶模块写入显示数据。 
 171          函数入口参数:Data------ 向液晶模块写入的显示数据 。 
 172                      CS_Num-------左右半屏的选数值 
 173          ----------------------------------------------------------------------------*/ 
 174          void LCD_WriteData(uchar Data,uchar CS_Num) 
 175          { 
 176   1        LCD_Check_Busy();
 177   1        if(CS_Num==1)          /*选择左半屏*/
 178   1         {
 179   2           LCD_CS1 = 1;
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 4   

 180   2                LCD_CS2 = 0;
 181   2                cai3=Readdata1();
 182   2                Data+=cai3;
 183   2              
 184   2              }
 185   1        else                /*选择右半屏*/
 186   1         {
 187   2           LCD_CS1 = 0;
 188   2                LCD_CS2 = 1;
 189   2                      cai3=Readdata2();
 190   2                      Data+=cai3;
 191   2              }
 192   1        Delay_us(2);
 193   1        LCD_EN = 0;
 194   1        LCD_RS = 1;       /* 置寄存器选择为H */ 
 195   1        LCD_RW = 0;       /* 置读/写选择为L */  
 196   1        LCD_PORT= Data;  /* 将显示数据输出到的数据端口 */ 
 197   1        LCD_EN = 1;       /* 使能信号为H */ 
 198   1        Delay_us(2);      /* 延时2us */ 
 199   1        LCD_EN = 0;       /* 使能信号为L */ 
 200   1        LCD_CS1= 1;       /* 置片选1为L */ 
 201   1        LCD_CS2= 1;       /* 置片选2为L */ 
 202   1      
 203   1      } 
 204          
 205          
 206          
 207          
 208          
 209          
 210          /*---------------------------------------------------------------------------
 211          下面这个函数用于液晶模块的清屏。
 212          ---------------------------------------------------------------------------*/
 213          void LCD_CLR(uchar Side_Num)
 214           {
 215   1         uchar i,k,COM;
 216   1         
 217   1         for(i=0;i<8;i++)                               
 218   1         {
 219   2               COM=0xB8+i;
 220   2           LCD_WriteCommand(COM,Side_Num);    
 221   2               COM=0x40;
 222   2               LCD_WriteCommand(COM,Side_Num);  
 223   2                       
 224   2           for(k=0;k<64;k++)
 225   2            {
 226   3                  LCD_WriteData(0x00,Side_Num);
 227   3                 }
 228   2              }
 229   1              
 230   1        }
 231          
 232          
 233          /*---------------------------------------------------------------------------
 234          下面这个函数用于向液晶模块初始化。
 235          如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
 236          ---------------------------------------------------------------------------*/
 237          void LCD_Initial(void) 
 238          {   
 239   1        LCD_RST = 0;    /* 置复位信号为低电平 */ 
 240   1        Delay_x10ms(10);  
 241   1        LCD_RST = 1;  /* 置复位信号为高电平 */
C51 COMPILER V9.01   显示部穇程序                                                          09/02/2013 21:55:46 PAGE 5   

 242   1        Delay_x10ms(10);  
 243   1        LCD_WriteCommand(0x3F,Left);    /*显示开*/
 244   1        LCD_WriteCommand(0x3F,Right);
 245   1        LCD_WriteCommand(0xC0,Left);    /*起始行*/
 246   1        LCD_WriteCommand(0xC0,Right);                     
 247   1        LCD_WriteCommand(0xB8,Left);    /*起始页*/
 248   1        LCD_WriteCommand(0xB8,Right);  
 249   1        LCD_WriteCommand(0x40,Left);    /*起始列*/
 250   1        LCD_WriteCommand(0x40,Right); 
 251   1      } 
 252          
 253          void LCD_ror_wr(uchar x,uchar *a)
 254          {
 255   1        uchar j;
 256   1        if(x<64)
 257   1        {
 258   2          for(j=0;j<8;j++)
 259   2           {
 260   3              LCD_WriteCommand(0xB8+j,Left);
 261   3              LCD_WriteCommand(0x40+x,Left);
 262   3              LCD_WriteData(a[j],Left);
 263   3           }
 264   2        }
 265   1         
 266   1        else
 267   1        {
 268   2          x-=64;
 269   2          for(j=0;j<8;j++)
 270   2           {
 271   3              LCD_WriteCommand(0xB8+j,Right);
 272   3              LCD_WriteCommand(0x40+x,Right);
 273   3              LCD_WriteData(a[j],Right);
 274   3           }
 275   2        }
 276   1      
 277   1      }
 278          
 279          
 280          /*------------------------------------------------

⌨️ 快捷键说明

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