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

📄 hd.lst

📁 一个用keil写的,动行在c8051f410上的驱动程序,在protes下仿真过.希望对初学者能有用.
💻 LST
字号:
C51 COMPILER V7.50   HD                                                                    10/28/2007 17:02:39 PAGE 1   


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

line level    source

   1          #include <c8051f410.H>     
   2          #define uchar unsigned char
   3          #define uint  unsigned int   
   4          #define ulon  unsigned long  
   5          #define LCD_DATA_PORT P1    // 液晶BD0~BD7与P0口相连    
   6          sbit    LCD_RS =P0^7;       // 液晶 RS  引脚与P2.0相接    
   7          sbit    LCD_RW =P0^6;       // 液晶 R/W 引脚与P2.1相接    
   8          sbit    LCD_E  =P0^5;       // 液晶 E   引脚与P2.2相接    
   9          sbit    LCD_BF =P1^7;       // 液晶 DB7 引脚与P0.7相接 Busy Flag    
  10                                       
  11          sbit    pul =P2^3; 
  12          sbit    clr =P2^4;   
  13          ulon cont,cont1;
  14           
  15          // 本地函数    
  16             
  17          void lcd_delay_us(unsigned char us) // 延时微秒@12M,ms最大值255    
  18          {    
  19   1          while(--us)    
  20   1          {    
  21   2              ;    
  22   2          }    
  23   1      }    
  24             
  25          void lcd_delay_ms(unsigned char ms) // 延时毫秒@12M,ms最大值255    
  26          {       
  27   1          unsigned char i;    
  28   1          while(ms--)    
  29   1          {    
  30   2              for(i = 0; i < 124; i++)    
  31   2              {    
  32   3                  ;    
  33   3              }    
  34   2          }    
  35   1      }    
  36             
  37             
  38          // 产生一个使能脉冲    
  39             
  40          void lcd_e_toggle(void)    
  41          {    
  42   1          LCD_E = 1;    
  43   1          lcd_delay_us(3);    
  44   1          LCD_E = 0;    
  45   1      }    
  46          
  47          
  48          
  49          // 循环检测LCD忙标志(BF),直到其值为0,方可执行下一指令    
  50          
  51          void lcd_wait_until_finish(void)    
  52          {    
  53   1          LCD_RW = 1;              // RW置1,状态为读    
  54   1          LCD_RS = 0;              // RS置0,读状态时RS需置低电平        
  55   1          LCD_E = 1;               // E 置1,读取信息    
C51 COMPILER V7.50   HD                                                                    10/28/2007 17:02:39 PAGE 2   

  56   1          lcd_delay_us(100);  
  57   1          while(LCD_BF)            // 循环直至BF=0    
  58   1          {                          
  59   2             ;                   
  60   2          }                      
  61   1          LCD_E = 0;               // E重置为0    
  62   1      }    
  63             
  64             
  65          // 公共函数    
  66             
  67          // 向LCD写命令字    
  68             
  69          void lcd_command(unsigned char cmd)    
  70          {   while(LCD_BF);
  71   1          LCD_RW = 0;              // RW置0,状态为写    
  72   1          LCD_RS = 0;              // RS置0,写入命令字    
  73   1          LCD_E = 0;      
  74   1          LCD_DATA_PORT = cmd;     // 将命令字cmd送入LCD的数据端口    
  75   1          lcd_e_toggle();          // 产生使能脉冲,在下降沿开始执行,将命令字读入    
  76   1          lcd_wait_until_finish(); // 等待执行完毕   
  77   1          
  78   1      }    
  79             
  80             
  81          // 设置显示位置(即写入显示地址),x,y均从0开始    
  82             
  83          void lcd_goto_xy(unsigned char x, unsigned char y)    
  84          {    
  85   1          unsigned char p;       // p为字符显示位置,即DDRAM中的地址    
  86   1          if (y==0)    
  87   1          {    
  88   2              p = 0x00 + x;      // (0,0)显示位置为0x00    
  89   2          }    
  90   1          else   
  91   1          {    
  92   2              p = 0x40 + x;      // (0,1)显示位置为0x40    
  93   2          }    
  94   1              
  95   1          lcd_command(p + 0x80); // 写入显示地址时DB7须为高电平,加0x80  
  96   1          
  97   1      }    
  98             
  99             
 100          // 写字符(传入的参数实际为所需显示字符的地址,即液晶字符产生器中字符的地址)    
 101             
 102          void lcd_putc(unsigned char c)    
 103          {   
 104   1          LCD_RW = 0;               // RW置0,状态为写    
 105   1          LCD_RS = 1;               // RS置1,写入数据    
 106   1          LCD_E = 0; 
 107   1          LCD_DATA_PORT = c;        // 将字符c(实际上是字符的地址)送入LCD数据端口    
 108   1          lcd_e_toggle();           // 使能脉冲    
 109   1          lcd_wait_until_finish();  // 等待完成    
 110   1      }    
 111             
 112             
 113          // 指定位置写字符    
 114             
 115          void lcd_xy_putc(unsigned char x, unsigned char y, unsigned char c)    
 116          {    
 117   1          lcd_goto_xy(x,y);    
C51 COMPILER V7.50   HD                                                                    10/28/2007 17:02:39 PAGE 3   

 118   1          lcd_putc(c);    
 119   1      }    
 120             
 121             
 122          // 写字符串    
 123             
 124          void lcd_puts(unsigned char *s)    
 125          {    
 126   1          while(*s)    
 127   1          {    
 128   2              lcd_putc(*s);    
 129   2              s++;    
 130   2          }    
 131   1      }    
 132             
 133             
 134          // 指定位置写字符串    
 135             
 136          void lcd_xy_puts(unsigned char x, unsigned char y, unsigned char *s)    
 137          {    
 138   1          lcd_goto_xy(x, y);    
 139   1          lcd_puts(s);    
 140   1      }    
 141             
 142          // LCD初始化    
 143             
 144          void lcd_init(void)    
 145          {    
 146   1          lcd_delay_ms(12);          // 上电后适当延时    
 147   1          lcd_command(0x38);         // 设为8位接口模式,显示2行字符   
 148   1          lcd_delay_ms(12);          // 上电后适当延时    
 149   1          lcd_command(0x38);         // 设为8位接口模式,显示2行字符 
 150   1          lcd_delay_ms(12);          // 上电后适当延时    
 151   1          lcd_command(0x38);         // 设为8位接口模式,显示2行字符 
 152   1              lcd_delay_ms(12);          // 上电后适当延时    
 153   1          lcd_command(0x38);         // 设为8位接口模式,显示2行字符
 154   1          lcd_command(0x06);         // 写入新数据后光标右移    
 155   1          lcd_command(0x0c);         // 显示功能开,不显示光标    
 156   1          lcd_command(0x01);         // 清屏
 157   1          
 158   1      } 
 159          
 160          
 161          swi(uchar swd)
 162          {switch(swd)
 163   1      {
 164   2      case 0:         lcd_puts("0");  break;
 165   2      case 1:                 lcd_puts("1");break;
 166   2      case 2:                 lcd_puts("2");break;
 167   2      case 3:                 lcd_puts("3");break;
 168   2      case 4:                 lcd_puts("4");break;
 169   2      case 5:                 lcd_puts("5");break;
 170   2      case 6:                 lcd_puts("6");break;
 171   2      case 7:                 lcd_puts("7");break;
 172   2      case 8:                 lcd_puts("8");break;
 173   2      case 9:                 lcd_puts("9");break;
 174   2      case 10:                lcd_puts("10");break;
 175   2      case 11:                lcd_puts(".");break;
 176   2      }
 177   1      }
 178             
 179          display()
