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

📄 lcd_driver.lst

📁 C8051F005单片机控制160*128液晶屏的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   LCD_DRIVER                                                            10/25/2005 20:21:40 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE LCD_DRIVER
OBJECT MODULE PLACED IN Lcd_Driver.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Lcd_Driver.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***********************************************
   2           *LCD调试程序*
   3            Lcd_Driver.c  160128 T6963C
   4           ***********************************************/
   5          
   6          /*头文件*/
   7          #include <C8051F000.h>
   8          #include <absacc.h>
   9          
  10          #include <intrins.h>
  11          
  12          /*typedef*/
  13          typedef unsigned int uint;
  14          typedef unsigned char uchar;
  15          typedef unsigned long ulong;
  16          
  17          #define LCD_DataPort P2
  18          
  19          // LCD128*64 I/O 信号管脚
  20          sbit CD  = P0^7; // 指令\数据 选择  高选择指令,低选择数据
  21          sbit CE  = P0^3; // 片选信号,低电平有效
  22          sbit RD  = P0^4; // 读选择 ,低电平有效
  23          sbit WR  = P1^0;   // 写信号,低有效
  24          
  25          //横向取模,字节不倒序
  26          const unsigned char code cctab[128]={
  27          /*--  文字:  电  --*/
  28          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  29          0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,
  30          0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x02,0x01,0x02,0x00,0xFE,0x00,0x00,
  31          
  32          /*--  文字:  压  --*/
  33          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  34          0x00,0x00,0x3F,0xFE,0x20,0x00,0x20,0x80,0x20,0x80,0x20,0x88,0x2F,0xFC,0x20,0x80,
  35          0x20,0xA0,0x20,0x90,0x20,0x98,0x40,0x90,0x40,0x80,0xBF,0xFE,0x00,0x00,0x00,0x00,
  36          
  37          /*--  文字:  测  --*/
  38          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  39          0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
  40          0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
  41          
  42          /*--  文字:  试  --*/
  43          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  44          0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
  45          0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00,
  46          
  47          
  48          };
  49          
  50          /******************初始化子程序****************/
  51          /*时钟初始化*/
  52          void SYSCLK_Init (void)
  53          {
  54   1      //晶振配置,采用内部晶振,默认为16MHz,八分频为2MHz
  55   1      //允许时钟丢失监测器
C51 COMPILER V7.20   LCD_DRIVER                                                            10/25/2005 20:21:40 PAGE 2   

  56   1      //      OSCICN = 0x94;  
  57   1      //      OSCXCN = 0x00;  
  58   1      
  59   1      //外部晶振      
  60   1        int i;                              // delay counter
  61   1         OSCXCN = 0x67;                      // start external oscillator with
  62   1                                             // 18.432MHz crystal
  63   1         for (i=0; i < 256; i++) ;           // Wait for osc. to start up
  64   1         while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
  65   1         OSCICN = 0x88;                      // select external oscillator as SYSCLK
  66   1                                             // source and enable missing clock
  67   1                                             // detector
  68   1      }
  69          
  70          /*端口初始化*/
  71          void PORT_Init (void)
  72          {
  73   1      //交叉开关使能,但没有进行外围设备配置
  74   1              XBR0 = 0x00;    
  75   1              XBR1 = 0x00;    
  76   1              XBR2 = 0x40;
  77   1      
  78   1              
  79   1      //均配置为开漏输出      
  80   1              PRT0CF |= 0x00;
  81   1              PRT1CF |= 0x00;
  82   1              PRT2CF |= 0x00;  
  83   1              PRT3CF |= 0x00;
  84   1      }
  85          
  86          /*****************LCD子程序***********************/
  87          
  88          //读取LCD状态字
  89          uchar readstate(void)
  90          {
  91   1        uchar lcd_state;
  92   1        LCD_DataPort=0xff; // 读取总线端口物理电平
  93   1        CD=1;
  94   1         _nop_();
  95   1        RD=0;
  96   1         _nop_();
  97   1        lcd_state=LCD_DataPort;
  98   1        _nop_();
  99   1        _nop_();
 100   1        RD=1;
 101   1      
 102   1        return lcd_state;
 103   1      /*  
 104   1        DDRA=0x00;
 105   1        DDRC|=(1<<3);
 106   1        DDRE|=(1<<6);
 107   1        PORTC|=(1<<3);   // C/D=1
 108   1        PORTE&=~(1<<6);   // /RD=0
 109   1        lcd_state=PINA&0xff;   // 读取引脚A物理电平
 110   1        NOP();
 111   1        NOP();
 112   1        PORTE|=(1<<6);   // /RD=1
 113   1        return lcd_state;
 114   1      */
 115   1      }
 116          //判断指令(数据)读写状态
 117          void st01(void)
