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

📄 lcd.lst

📁 关于51单片机的点阵LCD汇编源代码。中间说明了I/O口的连接关系。
💻 LST
字号:
C51 COMPILER V6.12  LCD                                                                    08/14/2005 13:21:18 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\LCD.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE .\LCD.c DEBUG OBJECTEXTEND

stmt level    source

   1          #pragma	large
   2          #include <reg51.h>
   3          #include <string.h>
   4          #define COMW_ADD  ((unsigned char volatile xdata *)(0xE060))// 指令口写地址
   5          #define COMR_ADD  ((unsigned char volatile xdata *)(0xE050))// 指令口读地址
   6          #define DATW_ADD  ((unsigned char volatile xdata *)(0xE020))// 数据口写地址
   7          #define DATR_ADD  ((unsigned char volatile xdata *)(0xE010))// 数据口读地址
   8          
   9          sbit ACC_7=ACC^7;
  10          
  11          char COM;//指令寄存器
  12          char DAT;//数据寄存器
  13          
  14          void lcd_init(void);
  15          void display(char ch,char i);
  16          void clear_LCD();
  17          void WRITE_COMMAND(void);
  18          void WRITE_DATA(void);
  19          void Show_data(char dat);
  20          void Set_ADD(int add);
  21          int  Get_ADD(unsigned char dat,unsigned char cnt);
  22          char Get_char(int add,char i);
  23          void lcd_delay();
  24          
  25          char State_0_1_test();
  26          char State_2_test();
  27          
  28          void lcd_init(void)
  29          { 
  30   1      
  31   1      //清屏
  32   1      clear_LCD();
  33   1      
  34   1      /*
  35   1      //Set text home address 0x0000
  36   1      DAT=0x00;
  37   1      WRITE_DATA();
  38   1      DAT=0x00;
  39   1      WRITE_DATA();
  40   1      COM=0x40;
  41   1      WRITE_COMMAND();
  42   1      
  43   1      //Set text area
  44   1      DAT=0x0F;
  45   1      WRITE_DATA();
  46   1      DAT=0x00;
  47   1      WRITE_DATA();
  48   1      COM=0x41;
  49   1      WRITE_COMMAND();
  50   1      */
  51   1      
  52   1        
  53   1      //Set graphic home address 0x0000
  54   1      DAT=0x00;
  55   1      WRITE_DATA();
C51 COMPILER V6.12  LCD                                                                    08/14/2005 13:21:18 PAGE 2   

  56   1      DAT=0x00;
  57   1      WRITE_DATA();
  58   1      COM=0x42;
  59   1      WRITE_COMMAND();
  60   1      
  61   1      
  62   1      //Set graphic area
  63   1      DAT=0x10;
  64   1      WRITE_DATA();
  65   1      DAT=0x00;
  66   1      WRITE_DATA();
  67   1      COM=0x43;
  68   1      WRITE_COMMAND();
  69   1      
  70   1      //Mode set
  71   1      COM=0x80;
  72   1      WRITE_COMMAND();
  73   1      
  74   1      
  75   1      
  76   1      //Display mode
  77   1      COM=0x98;
  78   1      WRITE_COMMAND();
  79   1      
  80   1      
  81   1      COM=0xC4;
  82   1      WRITE_COMMAND();
  83   1      
  84   1      }
  85          
  86          ///////////////////LCD显示///////////////////  
  87          void display(char V,char i) 
  88          { 
  89   1      	char ch;
  90   1      	int  add_temp;
  91   1      	add_temp=Get_ADD(V,i);//获取显示地址
  92   1      	ch=Get_char(add_temp,i);//获取显示数据
  93   1      	Set_ADD(add_temp);	//建立地址
  94   1      	Show_data(ch);
  95   1      }
  96          
  97          
  98          //写指令代码子程序
  99          void WRITE_COMMAND(void)
 100          {
 101   1      while(!State_0_1_test()) ;
 102   1      *COMW_ADD=COM;			//写指令代码
 103   1      }
 104          
 105          
 106          //写数据代码子程序
 107          void WRITE_DATA(void)
 108          {
 109   1      while(!State_0_1_test()) ;
 110   1      *DATW_ADD=DAT;			//写指令代码
 111   1      }
 112          
 113          
 114          char State_0_1_test()
 115          {
 116   1      	char temp;
 117   1      	temp=*COMR_ADD;
C51 COMPILER V6.12  LCD                                                                    08/14/2005 13:21:18 PAGE 3   

 118   1      	temp&=0x03;
 119   1      	if(temp==0x03) return 1;
 120   1      	else return 0;
 121   1      }
 122          
 123          char State_2_test()
 124          {
 125   1      	char temp;
 126   1      	temp=*COMR_ADD;
 127   1      	temp&=0x04;
 128   1      	if(temp==0x04) return 1;
 129   1      	else return 0;
 130   1      }
 131          
 132          void clear_LCD()
 133          {
 134   1      	int i;
 135   1      	//显示数据清零
 136   1      	DAT=0x00;
 137   1      	WRITE_DATA();
 138   1      	DAT=0x00;
 139   1      	WRITE_DATA();
 140   1      	COM=0x24;
 141   1      	WRITE_COMMAND();
 142   1      
 143   1      	COM=0xB0;
 144   1      	WRITE_COMMAND();
 145   1      	for(i=0;i<2048;i++)
 146   1      	 {
 147   2      		DAT=0;             //传送数值
 148   2         		WRITE_DATA();
 149   2      	 }
 150   1      	COM=0xB2;
 151   1      	WRITE_COMMAND();
 152   1      	Set_ADD(0);
 153   1      }
 154          
 155          //设置地址
 156          void Set_ADD(int add)
 157          {
 158   1      char low;
 159   1      char heigh;
 160   1      low=add;
 161   1      add>>=8;
 162   1      heigh=add;
 163   1      DAT=low;
 164   1      WRITE_DATA();
 165   1      DAT=heigh;
 166   1      WRITE_DATA();
 167   1      COM=0x24;
 168   1      WRITE_COMMAND();
 169   1      }
 170          
 171          
 172          int   Get_ADD(unsigned char dat,unsigned char cnt)
 173          {
 174   1      	char temp;
 175   1      	char add;
 176   1         	int  ADDR=512;
 177   1      	temp=dat/4;
 178   1      	temp-=31;
 179   1      	add=cnt/8;
C51 COMPILER V6.12  LCD                                                                    08/14/2005 13:21:18 PAGE 4   

 180   1      	ADDR-=(temp*16);
 181   1      	ADDR+=add;
 182   1      	return ADDR;
 183   1      }
 184          
 185          
 186          char Get_char(int add,char i)
 187          {
 188   1      	char ch_temp;
 189   1      	char count;
 190   1      	Set_ADD(add);
 191   1      	ch_temp=*DATR_ADD;
 192   1      	count=i%8;
 193   1      	switch(count)
 194   1      	{
 195   2      	case 0: return 0xFF;break;
 196   2      	case 1: return 0xFE;break;
 197   2      	case 2: return 0xFD;break;
 198   2      	case 3: return 0xFC;break;
 199   2      	case 4: return 0xFB;break;
 200   2      	case 5: return 0xFA;break;
 201   2      	case 6: return 0xF9;break;
 202   2      	case 7: return 0xF8;break;
 203   2      	default:return F0;
 204   2      	}	
 205   1      }
 206          
 207          //显示数据
 208          void Show_data(char dat)
 209          {
 210   1      	COM=dat;             //传送数值
 211   1         	WRITE_COMMAND();
 212   1      }
 213          
 214          
 215          void lcd_delay()
 216          {
 217   1      int i=2048;
 218   1      while(i--);
 219   1      }


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