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

📄 lcd162.lst

📁 C8051F系列单片机BTF020多功能板的LCD16*2控制程序
💻 LST
字号:
C51 COMPILER V7.50   LCD162                                                                11/24/2007 11:04:04 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD162
OBJECT MODULE PLACED IN lcd162.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd162.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                                           
  20          unsigned long x;                 //"www.xhl.com.cn"
  21          unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
  22                                          0x6d,0x2e,0x63,0x6e};                                
  23                                         
  24                                           //"  BT F020 V1.0  "
  25          unsigned char xdata NCDdata[17]={0x20,0x20,0x42,0x54,0x20,0x46,0x30,0x32,0x30,0x20,
  26                                           0x56,0x31,0x2e,0x30,0x20,0x20};
  27                                                                        
  28          unsigned char *lcdpoint;        //指向 lcddata数组的指针
  29          unsigned char lcd_data_count;
  30          //-----------------------------------------------------------------------------
  31          // 函数定义
  32          //-----------------------------------------------------------------------------
  33          void SYSCLK_Init (void);
  34          void PORT_Init (void);
  35          void LCD_Init(void);
  36          void delayms(unsigned int ms);
  37          void delayus(unsigned int us);
  38          //-----------------------------------------------------------------------------
  39          // 主程序
  40          //-----------------------------------------------------------------------------
  41          void main (void)
  42           {
  43   1              static unsigned char data1;
  44   1          WDTCN = 0xde;
  45   1          WDTCN = 0xad;                               //禁止看门狗定时器
  46   1      
  47   1          SYSCLK_Init ();                             // 系统时钟初始化
  48   1                                                
  49   1          PORT_Init ();                               // 交叉开关和通用I/O口初始化
  50   1      
  51   1              while(1){
  52   2              LCD_Init();                         //LCD初始化 
  53   2                      delayms(20);
  54   2                                      P2 = 0x00;
  55   2                                              delayus(50);
C51 COMPILER V7.50   LCD162                                                                11/24/2007 11:04:04 PAGE 2   

  56   2                              P3 = 0x80;
  57   2                              delayus(50);
  58   2                      P2 = 0x80;
  59   2      delayus(100);
  60   2       //   for(x=0;x<1000;x++);
  61   2                      P2 = 0x00;
  62   2                              delayus(100);
  63   2      // for(x=0;x<1000;x++);
  64   2      
  65   2      
  66   2                  P2  = 0x20;                         //准备送数据
  67   2              delayus(100);
  68   2                 // for(x=0;x<1000;x++);
  69   2                  lcdpoint=&NCDdata;                                  //取地址
  70   2                  for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
  71   2                  { 
  72   3                          data1=*lcdpoint;                            //读出数据                              
  73   3                          P3 = data1;                                         //写数据到端口
  74   3                              delayus(50);
  75   3                              P2 = 0xA0;
  76   3                              delayms(10);
  77   3                      P2 = 0x20;                                              //控制LCD       
  78   3                      lcdpoint++;
  79   3                              delayus(100);
  80   3                      //      for(x=0;x<1000;x++);
  81   3                      }
  82   2         delayms(2000);
  83   2                  P2=0x00;
  84   2                      delayus(50);
  85   2                  P3 = 0xc1;
  86   2                      delayus(50);
  87   2                      P2 = 0x80;
  88   2                  delayus(100);
  89   2                        // for(x=0;x<1000;x++);
  90   2                              P2 = 0x00;
  91   2      delayus(100);
  92   2                      // for(x=0;x<1000;x++);
  93   2                              
  94   2                      P2 = 0x80; 
  95   2              delayus(100);
  96   2              //      for(x=0;x<1000;x++);
  97   2                  lcdpoint=&Netdata;
  98   2                  for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
  99   2                  { 
 100   3                          data1=*lcdpoint;
 101   3                          P3 = data1;
 102   3                          delayus(50);
 103   3      //-----------------------------------------------------
 104   3              //        P2 = 0x20;                   /*原来的LCD程序*/ 
 105   3              //              P2 = 0xA0;
 106   3      //-----------------------------------------------------
 107   3                          P2 = 0xA0;                   //修改后的LCD程序
 108   3                              delayms(10);
 109   3      
 110   3                  P2 = 0x20;
 111   3      //------------------------------------------------------/
 112   3                      lcdpoint++;
 113   3                      delayus(100);
 114   3                      //      for(x=0;x<1000;x++);
 115   3                      }
 116   2              delayms(1500);
 117   2              }
C51 COMPILER V7.50   LCD162                                                                11/24/2007 11:04:04 PAGE 3   

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

 179   1         P2 = 0X00;//0x08;
 180   1         delayus(50);
 181   1         P2 = 0X80;//0x09;
 182   1        delayus(100);
 183   1        // for(x=0;x<1000;x++);
 184   1         P3 = 0x0e;
 185   1         delayus(50);
 186   1         P2 = 0x00;
 187   1         delayus(50);
 188   1         P2 = 0x80;
 189   1         delayus(100);
 190   1         //for(x=0;x<1000;x++);
 191   1         P3=  0x06;
 192   1         delayus(50);
 193   1         P2 = 0x00;
 194   1         delayus(50);
 195   1         P2 = 0x80;
 196   1         delayus(100);
 197   1        // for(x=0;x<5000;x++);
 198   1         P3 = 0x01;
 199   1         delayus(50);
 200   1         P2 = 0x00;
 201   1         delayus(50);
 202   1         P2 = 0x80;
 203   1         delayus(100);
 204   1       //  for(x=0;x<5000;x++);
 205   1      }
 206          
 207          void delayms(unsigned int ms)
 208          {int i; // 毫秒计数器
 209   1      for (i = 0; i < ms; i++) { // 数毫秒
 210   2      TR0 = 0; // 停定时器T0
 211   2      TH0 = (-sysclk/1000) >> 8; // 设置定时器T0 1ms溢出
 212   2      TL0 = -sysclk/1000;
 213   2      TR0 = 1; // 启动定时器T0
 214   2      while (TF0 == 0); // 等待溢出
 215   2      TF0 = 0; // 清除溢出标志
 216   2      }
 217   1      }
 218          void delayus(unsigned int us)
 219          {int i; // 毫秒计数器
 220   1      for (i = 0; i < us; i++) { // 数毫秒
 221   2      TR0 = 0; // 停定时器T0
 222   2      TH0 = (-sysclk/1000000) >> 8; // 设置定时器T0 1ms溢出
 223   2      TL0 = -sysclk/1000000;
 224   2      TR0 = 1; // 启动定时器T0
 225   2      while (TF0 == 0); // 等待溢出
 226   2      TF0 = 0; // 清除溢出标志
 227   2      }
 228   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    462    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     33    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9    ----
   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 + -