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

📄 复件 12864.lst

📁 一个用keil写的,动行在c8051f410上的自己做的开关电源的驱动程序,在protes下仿真过.希望对初学者能有用.
💻 LST
字号:
C51 COMPILER V7.50   复件_12864                                                            10/05/2007 14:13:54 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 复件_12864
OBJECT MODULE PLACED IN .\复件 12864.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE D:\Documents and Settings\hp\桌面\复件 12864.c BROWSE DEBUG OBJECTEXTEND PR
                    -INT(.\复件 12864.lst) OBJECT(.\复件 12864.obj)

line level    source

   1          #include <c8051f410.H>
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          
   6          #define LCD_PORT P2                      
   7          #define Left  2                                     
   8          #define Right 1
   9          sbit  LCD_Busy=P2^7;   
  10          sbit  LCD_EN = P1^7;
  11          sbit  LCD_RW = P1^6;
  12          sbit  LCD_RS = P1^5;
  13          sbit  LCD_CS1= P1^4;
  14          sbit  LCD_CS2= P1^3;
  15          sbit  LCD_RST= P1^1;
  16          uchar DisBuf[32],Page_Num,Clm_Num,keysetin,digitalin,i,k,clmstart,digital,j,page;
  17          /*---------------------------------------------------------------------------
  18          下面这个函数用于左半屏数字位的显示示,只需给定页地址,起始例
  19          ---------------------------------------------------------------------------*/
  20          digitaloutleft()
  21          {
  22   1      for(j=0;j<2;j++)
  23   1      {
  24   2        LCD_WriteCommand((page+j),Left);
*** WARNING C206 IN LINE 24 OF D:\DOCUMENTS AND SETTINGS\HP\桌面\复件 12864.C: 'LCD_WriteCommand': missing function-prot
             -otype
*** ERROR C267 IN LINE 24 OF D:\DOCUMENTS AND SETTINGS\HP\桌面\复件 12864.C: 'LCD_WriteCommand': requires ANSI-style pro
             -totype
  25   2        LCD_WriteCommand(clmstart,Left);
  26   2      for(i=0;i<7;i++)
  27   2      {
  28   3        digitalin=digital[k][7*j+i];
  29   3        if(keysetin==1){digitalin=~digital[k][7*j+i];};
  30   3        
  31   3        LCD_WriteData(digitalin,Left); 
  32   3      }}
  33   1      keysetin=0;
  34   1      }
  35          
  36          /*---------------------------------------------------------------------------
  37          下面这个函数用于右半屏数字位的显示,只需给定页地址,起始例
  38          ---------------------------------------------------------------------------*/
  39          digitaloutright(void)
  40          {
  41   1      for(j=0;j<2;j++)
  42   1      {
  43   2        LCD_WriteCommand((page+j),Right);
  44   2        LCD_WriteCommand(clmstart,Right);
  45   2      for(i=0;i<7;i++)
  46   2      {
  47   3         digitalin=digital[k][7*j+i];
  48   3         if(keysetin==1){digitalin=~digital[k][7*j+i];};
  49   3        
  50   3        LCD_WriteData(digitalin,Right); 
C51 COMPILER V7.50   复件_12864                                                            10/05/2007 14:13:54 PAGE 2   

  51   3      }}
  52   1      keysetin=0;
  53   1      }
  54          
  55          
  56          void Delay_us(unsigned int DelayTime)
  57           {
  58   1         while(DelayTime) DelayTime--;
  59   1        }
  60          
  61          void Delay_x10ms(unsigned char DelayTime)   //***************10ms延时**********//
  62             {
  63   1             unsigned char i,j,k;
  64   1             for(i=0;i<DelayTime;i++)
  65   1                for(j=0;j<10;j++)
  66   1                   for(k=0;k<120;k++) {;}
  67   1          }
  68          /*---------------------------------------------------------------------------- 
  69          下面这个函数用于液晶模块的忙信号检测。 
  70          ----------------------------------------------------------------------------*/ 
  71          void LCD_Check_Busy(void)
  72            {
  73   1         while(1)
  74   1              {  
  75   2                LCD_EN = 0;
  76   2                LCD_RS = 0;
  77   2                Delay_us(2);
  78   2                LCD_RW = 1;
  79   2                LCD_PORT = 0xff;
  80   2                LCD_EN = 1;
  81   2                if(!LCD_Busy) break;
  82   2           }
  83   1         LCD_EN = 0;
  84   1        }
  85          
  86          /*---------------------------------------------------------------------------- 
  87          下面这个函数用于向液晶模块写入控制指令代码。 
  88          函数入口参数:Command ------ 向液晶模块写入的控制指令代码 。 
  89                        CS_Num  ------ 左右半屏的选数值 
  90          ----------------------------------------------------------------------------*/ 
  91          void LCD_WriteCommand(uchar Command, uchar CS_Num) 
  92          { 
  93   1        LCD_Check_Busy(); 
  94   1        if(CS_Num==1)                 /*选择左半屏*/
  95   1         {
  96   2           LCD_CS1 = 0;
  97   2               LCD_CS2 = 1;
  98   2              }
  99   1        else if(CS_Num==2)    /*选择右半屏*/
 100   1         {
 101   2           LCD_CS1 = 1;
 102   2               LCD_CS2 = 0;
 103   2              }
 104   1        LCD_EN = 0;           /* 使能信号为L */ 
 105   1        LCD_RS = 0;           /* 置寄存器选择为L */ 
 106   1        LCD_RW = 0;           /* 置读/写选择为L */ 
 107   1        LCD_PORT = Command;   /* 将控制指令代码输出到的数据端口 */ 
 108   1        LCD_EN = 1;           /* 使能信号为H */ 
 109   1        Delay_us(5);          /* 延时2us */ 
 110   1        LCD_EN = 0;           /* 使能信号为L */ 
 111   1       // LCD_CS1 = 0;          /* 置片选1为L */ 
 112   1       // LCD_CS2 = 0;          /* 置片选2为L */ 
C51 COMPILER V7.50   复件_12864                                                            10/05/2007 14:13:54 PAGE 3   

 113   1      
 114   1      } 
 115          
 116          
 117          /*---------------------------------------------------------------------------- 
 118          下面这个函数用于向液晶模块写入显示数据。 
 119          函数入口参数:Data------ 向液晶模块写入的显示数据 。 
 120                      CS_Num-------左右半屏的选数值 
 121          ----------------------------------------------------------------------------*/ 
 122          void LCD_WriteData(uchar Data,uchar CS_Num) 
 123          { 
 124   1        LCD_Check_Busy();
 125   1        if(CS_Num==1)          /*选择左半屏*/
 126   1         {
 127   2           LCD_CS1 = 0;
 128   2               LCD_CS2 = 1;
 129   2              }
 130   1        else if(CS_Num==2)  /*选择右半屏*/
 131   1         {
 132   2           LCD_CS1 = 1;
 133   2               LCD_CS2 = 0;
 134   2              }
 135   1        LCD_EN = 0;
 136   1        LCD_RS = 1;       /* 置寄存器选择为H */ 
 137   1        LCD_RW = 0;       /* 置读/写选择为L */  
 138   1        LCD_PORT = Data;  /* 将显示数据输出到的数据端口 */ 
 139   1        LCD_EN = 1;       /* 使能信号为H */ 
 140   1        Delay_us(5);      /* 延时2us */ 
 141   1        LCD_EN = 0;       /* 使能信号为L */ 
 142   1        //LCD_CS1= 0;       /* 置片选1为L */ 
 143   1       // LCD_CS2= 0;       /* 置片选2为L */ 
 144   1      
 145   1      }    
 146          
 147          /*---------------------------------------------------------------------------
 148          下面这个函数用于液晶模块的清屏。
 149          ---------------------------------------------------------------------------*/
 150          void LCD_CLR(uchar Side_Num)
 151           {
 152   1         uchar i,k,COM;
 153   1         
 154   1         for(i=0;i<8;i++)                               
 155   1         {
 156   2               COM=0xB8+i;
 157   2           LCD_WriteCommand(COM,Side_Num);    
 158   2               COM=0x40;
 159   2               LCD_WriteCommand(COM,Side_Num);  
 160   2                       
 161   2           for(k=0;k<64;k++)
 162   2            {
 163   3                  LCD_WriteData(0xf0,Side_Num);
 164   3                 }
 165   2              }
 166   1               Delay_us(2);
 167   1        }
 168          
 169          
 170          /*---------------------------------------------------------------------------
 171          下面这个函数用于向液晶模块初始化。
 172          如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
 173          ---------------------------------------------------------------------------*/
 174          void LCD_Initial(void) 
