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

📄 lcd.lst

📁 C8051F系列单片机BTF020多功能板的LCD16*2控制程序
💻 LST
字号:
C51 COMPILER V7.50   LCD                                                                   11/24/2007 10:17:11 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          //-----------------------------------------------------------------------------
   2          //程序描述:
   3          //  这个程序可以在该液晶模块上显示字符:"  BT F020 V1.0  www.xhl.com.cn"
   4          //  此程序用4位数据线来驱动液晶
   5          //  液晶接线方法 :1脚接地;2脚接+5V;3脚通过1个10K电阻接+5v,通过1个430欧电阻接地;
   6          //  15脚接地;16脚通过1个15R电阻接+5v。液晶别的引脚直接接相应的数据或控制信号线。
   7          //作者:ZDP
   8          //时间:2005-11-30
   9          //版本:V1.0
  10          //-----------------------------------------------------------------------------
  11          // 头文件包含
  12          //-----------------------------------------------------------------------------
  13          #include <c8051f020.h>                 
  14          
  15          //-----------------------------------------------------------------------------
  16          //全局变量定义
  17          //-----------------------------------------------------------------------------
  18          #define sysclk 22118400
  19          unsigned char kc;                                 
  20          unsigned long x;                 //"www.xhl.com.cn"
  21          unsigned char code Netdata[]={"  www.xhl.com.cn                        "
  22                                        "   BT F020 V1.0                         "
  23                                                                    };
  24          //0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
  25                                         //  0x6d,0x2e,0x63,0x6e,0x20,0x20,0x20,0x20,0x20,0x20,
  26                                         //  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  27                                         //  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};                    
             -            
  28                                         
  29                                           //"  BT F020 V1.0  "
  30          //unsigned char xdata NCDdata[40]={0x20,0x20,0x42,0x54,0x20,0x46,0x30,0x32,0x30,0x20,
  31                                         //  0x56,0x31,0x2e,0x30,0x20,0x20,0x20,0x20,0x20,0x20,
  32                                        //   0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  33                                         //  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
  34                                                                        
  35          //unsigned char *lcdpoint;        //指向 lcddata数组的指针
  36          
  37          //-----------------------------------------------------------------------------
  38          // 函数定义
  39          //-----------------------------------------------------------------------------
  40          void SYSCLK_Init (void);
  41          void PORT_Init (void);
  42          void LCD_Init(void);
  43          void delayms(unsigned int ms);
  44          //-----------------------------------------------------------------------------
  45          // 主程序
  46          //-----------------------------------------------------------------------------
  47          void main (void)
  48           {unsigned int i;
  49   1              static unsigned char data1;
  50   1          WDTCN = 0xde;
  51   1          WDTCN = 0xad;                               //禁止看门狗定时器
  52   1                                                
  53   1          PORT_Init ();                               // 交叉开关和通用I/O口初始化
  54   1          kc=0;
C51 COMPILER V7.50   LCD                                                                   11/24/2007 10:17:11 PAGE 2   

  55   1         P2=0x00;
  56   1         P3=0x00;
  57   1              EA = 0;
  58   1              while(1){
  59   2              SYSCLK_Init ();                         // 系统时钟初始化
  60   2          delayms(5000);
  61   2          if(kc==1)   
  62   2              {   LCD_Init();//LCD初始化
  63   3                      P2 = 0x00;
  64   3                              P3 = 0x80;
  65   3                      P2 = 0x80;
  66   3          for(x=0;x<1000;x++);
  67   3                      P2 = 0x00;
  68   3       for(x=0;x<1000;x++);
  69   3      
  70   3                  P2  = 0x20;                        //准备送数据
  71   3                   for(x=0;x<1000;x++);
  72   3                  for(i=0;i<40;i++)//显示第一行字符
  73   3                  { 
  74   4                          data1=*((Netdata+i));
  75   4                          P3 = data1; 
  76   4      //-----------------------------------------------------
  77   4                      P2 = 0xA0;                   /*原来的LCD程序*/ 
  78   4                              P2 = 0x20;
  79   4      //-----------------------------------------------------
  80   4                         // P2 = 0xA0;                   //修改后的LCD程序
  81   4                 // P2 = 0x20;
  82   4      //------------------------------------------------------/
  83   4                     // lcdpoint++;
  84   4                              for(x=0;x<1000;x++);
  85   4                      }
  86   3                  P2=0x00;
  87   3                  P3 = 0xc0;
  88   3                      P2 = 0x80; 
  89   3                         for(x=0;x<1000;x++);
  90   3                              P2 = 0x00;
  91   3                       for(x=0;x<1000;x++);
  92   3                   
  93   3                      
  94   3                      P2 = 0x20;
  95   3                 //lcdpoint1=Netdata;                                 //取地址
  96   3                  for(i=0;i<40;i++)//显示第一行字符
  97   3                  {    
  98   4                          data1=*((Netdata+i+40));                            //读出数据                              
  99   4                          P3 = data1;                                         //写数据到端口
 100   4                          P2 = 0xA0;                   //修改后的LCD程序
 101   4                              for(x=0;x<1000;x++);
 102   4                  P2 = 0x20;  
 103   4                      //lcdpoint1++;
 104   4                              for(x=0;x<1000;x++);
 105   4                      }
 106   3           kc=0;
 107   3                 
 108   3              }
 109   2      
 110   2         }
 111   1       }
 112          
 113          //-----------------------------------------------------------------------------
 114          //函数名称:      SYSCLK_Init ()
 115          //函数功能:      系统时钟初始化
 116          //入口参数:      无
