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

📄 lcd6963.lst

📁 6963控制其的液晶测试程序
💻 LST
字号:
C51 COMPILER V6.20c  LCD6963                                                               09/06/2005 16:44:34 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE LCD6963
OBJECT MODULE PLACED IN lcd6963.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd6963.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <absacc.h>         //绝对地址访问
   2          #include <reg51.h>          //
   3          #include <intrins.h>        //内部函数
   4          #define cli() _asm("cli\n")
   5          /* disable interrupts*/
   6          #define sei() _asm("sei\n")
   7          #define nop() _asm("nop\n")
   8          
   9          /*数据类型定义部分*/
  10          #define uint  unsigned int
  11          #define uchar unsigned char
  12          #define Uint  unsigned int
  13          #define Uchar unsigned char
  14          
  15          #define rdcommand    XBYTE[0x0ff00]     
  16          #define rdshuju      XBYTE[0x0fe00]     
  17          
  18          Uchar data command,shuju;
  19          uchar data temp;
  20          uint  data i,k;
  21          uint  data shuju1,shuju2;
  22          uint  data start=0x0800;
  23          sbit    p1_2=P1^2;
  24          sbit    ret=P1^0;     
  25          sbit    fs=P1^1;  
  26          
  27          uint  data ELength=21;
  28          uchar code ETable[21]={0x37,0x25,0x2c,0x23,0x2f,0x2d,0x25,0X00,0x34,0x2f,0X00,//"WELCOME TO "
  29          		       0x35,0x33,0x25,0x00,0x34,0x16,0x19,0x16,0x13,0x23};//"USE T6963C"
  30          
  31          uint  data CCLength=352;
  32          uchar code EXPRT1[22]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa
             -0,0xa2,0xa4,0xa6,0xa8,0xaa};
  33          uchar code EXPRT2[22]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8f,0x91,0x93,0x95,0x97,0x99,0x9b,0x9d,0x9f,0xa
             -1,0xa3,0xa5,0xa7,0xa9,0xab};					
  34          uchar code CCTable[352]={
  35          	0x01,0x3F,0x24,0x3F,0x26,0x2D,0x34,0x25,0x2F,0x20,0x2F,0x20,0x5F,0x40,0x82,0x01,
  36          	0x00,0xFE,0x20,0xFC,0x30,0x68,0xA6,0x20,0xF8,0x80,0xFC,0x80,0xFE,0x80,0x80,0x00,//摩
  37          	0x20,0x20,0x23,0xF8,0x20,0x20,0x28,0x37,0xE0,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,
  38          	0x00,0x3C,0xC0,0x40,0x40,0x40,0x40,0xFE,0x40,0x40,0x40,0x40,0x42,0x42,0x3E,0x00,//托
  39          	0x00,0x3F,0x22,0x22,0x22,0x3F,0x22,0x03,0x06,0x0C,0x12,0x61,0x00,0x03,0x0C,0xF0,
  40          	0x00,0xFC,0x44,0x44,0x44,0xFC,0x00,0xFC,0x08,0x08,0x10,0x20,0xC0,0x00,0x00,0x00,//罗
  41          	0x10,0x10,0x10,0x11,0xFC,0x10,0x15,0x18,0x30,0xD0,0x10,0x10,0x10,0x17,0x50,0x20,
  42          	0x80,0x60,0x20,0xFE,0x00,0x08,0x0C,0x88,0x88,0x48,0x50,0x50,0x50,0xFE,0x00,0x00,//拉
  43          	0x08,0x06,0x04,0x3F,0x21,0x3F,0x21,0x21,0x3F,0x21,0x01,0xFF,0x01,0x01,0x01,0x01,
  44          	0x20,0x30,0x40,0xF8,0x08,0xF8,0x08,0x08,0xF8,0x08,0x00,0xFE,0x00,0x00,0x00,0x00,//单
  45          	0x00,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x20,0x20,0x40,0x80,
  46          	0x40,0x40,0x40,0x44,0xFE,0x00,0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,//片
  47          	0x10,0x10,0x10,0xFE,0x10,0x10,0x38,0x34,0x54,0x50,0x91,0x11,0x12,0x12,0x14,0x10,
  48          	0x00,0xF8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x08,0x0A,0x0A,0x0A,0x06,0x00,//机
  49          	0x20,0x13,0x10,0x40,0x47,0x44,0x44,0x47,0x44,0x44,0x47,0x40,0x40,0x40,0x40,0x40,
  50          	0x00,0xFC,0x04,0x04,0xE4,0x24,0x24,0xE4,0x24,0x24,0xE4,0x04,0x04,0x04,0x14,0x08,//间
  51          	0x10,0x10,0x13,0xFD,0x10,0x17,0x14,0x18,0x30,0xDF,0x11,0x13,0x10,0x10,0x51,0x26,
  52          	0x40,0x20,0xFC,0x08,0x90,0xFE,0x00,0x80,0x80,0xFE,0x10,0x10,0xE0,0x50,0x8C,0x04,//接
  53          	0x10,0x10,0x10,0xFD,0x11,0x10,0x14,0x19,0x30,0xD1,0x10,0x10,0x10,0x10,0x53,0x20,
C51 COMPILER V6.20c  LCD6963                                                               09/06/2005 16:44:34 PAGE 2   

  54          	0x00,0x20,0x10,0xFE,0x04,0x50,0x8C,0x04,0x00,0xFC,0x20,0x20,0x20,0x20,0xFE,0x00,//控
  55          	0x24,0x34,0x24,0x3F,0x44,0x04,0x7F,0x04,0x3F,0x24,0x24,0x24,0x24,0x27,0x05,0x04,
  56          	0x04,0x04,0x24,0xA4,0x24,0x24,0xA4,0x24,0xA4,0xA4,0xA4,0xA4,0x84,0x84,0x14,0x08,//制
  57          	};
  58          Uint data ptr[]={10,12,20,35,40,15,18,50};
  59          /*延迟1ms*/
  60          static void Wait1ms(void) {
  61   1        int cnt = 0;
  62   1        while (cnt <80) cnt++;
  63   1      }
  64          /*延迟n ms. */ 
  65          void WaitNms(int n){
  66   1         int i;
  67   1         for(i=1;i<=n;i++) Wait1ms();
  68   1      }
  69          /*读状态位0和1 */
  70          void ST01Read(void){
  71   1      	while(1){	
  72   2      		temp=rdcommand;	
  73   2      		if ((temp&0x03)==0x03)  break;  /*判断指令、数据读写状态是否准备好*/
  74   2      	}
  75   1      }
  76          /*读状态位3 */
  77          void ST3Read(void){
  78   1      			P0=0x00;
  79   1      	while(1){	
  80   2      			temp=rdcommand;
  81   2      		if ((temp&0x08)==0x08)  break; 	//判断数据自动写状态是否准备好
  82   2      	}
  83   1      }
  84          /*写数据*/
  85          void WRshuju(Uchar shuju){
  86   1          rdshuju=shuju;
  87   1      }	
  88          /*写命令*/
  89          void WRCommand(Uchar command){
  90   1          rdcommand=command;
  91   1      }
  92          /*无参数指令*/	
  93          void WRCommandOne(void){
  94   1      	ST01Read();          //读状态位0和1
  95   1      	WRCommand(command);	/*写命令*/
  96   1      }
  97          /*单参数指令*/
  98          void WRCommandTwo(void){
  99   1      	ST01Read();
 100   1      	WRshuju(shuju2);		/*写数据*/
 101   1      	ST01Read();
 102   1      	WRCommand(command);	/*写命令*/
 103   1      }
 104          /*双参数指令*/
 105          void WRCommandMany(void){
 106   1      	ST01Read();
 107   1      	WRshuju(shuju1);		/*写数据*/
 108   1      	ST01Read();
 109   1      	WRshuju(shuju2);		/*写数据*/
 110   1      	ST01Read();		
 111   1      	WRCommand(command);	/*写命令*/
 112   1      }
 113          /*初始化T6963 LCD 显示.*/
 114          void Init_LCD_Graphic(void){
 115   1      	/*设置文本显示首地址*/ 
C51 COMPILER V6.20c  LCD6963                                                               09/06/2005 16:44:34 PAGE 3   

 116   1      	shuju1=0x00;
 117   1      	shuju2=0x00;
 118   1      	command=0x40;
 119   1      	WRCommandMany();
 120   1      	
 121   1      	/*设置文本显示区宽度*/
 122   1      	shuju1=0x28;		/*40字节*/
 123   1      	shuju2=0x00;
 124   1      	command=0x41;
 125   1      	WRCommandMany();
 126   1      	
 127   1      	/*设置图形显示区首地址*/
 128   1      	shuju1=0x00;
 129   1      	shuju2=0x08;		/*首地址0x0800*/
 130   1      	command=0x42;
 131   1      	WRCommandMany();
 132   1      	
 133   1      	/*设置图形显示区宽度*/
 134   1      	shuju1=0x28;		/*40字节*/
 135   1      	shuju2=0x00;
 136   1      	command=0x43;
 137   1      	WRCommandMany();
 138   1      		
 139   1      	/*设置显示方式*/	
 140   1      	command=0x80;		/*启用内部字符发生器,显示方式是文本与图形逻辑或*/
 141   1      	WRCommandOne();
 142   1      	
 143   1      	/*设置显示状态*/	
 144   1      	command=0x9f;		/*启用光标闪烁、光标显示、文本显示、图形显示*/
 145   1      	WRCommandOne();
 146   1         
 147   1      }
 148          /*清显示RAM*/
 149          void ClrGraphic(void){
 150   1      	/*设置显示地址*/
 151   1      	shuju1=0x00;		/*低字节*/
 152   1      	shuju2=0x00;		/*高字节*/ 
 153   1      	command=0x24;		
 154   1      	WRCommandMany();
 155   1      	
 156   1      	/*进入自动写方式*/
 157   1      	command=0xb0;
 158   1      	WRCommandOne();	
 159   1      	/*清8KRAM*/ 	
 160   1      	shuju1=0x00;
 161   1         	for(i=0;i<0x2000;i++){
 162   2         		ST3Read();
 163   2         		WRshuju(shuju1);
 164   2         	}   	
 165   1         	/*退出自动写方式*/
 166   1         	command=0xb2;
 167   1      	WRCommandOne();
 168   1      }
 169          void TextDisplay(void){
 170   1      	/*设置显示地址*/
 171   1      	shuju1=84;	//在第3行第4列显示文本字符
 172   1      	shuju2=0x00; 
 173   1      	command=0x24;
 174   1      	WRCommandMany();	
 175   1      	/*进入自动写方式*/
 176   1      	command=0xb0;
 177   1      	WRCommandOne();	
C51 COMPILER V6.20c  LCD6963                                                               09/06/2005 16:44:34 PAGE 4   

 178   1      	/*“WELCOME”*/	    
 179   1      	for (k=0;k<ELength;k++){
 180   2      		ST3Read();
 181   2      		shuju1=ETable[k];
 182   2      		WRshuju(shuju1);
 183   2      	}	
 184   1      	/*退出自动写方式*/
 185   1      	command=0xb2;
 186   1      	WRCommandOne();
 187   1      }
 188          /*建立CGRAM*/
 189          void SETCGRAM(void){
 190   1      	/*设置CGRAM偏移地址*/
 191   1      	shuju1=0x03;		/*首地址为0x1c00*/
 192   1      	shuju2=0x00;
 193   1      	command=0x22;
 194   1      	WRCommandMany();
 195   1      	
 196   1      	/*设置显示地址*/
 197   1      	shuju1=0x00;
 198   1      	shuju2=0x1c;		/*0x1c00*/
 199   1      	command=0x24;
 200   1      	WRCommandMany();
 201   1      	
 202   1      	/*进入自动写方式*/
 203   1      	command=0xb0;
 204   1      	WRCommandOne(); 
 205   1      	
 206   1      	/*写“摩托罗拉单片机间接控制”*/
 207   1      	for (k=0;k<CCLength;k++){
 208   2      		ST3Read();
 209   2      		shuju1=CCTable[k];
 210   2      		WRshuju(shuju1);
 211   2      	}
 212   1      	
 213   1      	/*退出自动写方式*/
 214   1      	command=0xb2;
 215   1      	WRCommandOne();
 216   1      }	
 217          /*文本方式下显示汉字*/
 218          void CCDisplay(Uchar row,Uchar col){
 219   1      	
 220   1      	Uint cursor,tempaddress;
 221   1      	SETCGRAM();
 222   1      	cursor=row*40+col;
 223   1      	tempaddress=cursor;
 224   1      	/*设置显示地址*/
 225   1      	shuju1=tempaddress&0x00ff;
 226   1      	shuju2=cursor&0xff00;	
 227   1      	command=0x24;
 228   1      	WRCommandMany();	
 229   1      		
 230   1      	command=0xb0;			/*进入自动写方式*/
 231   1      	WRCommandOne();		
 232   1      	for (k=0;k<22;k++){
 233   2      		ST3Read();
 234   2      		shuju1=EXPRT1[k];
 235   2      		WRshuju(shuju1);		
 236   2      		}		
 237   1      	command=0xb2;			/*退出自动写方式*/
 238   1      	WRCommandOne();
 239   1      		
C51 COMPILER V6.20c  LCD6963                                                               09/06/2005 16:44:34 PAGE 5   

 240   1      	row+=1;
 241   1      	cursor=row*40+col;
 242   1      	tempaddress=cursor;
 243   1      	/*设置显示地址*/
 244   1      	shuju1=tempaddress&0x00ff;
 245   1      	shuju2=cursor&0xff00;	
 246   1      	command=0x24;
 247   1      	WRCommandMany();	
 248   1      		
 249   1      	/*进入自动写方式*/
 250   1      	command=0xb0;
 251   1      	WRCommandOne();		
 252   1      	for (k=0;k<22;k++){
 253   2      		ST3Read();
 254   2      		shuju1=EXPRT2[k];
 255   2      		WRshuju(shuju1);
 256   2      	}
 257   1      	/*退出自动写方式*/
 258   1      	command=0xb2;
 259   1      	WRCommandOne();	
 260   1      	}
 261          /*在图形方式下显示汉字*/	
 262          void GCDisplay(Uint row,Uint col){	//row(0~127)col(0~29)
 263   1      	Uint cursor,tempaddress;
 264   1      	Uint temprow,tempcol;
 265   1      	
 266   1      	for(i=0;i<11;i++)				/*11个汉字*/
 267   1      	{	
 268   2      		tempcol=col+i*2;		
 269   2      		for(k=0;k<16;k++)			
 270   2      		{
 271   3      		temprow=row+k;			
 272   3      		cursor=0x0800+temprow*40+tempcol;
 273   3      		tempaddress=cursor;
 274   3      		shuju1=tempaddress&0x00ff;		 /*设置显示地址*/
 275   3      		shuju2=(cursor&0xff00)>>8;		
 276   3      		command=0x24;
 277   3      		WRCommandMany();
 278   3      		
 279   3      		shuju2=CCTable[i*32+k];
 280   3      		command=0xc0;					/*设置一次写数据,地址加一*/
 281   3      		WRCommandTwo();
 282   3      				
 283   3      		shuju2=CCTable[i*32+k+16];
 284   3      		WRCommandTwo();		
 285   3      		}
 286   2      		WaitNms(50);				
 287   2      	}
 288   1      	WaitNms(50);
 289   1      }
 290          
 291          /*滚动显示-向右*/
 292          void RightScroll(void)
 293          {
 294   1      	Uint Num,cursor0,tempaddr;	
 295   1      	while(1){
 296   2      	for(Num=0;Num<30;Num++)	{
 297   3      		 
 298   3      		cursor0=start-Num;/*修改文本或图形显示区首地址*/
 299   3      		tempaddr=cursor0;
 300   3      		shuju1=tempaddr&0x00ff;
 301   3      		shuju2=cursor0&0xff00;		
C51 COMPILER V6.20c  LCD6963                                                               09/06/2005 16:44:34 PAGE 6   

 302   3      		command=0x40;
 303   3      		WRCommandMany();
 304   3      		GCDisplay(1,3);
 305   3      		TextDisplay();			//""
 306   3      		CCDisplay(1,3);
 307   3      		WaitNms(500);				
 308   3      		}
 309   2      	}
 310   1      }
 311          
 312          /*滚动显示—向下*/
 313          void DownScroll(void)
 314          {
 315   1      	Uint Num,cursor0,tempaddr;
 316   1      	while(1){
 317   2      		for(Num=0;Num<16;Num++){
 318   3      		
 319   3      			cursor0=start-Num*40;	/*设置文本显示首地址*/
 320   3      			tempaddr=cursor0;
 321   3       
 322   3      			shuju1=tempaddr&0x00ff;
 323   3      			shuju2=cursor0&0xff00;
 324   3      			command=0x40;
 325   3      			WRCommandMany();
 326   3      		
 327   3      			TextDisplay();			//""
 328   3      			WaitNms(500);
 329   3      			}
 330   2      		}
 331   1      }
 332          main()
 333          {        p1_2=1;
 334   1      	     fs=0;		//FS=0,8×8字体
 335   1               ret=0;	
 336   1      	     WaitNms(1000);
 337   1               ret=1;	
 338   1               p1_2=0;	
 339   1         	     Init_LCD_Graphic();	//初始化屏幕
 340   1         
 341   1      	     ClrGraphic();		//清屏
 342   1      	    // TextDisplay();		//文本显示
 343   1             	// GCDisplay(40,4);		
 344   1               for(;;);
 345   1      
 346   1      }


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