C51 COMPILER V7.50   复件_12864                                                            10/05/2007 14:13:54 PAGE 4   

 175          {   
 176   1        LCD_RST = 0;    /* 置复位信号为低电平 */ 
 177   1        Delay_us(2);  
 178   1        LCD_RST = 1;    /* 置复位信号为高电平 */  
 179   1        LCD_WriteCommand(0x3F,Left);    /*显示开*/
 180   1        
 181   1        LCD_WriteCommand(0x3F,Right);
 182   1        LCD_WriteCommand(0xC0,Left);    /*起始行*/
 183   1        LCD_WriteCommand(0xC0,Right);                     
 184   1        LCD_WriteCommand(0xB8,Left);    /*起始页*/
 185   1        LCD_WriteCommand(0xB8,Right);  
 186   1        LCD_WriteCommand(0x40,Left);    /*起始列*/
 187   1        LCD_WriteCommand(0x40,Right); 
 188   1      } 
 189          
 190          
 191          
 192          /*---------------------------------------------------------------------------
 193          下面这个函数为主函数,根据程序要实现的功能写相应的应用程序
 194          ---------------------------------------------------------------------------*/
 195          void main(void) 
 196          { 
 197   1       uchar tempdata,page,clum,i,j,k;
 198   1       XBR1=0X40;
 199   1       PCA0MD=0X00;
 200   1       
 201   1        LCD_Initial(); 
 202   1        
 203   1        LCD_CLR(Left);
 204   1        LCD_CLR(Right);
 205   1        for(;;)
 206   1        {  
 207   2        digitaloutleft();digitaloutright();
 208   2        }
 209   1      }
 210          
 211          
 212          
 213          

C51 COMPILATION COMPLETE.  1 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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