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

📄 x.lst

📁 020LCD12864显示数字文字适合初学者
💻 LST
字号:
C51 COMPILER V8.05a   X                                                                    08/04/2008 12:25:33 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE X
OBJECT MODULE PLACED IN x.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE x.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <c8051f020.h>
   2          
   3          /*
   4          
   5          LCD_
   6          RS  <P4.0>         
   7          WR  <P4.1>     
   8          E   <P4.2>
   9          要求:P4.0,4.1,4.2设置为推拉输出;  
  10          P5口设置为带弱上拉的漏极输出,3.3V电平标准即可
  11          
  12          */
  13          #define  uchar unsigned char
  14          #define  uint unsigned int
  15          
  16          unsigned char code dig[]={"0123456789"};
  17          
  18          
  19          /***************************时钟配置*****************************/
  20          void SYSCLK_Init (void)
  21          {  
  22   1         int i;                           // delay counter
  23   1         OSCXCN = 0x67;                   // start external oscillator with         // 22.1184MHz    crystal
  24   1         for (i=0; i < 512; i++) ;        // Wait for osc. to start up
  25   1         while (!(OSCXCN & 0x80)) ;       // Wait for crystal osc. to settle
  26   1         OSCICN = 0x88;                   // 选择外部时针   
  27   1      }
  28          
  29          /***************************端口设置*****************************/
  30          void port_init(void)
  31          {
  32   1         XBR0|= 0x04;                     // 串口能用
  33   1         XBR1= 0x00;
  34   1         XBR2= 0x40;                      // Enable crossbar and weak pull-ups
  35   1         ////
  36   1         P0MDOUT |= 0x3D;                   
  37   1         P3MDOUT = 0xff;                              //P3.0 P3.2为开漏输出   ad7650用
  38   1         P1MDOUT = 0xff;                      //P1口设置为push-pull输出
  39   1         P2MDOUT = 0xff;                      //P2口设置为push-pull输出
  40   1         //P7=0X0F;
  41   1      }
  42          
  43          void lcd_delay()
  44          {       unsigned char delayTime;
  45   1              for(delayTime=50;delayTime>0;delayTime--);
  46   1      }
  47            
  48          /* 返回值Status:        当前地址计数器的值.     */
  49          unsigned char LCDBusyWait()                                                     //等待LCD就绪
  50          {
  51   1              unsigned char Status;
  52   1              P4&=0xfe;  //11111110,LCD_RS=0
  53   1          lcd_delay();
  54   1              
  55   1              P4|=0x02;//00000010,LCD_RW=1
C51 COMPILER V8.05a   X                                                                    08/04/2008 12:25:33 PAGE 2   

  56   1          lcd_delay();  
  57   1              
  58   1              P5 = 0xFF;
  59   1              P4|=0x04;//00000100,LCD_E=1
  60   1      
  61   1              lcd_delay();   
  62   1              Status=P5;
  63   1              P4&=0xfB;//11111011,LCD_E=0
  64   1      
  65   1              while(Status & 0x80)
  66   1              {
  67   2              lcd_delay(); 
  68   2                      P4|=0x04;//00000100,LCD_E=1
  69   2              lcd_delay();  
  70   2                      Status=P5;
  71   2                      lcd_delay(); 
  72   2                      P4&=0xfB;//11111011,LCD_E=0
  73   2      
  74   2              }
  75   1              P4&=0xfd;//11111101,LCD_RW=0
  76   1      
  77   1              return Status;
  78   1      }
  79          
  80          void WriteLCD_Data(unsigned char Data)                  //向LCD写入一个字节的数据
  81          {
  82   1              LCDBusyWait();
  83   1              P4|=0x01;//00000001,LCD_RW=0,LCD_RS=1
  84   1      
  85   1              lcd_delay();     
  86   1              P5 = Data;
  87   1              lcd_delay();
  88   1              P4|=0x04;//00000100,LCD_E=1
  89   1      
  90   1              lcd_delay();
  91   1              P4&=0xfB;//11111011,LCD_E=0
  92   1      
  93   1      }
  94          
  95          void WriteLCD_Command(unsigned char Command)    //向LCD写入一个字节的命令
  96          {
  97   1              LCDBusyWait();
  98   1              P4&=0xFE;//11111110,LCD_RS=0
  99   1      
 100   1              lcd_delay();
 101   1              P5 = Command;
 102   1              lcd_delay();
 103   1              P4|=0x04;//00000100,LCD_E=1
 104   1      
 105   1              lcd_delay();
 106   1              P4&=0xfB;//11111011,LCD_E=0
 107   1      
 108   1      }
 109          
 110          //改变地址,实现了逐行显示
 111          unsigned char ChangeAddress(unsigned char StartAddress)
 112          {
 113   1              switch(StartAddress)
 114   1              {
 115   2                      case 0x87:WriteLCD_Command(0x90);StartAddress=0x90;break;
 116   2                      case 0x8F:WriteLCD_Command(0x98);StartAddress=0x98;break;
 117   2                      case 0x97:WriteLCD_Command(0x88);StartAddress=0x88;break;
C51 COMPILER V8.05a   X                                                                    08/04/2008 12:25:33 PAGE 3   

 118   2                      default:StartAddress+=1;
 119   2              }
 120   1              return StartAddress;
 121   1      }
 122          
 123          /*****************************显示字符串***************************************/
 124          
 125          void WriteLCD(unsigned char StartAddress,unsigned char Size,unsigned char Charactors[])
 126          {
 127   1              unsigned char *i=Charactors;      //字符串的首地址
 128   1              WriteLCD_Command(StartAddress);
 129   1              if(Size)                //Size不为0
 130   1              {
 131   2              //      bit Over=0;
 132   2                      while(i<(Charactors+Size))              //判断字符串结尾
 133   2                      {
 134   3      
 135   3                              WriteLCD_Data(*i);
 136   3                              i++;
 137   3                              //WriteLCD_Data(*i);
 138   3                              //i++;
 139   3                              StartAddress=ChangeAddress(StartAddress); //改变地址,实现了逐行显示
 140   3                      }
 141   2              }
 142   1              else                    //Size为0
 143   1              {
 144   2                      while(*i)                                               //判断字符串结尾,*i为0代表结束
 145   2                      {
 146   3                              WriteLCD_Data(*i);
 147   3                              i++;
 148   3                              WriteLCD_Data(*i);
 149   3                              i++;
 150   3                              StartAddress=ChangeAddress(StartAddress);
 151   3                      }
 152   2              }
 153   1      }
 154          /****************************显示数字********************************/
 155          
 156          void Show_num(unsigned char address,unsigned int num)
 157          {
 158   1       unsigned char k,j,i=0;
 159   1       unsigned char w_data[5];
 160   1       WriteLCD_Command(address);
 161   1       do
 162   1         {
 163   2          w_data[i++]=num%10;
 164   2              num=num/10;
 165   2              j=i;
 166   2         }while(num!=0); 
 167   1              
 168   1              for(k=j;j>0;j--)
 169   1              {
 170   2                      WriteLCD_Data(dig[w_data[j-1]]);
 171   2              }   
 172   1      }
 173          
 174          void main()
 175          {
 176   1          SYSCLK_Init ();
 177   1              port_init();
 178   1              WriteLCD_Command(0x30);   //功能设置---8BIT控制界面,基本指令集
 179   1              WriteLCD_Command(0x0C);   //显示打开,光标关,反白显示关
C51 COMPILER V8.05a   X                                                                    08/04/2008 12:25:33 PAGE 4   

 180   1              WriteLCD_Command(0x01);   //清除屏幕显示,将DDRAM的地址计数器归零
 181   1              WriteLCD(0x81,0,"DDS AD9852");
 182   1              while(1)
 183   1              {
 184   2          Show_num(0x90,6140);
 185   2              } 
 186   1      
 187   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    427    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      14
   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 + -