C51 COMPILER V7.20   LCD_DRIVER                                                            10/25/2005 20:21:40 PAGE 3   

 118          {
 119   1        while((readstate()&0x03)!=3)
 120   1          ;   
 121   1      }
 122          
 123          //判断数据自动读状态
 124          void st2(void)
 125          {
 126   1        while((readstate()&0x04)!=4)
 127   1          ;
 128   1      }
 129          
 130          //判断数据自动写状态
 131          void st3(void)
 132          {
 133   1        while((readstate()&0x08)!=8)
 134   1          ;
 135   1      }
 136          
 137          
 138          //指令写入函数
 139          void writecode(uchar comd0)
 140          {
 141   1        st01();
 142   1        LCD_DataPort=comd0;
 143   1        WR=0;   // /WR=0
 144   1        _nop_();
 145   1        _nop_();
 146   1        WR=1;    // /WR=1
 147   1      
 148   1      /*  st01();
 149   1        DDRA=0xff;   //A口方向为输出
 150   1        PORTA=comd0;   //送数据到A口寄存器
 151   1        DDRE|=(1<<7);   
 152   1        PORTE&=~(1<<7);  // /WR=0
 153   1        NOP();
 154   1        PORTE|=(1<<7);  // /WR=1
 155   1      */
 156   1      }
 157           
 158           
 159          //数据写入函数
 160          void writedata(uchar onedata)
 161          {
 162   1        st01();    //状态判断
 163   1        CD=0;      //C/D=0,数据通道
 164   1         _nop_();
 165   1        LCD_DataPort=onedata;
 166   1        WR=0;   // /WR=0
 167   1        _nop_();
 168   1        _nop_();
 169   1        WR=1;    // /WR=1
 170   1       
 171   1      /*
 172   1        st01();
 173   1        DDRC|=(1<<3);
 174   1        PORTC&=~(1<<3);  // C/D=0,数据通道
 175   1        DDRA=0xff;   //A口方向为输出
 176   1        PORTA=onedata;  //送数据到A口寄存器
 177   1        DDRE|=(1<<7);   
 178   1        PORTE&=~(1<<7);  // /WR=0
 179   1        NOP();
C51 COMPILER V7.20   LCD_DRIVER                                                            10/25/2005 20:21:40 PAGE 4   

 180   1        PORTE|=(1<<7);  // /WR=1 
 181   1      */
 182   1      }
 183          
 184          
 185          //数据自动写入函数
 186          void writeauto(uchar onedata)
 187          {
 188   1        st3();    //状态判断
 189   1        CD=0;      //C/D=0,数据通道
 190   1         _nop_();
 191   1        LCD_DataPort=onedata;
 192   1        WR=0;   // /WR=0
 193   1        _nop_();
 194   1        _nop_();
 195   1        WR=1;    // /WR=1
 196   1      
 197   1      /*
 198   1        st3();
 199   1        DDRC|=(1<<3);
 200   1        PORTC&=~(1<<3);  // C/D=0,数据通道
 201   1        DDRA=0xff;   //A口方向为输出
 202   1        PORTA=onedata;  //送数据到A口寄存器
 203   1        DDRE|=(1<<7);   
 204   1        PORTE&=~(1<<7);  // /WR=0
 205   1        NOP();
 206   1        PORTE|=(1<<7);  // /WR=1 

⌨️ 快捷键说明

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