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

📄 lcd.lst

📁 lcd interface code for lpc214x series micro controllers
💻 LST
字号:
ARM COMPILER V0.07,  lcd                                                                   26/11/04  11:06:08  PAGE 1   


ARM COMPILER V0.07, COMPILATION OF MODULE lcd
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\KEIL\ARM\BIN\CA.EXE lcd.c TABS(4) 

stmt  level    source

    1          #include "lcd.h"
    2          #include "lpc210x.h"
    3          
    4          void lcd_wait(){
    5   1            int loop=2800;  //more than enough
    6   1            //busy loop
    7   1            while(loop--);
    8   1      }
    9          void lcd_wait_s(){
   10   1            int loop=50;  //more than enough
   11   1            //busy loop
   12   1            while(loop--);
   13   1      }
   14          void lcd_out_data4(unsigned char val){
   15   1           IOCLR |= (LCD_DATA);
   16   1           IOSET |= (val<<4);
   17   1      }
   18          
   19          void lcd_write_nibbles(unsigned char val){
   20   1      
   21   1           //higher-order byte
   22   1           lcd_en_set();
   23   1           lcd_wait_s(); /////////
   24   1           lcd_out_data4((val>>4)&0x0F);
   25   1           lcd_wait_s(); /////////
   26   1           lcd_en_clr();
   27   1      
   28   1           lcd_wait();
   29   1      
   30   1           //lower-order byte
   31   1           lcd_en_set();
   32   1           lcd_wait_s(); /////////
   33   1           lcd_out_data4((val)&0x0F);
   34   1           lcd_wait_s(); /////////
   35   1           lcd_en_clr();
   36   1           
   37   1           lcd_wait();
   38   1      }
   39          
   40          void lcd_write_control(unsigned char val){
   41   1           lcd_rs_clr();
   42   1           lcd_write_nibbles(val);
   43   1      }
   44          
   45          void lcd_init(){
   46   1      
   47   1              PINSEL0 &= (~LCD_GPIO_SEL0);
   48   1              PINSEL1 &= (~LCD_GPIO_SEL1);
   49   1              /* we only work on OUTPUT so far */
   50   1              IODIR |= LCD_IOALL;
   51   1              
   52   1              /* IO init complete, init LCD */
   53   1      
   54   1             /* init 4-bit ops*/
   55   1             lcd_rs_clr();
   56   1             lcd_rw_clr();
   57   1             lcd_en_clr();
   58   1      
   59   1      
ARM COMPILER V0.07,  lcd                                                                   26/11/04  11:06:08  PAGE 2   

   60   1             //wait VDD raise > 4.5V
   61   1             lcd_wait();
   62   1             
   63   1             //dummy inst 
   64   1             lcd_write_nibbles(0x30);
   65   1             lcd_write_nibbles(0x30);
   66   1             lcd_write_nibbles(0x30);
   67   1      
   68   1             //FUNCTION SET
   69   1             //001DL  N F XX
   70   1             //DL=1: 8bit
   71   1             //DL=0: 4bit
   72   1             //N=0: 1 line display
   73   1             //N=1: 2 line display
   74   1             //F=0: 5x7 dots
   75   1             //F=1: 5x10 dots
   76   1      
   77   1             //our case:
   78   1             //0010 1000
   79   1             lcd_en_set();
   80   1             lcd_out_data4(0x2);
   81   1             lcd_en_clr();
   82   1             lcd_wait();
   83   1      
   84   1             lcd_write_nibbles(0x28);
   85   1             
   86   1             //LCD ON
   87   1             lcd_write_nibbles(0x0E);
   88   1      
   89   1             //Clear Display
   90   1             lcd_write_nibbles(0x01);
   91   1      
   92   1             //Entry mode
   93   1             lcd_write_nibbles(0x06);
   94   1      
   95   1      }
   96          
   97          void lcd_putchar(unsigned char c){
   98   1      
   99   1             lcd_rs_set();
  100   1             lcd_write_nibbles(c);
  101   1      }
  102          
  103          void lcd_print(unsigned char* str){
  104   1            int i;
  105   1                 for (i=0;i<16 && str[i]!=0;i++){
  106   2                      lcd_putchar(str[i]);
  107   2                  }
  108   1      }
  109          
  110          //    driver taken from UC51    //
  111          
  112          /******************* internal Track XY cursor for NLs ***********************/
  113          //static signed char  lcd_pos_x, lcd_pos_y;
  114          signed char  lcd_pos_x, lcd_pos_y;
  115          
  116          
  117          /************************ lcd_setxy **************************/
  118          static void lcd_setxy(void){ //reentrant {  // local function!
  119   1          //uchar date;
  120   1          char date;
  121   1      
  122   1          if(lcd_pos_x>19){   // Ensure that all is inside the visible rectangle
  123   2              lcd_pos_x=-1;
  124   2              lcd_pos_y++;
  125   2          }
ARM COMPILER V0.07,  lcd                                                                   26/11/04  11:06:08  PAGE 3   

  126   1          if(lcd_pos_y>3){
  127   2              lcd_pos_y=0;
  128   2              lcd_pos_x=-1;
  129   2          }else if(lcd_pos_y<0){
  130   2              lcd_pos_y=3;
  131   2              lcd_pos_x=-1;
  132   2          }
  133   1      
  134   1          switch(lcd_pos_y){  // Here for a 4x40 Display
  135   2          //  case 1: date=64; break;
  136   2          //  case 2: date=20; break;
  137   2          //  case 3: date=84; break;
  138   2              case 1: date=0x40; break;
  139   2              case 2: date=0x14; break;
  140   2              case 3: date=0x54; break;
  141   2              default: date=0;
  142   2          }
  143   1          date|=128;
  144   1          
  145   1          if(lcd_pos_x>0) date+=lcd_pos_x;
  146   1          lcd_write_control(date);
  147   1          
  148   1      }
  149          
  150          /*********************** lcd_gotoxy() *************************/
  151          void lcd_gotoxy(char nx,char ny){// reentrant{
  152   1          lcd_pos_x=nx;
  153   1          lcd_pos_y=ny;
  154   1          lcd_setxy();
  155   1      }
  156          ///******************** lcd_clear() ****************/
  157          void lcd_clear(void){
  158   1          lcd_write_control(1);
  159   1          lcd_pos_x=0;
  160   1          lcd_pos_y=0;
  161   1      }
  162          
  163          // EOF
  164          
  165          
  166          

ARM COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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