C51 COMPILER V7.50   LCD                                                                   11/24/2007 10:17:11 PAGE 3   

 117          //出口参数:      无
 118          //全局变量引用:  无
 119          //调用模块:      无 
 120          //-----------------------------------------------------------------------------
 121          //
 122          
 123            void SYSCLK_Init (void)
 124          {
 125   1         int i;                              // delay counter
 126   1      
 127   1         OSCXCN = 0x67;                      // start external oscillator with
 128   1                                             // 22.1184MHz crystal
 129   1      
 130   1         for (i=0; i < 256; i++) ;           // Wait for osc. to start up
 131   1      
 132   1         while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
 133   1      
 134   1         OSCICN = 0x88;    
 135   1      
 136   1         //OSCICN = 0x05;                          // 系统时钟初始化为片内的 24.5MHz / 8                        
             -                                   
 137   1       }
 138          
 139          //-----------------------------------------------------------------------------
 140          //函数名称:      PORT_Init  ()
 141          //函数功能:      通用I/O口及交叉开关初始化
 142          //入口参数:      无
 143          //出口参数:      无
 144          //全局变量引用:  无
 145          //调用模块:      无  
 146          //-----------------------------------------------------------------------------
 147          
 148          void PORT_Init (void)
 149          {
 150   1      
 151   1         XBR0     = 0x00;                       // 没有选择数字外设
 152   1         XBR2     = 0x40;
 153   1         P2MDOUT  = 0xe0;                       // P2口设为推挽方式
 154   1      }
 155          //-----------------------------------------------------------------------------
 156          //函数名称:      LCD_Init ()
 157          //函数功能:      LCD初始化
 158          //入口参数:      无
 159          //出口参数:      无
 160          //全局变量引用:  无
 161          //调用模块:      无  
 162          //-----------------------------------------------------------------------------
 163          void LCD_Init(void)
 164          {  
 165   1        for(x=0;x<50000;x++);
 166   1         //P7 = 0x30;                         /*一行显示*/
 167   1         
 168   1         P2=0x00;
 169   1         P3 = 0x38;                           /*两行显示*/
 170   1         P2 = 0X80;
 171   1          for(x=0;x<1000;x++);
 172   1         P2 = 0X00;//0x08;
 173   1          for(x=0;x<1000;x++);
 174   1      
 175   1              P2=0x00;
 176   1              P3 = 0x04;   //显示开,光标开;不闪
 177   1         P2 = 0X80;//0x09; 
C51 COMPILER V7.50   LCD                                                                   11/24/2007 10:17:11 PAGE 4   

 178   1         for(x=0;x<1000;x++);   
 179   1        P2 = 0x00;
 180   1       for(x=0;x<1000;x++);
 181   1       
 182   1         P2 = 0x00;
 183   1         P3=  0x0c;  //增量方式,现不移动
 184   1         P2 = 0x80;
 185   1         for(x=0;x<1000;x++); 
 186   1         P2 = 0x00;
 187   1          for(x=0;x<1000;x++);
 188   1      
 189   1              P2 = 0x00;
 190   1              P3 = 0x01;// 清屏
 191   1         P2 = 0x80;
 192   1         for(x=0;x<5000;x++);
 193   1         P2 = 0x00;
 194   1          for(x=0;x<1000;x++);
 195   1         
 196   1              P2 = 0x80;
 197   1         OSCICN = 0x05; 
 198   1         for(x=0;x<5000;x++);
 199   1      }
 200          void delayms(unsigned int ms)
 201          {int i; // 毫秒计数器
 202   1      for (i = 0; i < ms; i++) { // 数毫秒
 203   2      TR0 = 0; // 停定时器T0
 204   2      TH0 = (-sysclk/1000) >> 8; // 设置定时器T0 1ms溢出
 205   2      TL0 = -sysclk/1000;
 206   2      TR0 = 1; // 启动定时器T0
 207   2      while (TF0 == 0); // 等待溢出
 208   2      TF0 = 0; // 清除溢出标志
 209   2      kc=1;
 210   2      }
 211   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1216    ----
   CONSTANT SIZE    =     81    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       2
   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 + -