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

📄 main.lst

📁 在AT89S52上写的一个扫雷程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V3.20,  SN-0  MAIN                                                            02/28/07  13:53:15  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.O
COMPILER INVOKED BY: C:\DJ51\OMF51\BIN\C51.EXE D:\DYJ\TEST\MAIN.C DB OE RB(0) OT(5) SM PR(MAIN.LST) OJ(MAIN.O) 

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #include <absacc.h>
   4          #include <stdlib.h>
   5          #include <string.h>
   6          #include "table.h"
   7          
   8          /*---lcd driver.c----*/
   9          /*-----------------------------------------------------*/
  10          /*                定义LCD引脚                          */
  11          /*-----------------------------------------------------*/
  12          #define RS P1_0  /*RS为寄存器选择信号,RS=0时,为命令或状态寄存器;RS=1时,为数据寄存器*/
  13          #define RW P1_1  /*RW为读写控制信号,RW=0时,为写状态;RS=1时,为读状态*/ 
  14          #define E  P1_2  /*芯片的使能信号*/
  15          #define CS1 P1_4 /*左屏幕的选择信号*/
  16          #define CS2 P1_5 /*右屏幕的选择信号*/
  17          #define com8255 XBYTE[0xff2b] /*扩展口8255的命令端口地址*/
  18          #define Data XBYTE[0xff28]    /*用8255的PA口做为LCD的数据接口*/
  19          /*-----------------------------------------------------*/
  20          /*                 延时模块                            */
  21          /*-----------------------------------------------------*/
  22          void Delay400Ms(void) small
  23          {
  24   1      	unsigned char TempCycA = 5;/*改变TempCycA、TempCycB的值,可改变延时时间*/
  25   1      	unsigned int TempCycB;
  26   1      	while(TempCycA--)
  27   1      		{
  28   2      			TempCycB=7269;
  29   2      			while(TempCycB--);
  30   2      		};
  31   1      }
  32          
  33          /*-----------------------------------------------------*/
  34          /*          状态检查函数,判断是否处于忙状态              */
  35          /*-----------------------------------------------------*/
  36          void  CheckState() small
  37          {
  38   1       	RS=0;  
  39   1       	RW=1;  
  40   1       	do
  41   1       	{
  42   2       	     E=1; /*如频率太高可以多加几个,以便读出数据*/
  43   2                  E=1;
  44   2                  E=1;
  45   2                  E=1;          
  46   2              }
  47   1       	while (Data&0x80);/*检查状态寄存器的最高为是否为高,为高就表示忙,继续等待变低*/
  48   1      }
  49          
  50          /*-----------------------------------------------------*/
  51          /*        写显示数据   形参dat:显示数据                 */
  52          /*-----------------------------------------------------*/
  53          void WriteByte(unsigned char dat) small
  54          {
  55   1       	CheckState();/*写前先检查LCD是否忙*/
C51 COMPILER V3.20,  SN-0  MAIN                                                            02/28/07  13:53:15  PAGE 2   

  56   1       	RS=1;
  57   1       	RW=0; /*写入数据*/
  58   1        	Data=dat;
  59   1       	E=1;
  60   1             E=1;
  61   1             E=1;
  62   1             E=1;
  63   1       	E=0;  /*下降沿时写入数据*/
  64   1      }
  65          
  66          /*-----------------------------------------------------*/
  67          /*         向LCD发送命令  形参command :命令             */
  68          /*-----------------------------------------------------*/
  69          void SendCommandToLCD(unsigned char command) small
  70          {
  71   1      	CheckState();
  72   1      	RS=0;
  73   1       	RW=0;              
  74   1      	Data=command;
  75   1      	E=1;
  76   1             E=1;
  77   1                  E=1;
  78   1                  E=1;
  79   1       	E=0;
  80   1      }
  81          
  82          /*----------------------------------------------------*/
  83          /*           设定行地址(页)--X 0-7                     */
  84          /*----------------------------------------------------*/
  85          void SetLine(unsigned char line) small
  86          {
  87   1      line=line & 0x07; 	  	    /* 0<=line<=7*/
  88   1      line=line|0xb8;	   	  	    /*1011 1xxx*/
  89   1      SendCommandToLCD(line);
  90   1      }
  91          
  92          /*----------------------------------------------------*/
  93          /*           设定列地址--Y 0-63                       */
  94          /*----------------------------------------------------*/
  95          void SetColumn(unsigned char column) small
  96          {
  97   1      column=column &0x3f; 		 /* 0=<column<=63*/
  98   1      column=column | 0x40; 		 /*01xx xxxx*/
  99   1      SendCommandToLCD(column);
 100   1      }
 101          
 102          /*----------------------------------------------------*/
 103          /*           设定显示开始行--XX                        */
 104          /*----------------------------------------------------*/
 105          void SetStartLine(unsigned char startline) small /*0--63*/
 106          {
 107   1      startline=startline & 0x07;              /*??0x3f*/
 108   1      startline=startline|0xc0; 		 /*1100 0000*/
 109   1      SendCommandToLCD(startline);
 110   1      }
 111          
 112          /*----------------------------------------------------*/
 113          /*                开关显示                             */
 114          /*----------------------------------------------------*/
 115          void SetOnOff(unsigned char onoff) small
 116          {
 117   1      onoff=0x3e | onoff; 
C51 COMPILER V3.20,  SN-0  MAIN                                                            02/28/07  13:53:15  PAGE 3   

 118   1      SendCommandToLCD(onoff);
 119   1      }
 120          
 121          /*----------------------------------------------------*/
 122          /*                清除内存                            */
 123          /*----------------------------------------------------*/
 124          void Clr_Scr() small
 125          {
 126   1       	unsigned char j,k;
 127   1       	CS1=1;
 128   1             CS2=1;       /*左右屏同时选通*/
 129   1       	SetLine(0);
 130   1       	SetColumn(0);
 131   1       	for(k=0;k<8;k++)
 132   1       	{
 133   2       	 	SetLine(k);       /*第K页*/
 134   2       	 	for(j=0;j<64;j++)
 135   2          	WriteByte(0x00);
 136   2       	}
 137   1      }
 138          
 139          /*----------------------------------------------------*/
 140          /*                 初始化LCD屏                         */
 141          /*----------------------------------------------------*/
 142          void init_lcd() small
 143          {
 144   1      
 145   1       	CS1=1;
 146   1             CS2=1;                 /*左右屏同时选通*/
 147   1       	SetOnOff(0x3f);	   /*关显示*/
 148   1       	SetLine(0x00);         /* 设定页*/
 149   1       	SetStartLine(0x00);
 150   1       	SetColumn(0x00);
 151   1       	SetOnOff(0x3f);       /*开显示*/
 152   1      }
 153          
 154          /*----------------------------------------------------*/
 155          /*说明:12864液晶横放,汉字按正常方式显示,pag:0~7;      */
 156          /*	  row:0~7(从左到右,水平行,一行可显示8个汉字)      */
 157          /*功能:指定位置显示汉字16*16                           */
 158          /*----------------------------------------------------*/
 159          void word_disp(unsigned char pag,unsigned char row, unsigned int code  *hzk) small
 160          {
 161   1       	unsigned char j=0,i=0,k=0;
 162   1       	for(j=0;j<2;j++)
 163   1       	{
 164   2      	 	if (row <4)
 165   2      	 	{
 166   3      			k=row;
 167   3      			CS1=1;
 168   3                           CS2=0;       /*左屏幕显示*/
 169   3      
 170   3      		}
 171   2      		else
 172   2      		{
 173   3      			k = row-4;
 174   3      			CS1=0;
 175   3                           CS2=1;       /*右屏幕显示*/
 176   3      		}
 177   2        		SetLine(pag+j);
 178   2        		SetColumn(k*16);
 179   2        		for(i=0;i<16;i++)
C51 COMPILER V3.20,  SN-0  MAIN                                                            02/28/07  13:53:15  PAGE 4   

 180   2          	{
 181   3           		WriteByte(hzk[16*j+i]);
 182   3      		}
 183   2       	}
 184   1      }
 185          
 186          /*----------------------------------------------------*/
 187          /*说明:12864液晶横放,字符按正常方式显示,pag:0~7;      */
 188          /*	  row:0~15(从左到右,水平行,一行可显示16个字符)   */
 189          /*功能:指定位置显示字符8*16                            */
 190          /*----------------------------------------------------*/
 191          void byte_disp(unsigned char pag, unsigned char row, unsigned int code  *bytek) small
 192          {
 193   1       	unsigned char j=0,i=0,k=0;
 194   1       	for(j=0;j<2;j++)
 195   1       	{
 196   2      		if (row < 8)
 197   2      		{
 198   3      			k=row;
 199   3      			CS1=1;
 200   3                           CS2=0;       /*左屏幕显示*/
 201   3      		}
 202   2      		else
 203   2      		{
 204   3      			k=row-8;
 205   3      			CS1=0;
 206   3                           CS2=1;       /*右屏幕显示*/
 207   3      
 208   3      		}
 209   2        		SetLine(pag+j);
 210   2       	 	SetColumn(k*8);
 211   2        		for(i=0;i<8;i++)
 212   2          	{
 213   3           		WriteByte(bytek[8*j+i]);
 214   3      		}
 215   2       	}
 216   1      }
 217          
 218          /*----------------------------------------------------*/
 219          /*说明:12864液晶横放,图形按正常方式显示,pag:0~7;      */
 220          /*	  row:0~15(从左到右,水平行,一行可显示16个小图片)   */
 221          /*功能:指定位置显示图片8*8                            */
 222          /*----------------------------------------------------*/
 223          void photo_disp(unsigned char pag, unsigned char row, unsigned int code  *photo) small
 224          {
 225   1       	unsigned char i=0,k=0;
 226   1      
 227   1      		if (row < 8)
 228   1      		{
 229   2      			k=row;
 230   2      			CS1=1;
 231   2                           CS2=0;       /*左屏幕显示*/
 232   2      		}
 233   1      		else
 234   1      		{
 235   2      			k=row-8;
 236   2      			CS1=0;
 237   2                           CS2=1;       /*右屏幕显示*/
 238   2      		 }
 239   1      
 240   1        		SetLine(pag);
 241   1       	 	SetColumn(k*8);
C51 COMPILER V3.20,  SN-0  MAIN                                                            02/28/07  13:53:15  PAGE 5   

 242   1        		for(i=0;i<8;i++)
 243   1          	        {
 244   2           		   WriteByte(photo[i]);
 245   2      		  }
 246   1       }
 247          
 248          
 249          /*----------------------------------------------------*/
 250          /*功能:指定位置显示图片1*8长条                         */
 251          /*----------------------------------------------------*/
 252          void now_disp(unsigned char pag, unsigned char row, unsigned int code  *photo) small
 253          {
 254   1       	unsigned char i=0,k=0;
 255   1      
 256   1      		if (row < 8)
 257   1      		{
 258   2      			k=row;
 259   2      			CS1=1;
 260   2                           CS2=0;       /*左屏幕显示*/
 261   2      		}
 262   1      		else
 263   1      		{
 264   2      			k=row-8;
 265   2      			CS1=0;
 266   2                           CS2=1;       /*右屏幕显示*/
 267   2      		 }
 268   1      
 269   1        		SetLine(pag);
 270   1       	 	SetColumn(k*8+7);
 271   1           		WriteByte(photo[0]);
 272   1      		
 273   1       }
 274          
 275          /*----------------------------------------------------*/
 276          /*说明:全屏幕显示子程序                                */
 277          /*功能:直接显示一幅128*64的BMP图片                     */
 278          /*----------------------------------------------------*/
 279          void  bmp_disp(unsigned int code  *bmp) small
 280           { 	unsigned char j,k,i;
 281   1       	CS1=1;
 282   1             CS2=0;       /*CS1=1,CS2=0 先写左屏幕*/
 283   1       	SetLine(0);
 284   1       	SetColumn(0);
 285   1       	for(k=0;k<8;k++)
 286   1       	{      SetLine(k); /*第K页*/ 
 287   2                   for(i=0;i<8;i++)

⌨️ 快捷键说明

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