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

📄 lcd_dot.lst

📁 关于51单片机的点阵LCD汇编源代码。中间说明了I/O口的连接关系。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  LCD_DOT                                                                08/22/2005 21:55:30 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE LCD_DOT
OBJECT MODULE PLACED IN .\LCD_dot.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE .\LCD_dot.c DEBUG OBJECTEXTEND

stmt level    source

   1          /////////////////////////////////////////////////////////////////////
   2          ///////////硬件连线说明:WR--AB4、RD--AB5、数据口0~7--DB0~DB7
   3          ///////////              C/D---AB6、FS--AB7、CE--OUTIO2
   4          /////////////////////////////////////////////////////////////////////
   5          #pragma	large
   6          #include <reg51.h>
   7          #include <string.h>
   8          #define COMW_ADD  ((unsigned char volatile xdata *)(0xE060))// 指令口写地址
   9          #define COMR_ADD  ((unsigned char volatile xdata *)(0xE050))// 指令口读地址
  10          #define DATW_ADD  ((unsigned char volatile xdata *)(0xE020))// 数据口写地址
  11          #define DATR_ADD  ((unsigned char volatile xdata *)(0xE010))// 数据口读地址
  12          
  13          char CM;						//指令寄存器
  14          char DT;						//数据寄存器
  15          
  16          extern int  addr;				//地址
  17          extern unsigned char show_com;
  18          extern char   char_data;
  19          extern unsigned char   bmp_dat[1028];
  20          int  			Start_addr;
  21          
  22          void lcd_dot_init(void);
  23          void Show_dot(unsigned char Y,unsigned char X);
  24          void Show_text(unsigned char line,unsigned char col,unsigned char i);
  25          void Show_string(unsigned char line,unsigned char col,unsigned char *string);
  26          void Show_han(unsigned char line,unsigned char col,unsigned char *ch);
  27          void clear_LCD();
  28          void WRITE_COM(void);
  29          void WRITE_DAT(void);
  30          void Set_ADD();
  31          void Get_dot_ADD(unsigned char Y,unsigned char X);
  32          void Get_show_com(unsigned char i);
  33          void lcd_delay();
  34          void Show_int_num_dot(unsigned char line,unsigned char col,unsigned int temp,char wei,unsigned char float_
             -);
  35          
  36          char State_0_1_test();
  37          char State_2_test();
  38          
  39          void lcd_dot_init(void)
  40          { 
  41   1      
  42   1      ////////////////////////////清屏///////////////////////////////
  43   1      clear_LCD();
  44   1      
  45   1      //////////////////////Set text home address 0x2000////////////
  46   1      DT=0x00;
  47   1      WRITE_DAT();
  48   1      DT=0x04;
  49   1      WRITE_DAT();
  50   1      CM=0x40;
  51   1      WRITE_COM();
  52   1      
  53   1      ///////////////////////Set text area///////////////////////////
  54   1      DT=0x10;
C51 COMPILER V6.12  LCD_DOT                                                                08/22/2005 21:55:30 PAGE 2   

  55   1      WRITE_DAT();
  56   1      DT=0x00;
  57   1      WRITE_DAT();
  58   1      CM=0x41;
  59   1      WRITE_COM();
  60   1      
  61   1        
  62   1      /////////////////////Set graphic home address 0x0000////////////
  63   1      DT=0x00;
  64   1      WRITE_DAT();
  65   1      DT=0x00;
  66   1      WRITE_DAT();
  67   1      CM=0x42;
  68   1      WRITE_COM();
  69   1      
  70   1      
  71   1      /////////////////////Set graphic area////////////////////////////
  72   1      DT=0x10;
  73   1      WRITE_DAT();
  74   1      DT=0x00;
  75   1      WRITE_DAT();
  76   1      CM=0x43;
  77   1      WRITE_COM();
  78   1      
  79   1      
  80   1      /////////////////////Mode set////////////////////////////////////
  81   1      CM=0x80;
  82   1      WRITE_COM();
  83   1      
  84   1      ////////////////////Display mode//////////////////////////////////
  85   1      CM=0x9c;
  86   1      WRITE_COM();
  87   1      
  88   1      }
  89          
  90          
  91          /////////////////////////////////////LCD点显示///////////////////////////////////////  
  92          //(Y,X)为坐标值,左下方为(0,0);Y为纵向坐标:(0~255),X为横向坐标:(0~127)
  93          /////////////////////////////////////////////////////////////////////////////////////
  94          void Show_dot(unsigned char Y,unsigned char X) 
  95          { 
  96   1      	Start_addr=0;
  97   1      	Get_dot_ADD(Y,X);		//获取显示地址
  98   1      	Set_ADD();				//建立地址
  99   1      	Get_show_com(X);		//获取显示数据
 100   1      	CM=show_com;            //传送数值
 101   1         	WRITE_COM();
 102   1      }
 103          
 104          
 105          ////////////////////////////////////LCD字符显示///////////////////  /////////////////
 106          //(line,col)为坐标值,左上方为(0,0);line为行数:(0~7),col为列数:(0~15)
 107          /////////////////////////////////////////////////////////////////////////////////////
 108          void Show_text(unsigned char line,unsigned char col,unsigned char i)
 109          {
 110   1      	Start_addr=0x0400;
 111   1      	addr=Start_addr+16*line+col;//获取显示地址
 112   1      	Set_ADD();	//建立地址
 113   1      	DT=i;
 114   1      	*DATW_ADD=DT;
 115   1      	CM=0xC4;
 116   1      	WRITE_COM();
C51 COMPILER V6.12  LCD_DOT                                                                08/22/2005 21:55:30 PAGE 3   

 117   1      }
 118          
 119          
 120          
 121          ////////////////////////////////////LCD字符串显示///////////////////  /////////////////
 122          //(line,col)为坐标值,左上方为(0,0);line为行数:(0~7),col为列数:(0~15)
 123          /////////////////////////////////////////////////////////////////////////////////////
 124          void   Show_string(unsigned char line,unsigned char col,unsigned char *string)
 125          {
 126   1      unsigned char str_len;
 127   1      unsigned char cnt;
 128   1      str_len=strlen(string);
 129   1      for(cnt=0;cnt<str_len-1;cnt++)
 130   1      {
 131   2      	Show_text(line,col+cnt,string[cnt]-32);
 132   2      }
 133   1      
 134   1      }
 135          
 136          
 137          
 138          /////////////////////////////////////LCD汉字显示/////////////////////////////////////  
 139          //(line,col)为坐标值,左上方为(0,0);line为行数:(0~63),col为列数:(0~7)
 140          /////////////////////////////////////////////////////////////////////////////////////
 141          void Show_han(unsigned char line,unsigned char col,unsigned char *ch)
 142          {
 143   1      	unsigned char cnt;
 144   1      	Start_addr=0x0000;
 145   1      	addr=Start_addr+16*line+col*2;		//获取显示地址
 146   1      	
 147   1      	for(cnt=0;cnt<32;cnt+=2)
 148   1      	{
 149   2      	Set_ADD();							//建立地址
 150   2      	CM=0xB0;
 151   2      	WRITE_COM();
 152   2      		DT=ch[cnt];             		//传送数值
 153   2         		WRITE_DAT();
 154   2      	 	DT=ch[cnt+1];             		//传送数值
 155   2         		WRITE_DAT();
 156   2      	CM=0xB2;
 157   2      	WRITE_COM();
 158   2      	addr+=16;
 159   2      	}
 160   1      	addr=0;
 161   1      	Set_ADD();
 162   1      }
 163          
 164          /////////////////////////////////////////////////////////////////////////////////////
 165          /////////////////////////////////////LCD图形显示/////////////////////////////////////  
 166          /////////////////////////////////////////////////////////////////////////////////////
 167          void Show_bmp()
 168          {
 169   1      	int i;
 170   1      //////显示图形
 171   1      	DT=0x00;
 172   1      	WRITE_DAT();
 173   1      	DT=0x00;
 174   1      	WRITE_DAT();
 175   1      	CM=0x24;
 176   1      	WRITE_COM();
 177   1      
 178   1      	CM=0xB0;
C51 COMPILER V6.12  LCD_DOT                                                                08/22/2005 21:55:30 PAGE 4   

 179   1      	WRITE_COM();
 180   1      	for(i=0;i<1024;i++)
 181   1      	 {
 182   2      		DT=bmp_dat[i];            		 //传送数值
 183   2         		WRITE_DAT();
 184   2      	 }
 185   1      	CM=0xB2;
 186   1      	WRITE_COM();
 187   1      	addr=0;
 188   1      	Set_ADD();
 189   1      }
 190          
 191          
 192          
 193          ////////////////////////写指令代码子程序//////////////////////
 194          void WRITE_COM(void)
 195          {
 196   1      while(!State_0_1_test()) ;
 197   1      *COMW_ADD=CM;							//写指令代码
 198   1      }
 199          
 200          
 201          /////////////////////////写数据代码子程序/////////////////////
 202          void WRITE_DAT(void)
 203          {
 204   1      while(!State_0_1_test()) ;
 205   1      *DATW_ADD=DT;							//写指令代码
 206   1      }
 207          
 208          //////////////////////////判断状态0、1/////////////////////////
 209          char State_0_1_test()
 210          {
 211   1      	char temp;
 212   1      	temp=*COMR_ADD;
 213   1      	temp&=0x03;
 214   1      	if(temp==0x03) return 1;
 215   1      	else return 0;
 216   1      }
 217          
 218          
 219          ///////////////////////////判断状态2////////////////////////////
 220          char State_2_test()
 221          {
 222   1      	char temp;
 223   1      	temp=*COMR_ADD;
 224   1      	temp&=0x04;
 225   1      	if(temp==0x04) return 1;
 226   1      	else return 0;
 227   1      }
 228          
 229          
 230          ////////////////////////////清屏////////////////////////////////
 231          void clear_LCD()
 232          {
 233   1      	int i;

⌨️ 快捷键说明

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