C51 COMPILER V7.50   HD                                                                    10/28/2007 17:02:39 PAGE 4   

 180          {uchar buf;
 181   1      lcd_goto_xy(0,1);          // 字符位置:(0,1)    
 182   1      buf=cont1/100000;
 183   1      swi(buf);
 184   1      buf=(cont1%100000)/10000;
 185   1      swi(buf);
 186   1      
 187   1      swi(0x0b);
 188   1      
 189   1      buf=((cont1%100000)%10000)/1000;
 190   1      swi(buf);
 191   1      buf=(((cont1%100000)%10000)%1000)/100;
 192   1      swi(buf);
 193   1      buf=((((cont1%100000)%10000)%1000)%100)/10;
 194   1      swi(buf);
 195   1      buf=((((cont1%100000)%10000)%1000)%100)%10;
 196   1      swi(buf);
 197   1      }
 198          void main(void)   
 199          {   
 200   1        XBR1=0X40;
 201   1        PCA0MD=0X00;
 202   1        OSCICN|=0x03;
 203   1        lcd_delay_ms(10);
 204   1      
 205   1              P0=0;P1=0;P2=0;
 206   1              lcd_init();                // 初始化LCD   
 207   1                      lcd_goto_xy(0,0);          // 字符位置:(0,0)
 208   1                      
 209   1                  lcd_puts("87694112");
 210   1                      display();
 211   1          while(1)    
 212   1          {    
 213   2             if(pul==0){cont++;cont1=(cont*25)/8;while(pul==0){ display();}}     
 214   2          
 215   2             if(clr==0){cont=0;cont1=0; display();}  
 216   2          }    
 217   1      } 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    829    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   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 + -