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

📄 best.lst

📁 51单片机程序
💻 LST
字号:
C51 COMPILER V3.20,  SN-50203013  BEST                                                     05/24/00  15:48:46  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE BEST
OBJECT MODULE PLACED IN BEST.OBJ
COMPILER INVOKED BY: C:\MANLEY\C51\BIN\C51.EXE BEST.C DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include <reg51.h>
   2          #include <absacc.h>
   3          #define uchar unsigned char
   4          #define DISPLAY 0XF000
   5          #define DISPLAY_B 0XE000
   6          #define uint unsigned int
   7          #define beginflash 0x8000
   8          #define save_begin 0x0100   
   9          #define out_begin 0x1800 
  10          #define ad_begin 0x5200 
  11          #define take_out 0x7000   
  12          #define timeout 256        
  13          #define ulong unsigned long
  14          #define read_addr 0xD000
  15          signed char ptr,tongn;
  16          //uint save_out_ram1,take_out_intr1;
  17          uint  addr_ram0;
  18          uchar xdata first_addr[100]={44,76,38,88,52,04,17,8,0x2B,0x4f,0x25,0x54,0x17,0x29,16,18,43,28,51,17,55,03,
             -44,76,40,80};
  19          //54,14,52,
  20          //20,03,12,39,75,53,68,47,07,35,31,50,27,21,46,43,14,03,01},last_addr[100];
  21          //uchar code ad_data[]={03,00,03,00,43,14,42,39,41,90,35,92,54,14,52,20,03,12,39,75,53,68,47,07,35,31,50,2
             -7,21,46,43,14,03,01};
  22          uchar  timer0,temp0,temp1,temp2,temp3,temp4,temp_sbuf,timeok,timeintl,timeinth;
  23          uchar ramdata,line,addr,outdata,indata,addr1,row,tong;
  24          uint outaddr1,times,addr_ram_out,addr_ram_save,rstemp;   
  25          uchar times1,numb,t,flashdata,a,g,choose,num,beiw;
  26          uint addr_ram,addr_ram1,jump,i,j,b,d,z,y,m,n,gg,d1,d2;
  27          ulong e;
  28          uint faddr;
  29          uchar x;
  30          bit bdata guo;
  31          sbit cl1=P1^6;
  32          sbit cl2=P1^7;
  33          sbit flashok=P1^4;
  34          sbit led=P1^5; 
  35          uint fhra,ff,flra,cp;
  36          uint a3,b3,a4,b4;//void delay(uint i1)
  37          //{   uint i2;
  38           //   uint i3;
  39           //  for(i2=0;i2<i1;i2++){i3=0;};
  40          //	}
  41          
  42          uint cnvt_laddr(uint pointer)  /*汉字码存放地址的低位*/
  43          { long lreg;
  44   1        uint laddr;
  45   1        a3=XBYTE[pointer];
  46   1        b3=XBYTE[pointer+1];
  47   1        lreg=(a3-1)*94+(b3-1);
  48   1        lreg=lreg*32;
  49   1        laddr=lreg|0x8000;
  50   1        return (laddr);}
  51            
  52          uchar cnvt_haddr(uint pointer)/*汉字码存放地址的高位*/
  53          { ulong hreg;
C51 COMPILER V3.20,  SN-50203013  BEST                                                     05/24/00  15:48:46  PAGE 2   

  54   1        uchar haddr;
  55   1        /*if(choose==12)
                  {a3=ad_data[pointer];
                 b3=ad_data[pointer+1];}
                else*/
  59   1        a3=XBYTE[pointer];
  60   1        b3=XBYTE[pointer+1];
  61   1        hreg=(a3-1)*94+(b3-1);
  62   1        hreg=hreg*32;
  63   1        hreg=hreg>>13;
  64   1        haddr=hreg;
  65   1        return (haddr);}
  66           
  67          void read_flash_to_ram()  /*从flash里查找一条短信每个汉字的
                                       32位原码并存入以save_begin(#define save_begin 0x0100)
                                       开始的内存里作动态显示用*/
  70          {     //uint faddr;
  71   1            flashok=1; /*关 flash选通端*/                    
  72   1            addr_ram_save=save_begin;/*相当于给了addr_ram_save 地址  */    
  73   1           
  74   1      	//g=13;
  75   1      	//faddr=first_addr;
  76   1      	faddr=first_addr+10;
  77   1      	//faddr=ad_data;
  78   1      	    for(i=0;i<256;i++)
  79   1      	          { ramdata=0xff;
  80   2      	           XBYTE[addr_ram_save]=ramdata;
  81   2      	           addr_ram_save=addr_ram_save+1;
  82   2      	           }	  
  83   1      	      for (i=0;i<g;i++)
  84   1      	         { fhra=cnvt_haddr(faddr);    /*取地址高位*/
  85   2      	           flra=cnvt_laddr(faddr);    /*取地址低位*/
  86   2      	           faddr=faddr+2;     
  87   2      	           for(times1=0;times1<32;times1++)  /*取32位原码,即一个汉字*/
  88   2      		       {flashok=0;	
  89   3      			XBYTE[beginflash]=fhra;/*高位选通*/
  90   3      			
  91   3      			flra=flra&0x9fff;	/*?*/
  92   3      			flashdata=XBYTE[flra];  /*取出原码*/   
  93   3      			flashdata=flashdata^0xff; 
  94   3                              /*取反 ,因为大屏是共阳极的设置 */
  95   3      			flashok=1;                /*关 flash选通端*/
  96   3      			XBYTE[addr_ram_save]=flashdata;  
  97   3      			addr_ram_save=addr_ram_save+1;  /*存放内存加一 */     
  98   3      			flra=flra+1;}
  99   2      			}
 100   1      		         		
 101   1      	
 102   1      }
 103          
 104          void save_out_ram()/*把查到的一条要显示的短信的原代码在以out_begin(见宏定义)为起始地址的内存中重排序以便
             -后面的显示*/
 105          {  	
 106   1      	jump=31;
 107   1          addr_ram_out=out_begin;	   	/*addr_ram_out置于
                                                   //于out_begin空出一屏之后的地址*/
 109   1          addr_ram_save=save_begin;   /*找到存取该短信原代码的首地址 */    
 110   1          
 111   1        
 112   1        for(times=0;times<16;times++)            
 113   1      	{	
 114   2      		addr_ram_save=save_begin+2*times;
C51 COMPILER V3.20,  SN-50203013  BEST                                                     05/24/00  15:48:46  PAGE 3   

 115   2      		//addr_ram_save=save_begin+2*times+640*a;  
 116   2      		for(times1=0;times1<(g+8);times1++)
 117   2      	           {  
 118   3      	              ramdata=XBYTE[addr_ram_save];  
 119   3      		      XBYTE[addr_ram_out]=ramdata;
 120   3      		        //x=XBYTE[addr_ram_out];
 121   3      		      addr_ram_out=addr_ram_out+1;
 122   3      		      addr_ram_save=addr_ram_save+1;
 123   3      		      ramdata=XBYTE[addr_ram_save];
 124   3      		      XBYTE[addr_ram_out]=ramdata;   
 125   3      		      addr_ram_save=addr_ram_save+jump;       		
 126   3      		      addr_ram_out=addr_ram_out+1;
 127   3      		      }
 128   2      	}
 129   1      }	
 130          
 131          void take_out_intr()/*滚动。。。左移一列,
              		定义本数组用来放每次中断服务程序取的东西,通过本程序的不断改位置和循环实现从右向左滚动*/
 133          {	addr_ram_out=out_begin;
 134   1      	for(j=0;j<16;j++)
 135   1      	{ b4=XBYTE[addr_ram_out];
 136   2      		b4=b4>>7;
 137   2      	    for(i=0;i<2*(g+8)-1;i++)
 138   2      		{
 139   3      		 a4=XBYTE[addr_ram_out+1];
 140   3      		 a4=a4>>7;
 141   3      		XBYTE[addr_ram_out]=(XBYTE[addr_ram_out]<<1)|a4;
 142   3      		 addr_ram_out=addr_ram_out+1;
 143   3      		 }
 144   2      		 XBYTE[addr_ram_out]=(XBYTE[addr_ram_out]<<1)|b4;
 145   2      		/*XBYTE[addr_ram_out+2*(g+8)-1]=XBYTE[addr_ram_out+2*(g+8)-1]+a4;*/
 146   2      		addr_ram_out=addr_ram_out+1;
 147   2      		}
 148   1      }
 149          	
 150          void initial()  /*初始化程序*/
 151          {	
 152   1              //addr=0x30;/*显示屏的地址00010000B*/
 153   1              //addr_ram=0x0000;
 154   1              PCON=0x80;//0x00;//0x80;
 155   1      	TMOD=0X22;      /*工作方式2*/
 156   1      	TL1=0xf3;//0Xf3;   /*波特率为4800*/   
 157   1      	TH1=0xf3;//0Xf3;
 158   1      	SCON=0x50;//0X50;  /*工作方式2*/
 159   1      	TR1=1;
 160   1      	EA=1;
 161   1      	ES=1;
 162   1      	IP=0X10;		//0x10;
 163   1      	//ET1=0;
 164   1              addr_ram=out_begin;
 165   1              //line=0;
 166   1              cl1=0;
 167   1       	cl2=0;
 168   1       	row=line=0;
 169   1      	addr_ram0=0x5200;
 170   1      	numb=timer0=0;
 171   1              ptr=0;
 172   1              tong=0;
 173   1              tongn=0;
 174   1              guo=0;
 175   1           
 176   1             d1=0;
C51 COMPILER V3.20,  SN-50203013  BEST                                                     05/24/00  15:48:46  PAGE 4   

 177   1             d2=0;
 178   1             b=0;
 179   1      	addr_ram_save=save_begin;
 180   1      	addr_ram_out=out_begin;
 181   1      	g=j=b=d=e=z=y=m=n=0;
 182   1      	cl1=cl2=times1=0;
 183   1      	T1=T0=0;
 184   1      	IP=0x10;/*把串口设为最高优先级*/
 185   1      		
 186   1      	}
 187          void delay(uint i1)
 188          {
 189   1        uint i2;
 190   1        for(i2=0;i2<i1;i2++)
 191   1        ;
 192   1      }
 193          
 194                  	
 195          void scan() interrupt 1  using 3
 196          { 			
 197   1      			TR0=0;        /*关中断计数器*/
 198   1        
 199   1      
 200   1         		  addr=0x30;
 201   1         		  outdata=line|addr;/*选通谋一行的地址*/
 202   1           		//P1_7=0;
 203   1          		 XBYTE[DISPLAY_B]=outdata;
 204   1           		//P1_7=1;
 205   1          		 T1=0;/*T1,T0都要放到line的循环里*/
 206   1          		 T0=0;
 207   1          		   for(row=0;row<8;row++)
 208   1           		    {//P1_6=0;
 209   2           			outdata=XBYTE[addr_ram];
 210   2           			addr_ram=addr_ram+1;
 211   2           			//if(addr_ram==128)
 212   2           				//{addr_ram=addr_ram_out;
 213   2           				
 214   2           				//}
 215   2           			outaddr1=row;
 216   2           			//P2=outdata1;
 217   2           			outaddr1=outaddr1<<8;/*把row的数移到高八位上去,在输出十六位地址时就相当于在p2口输出了*/
 218   2           			outaddr1=outaddr1+DISPLAY;/*用的好巧,int就是十六位的,正好当地址用*/
 219   2           			XBYTE[outaddr1]=outdata;
 220   2           			
 221   2           			
 222   2          			 //P1_6=1;
 223   2         		    }
 224   1         		   // delay(8);
 225   1         		   addr=0x10;
 226   1         		  outdata=line|addr;/*选通谋一行的地址*/
 227   1           		//P1_7=0;
 228   1          		 XBYTE[DISPLAY_B]=outdata;
 229   1           		//P1_7=1;
 230   1          		 T1=0;/*T1,T0都要放到line的循环里*/
 231   1          		 T0=0;
 232   1          		   for(row=0;row<8;row++)
 233   1           		    {//P1_6=0;
 234   2           			outdata=XBYTE[addr_ram];
 235   2           			addr_ram=addr_ram+1;
 236   2           			
 237   2           			outaddr1=row;
 238   2           			//P2=outdata1;
C51 COMPILER V3.20,  SN-50203013  BEST                                                     05/24/00  15:48:46  PAGE 5   

 239   2           			outaddr1=outaddr1<<8;/*把row的数移到高八位上去,在输出十六位地址时就相当于在p2口输出了*/
 240   2           			outaddr1=outaddr1+DISPLAY;/*用的好巧,int就是十六位的,正好当地址用*/
 241   2           			XBYTE[outaddr1]=outdata;
 242   2           			
 243   2           			
 244   2          			 //P1_6=1;
 245   2         		    }
 246   1         		 T1=1;
 247   1         		 line=line+1;
 248   1         		 addr_ram=addr_ram+g*2;	//(g+8-8)*2;
 249   1         		 if(addr_ram>=out_begin+256+g*32)	//(g+8-8)*32)
 250   1         		{ 
 251   2         		 line=0;
 252   2         		 addr_ram=out_begin;
 253   2         		}
 254   1         		 TL0=0x00;
 255   1        		 TH0=0x00;
 256   1        		 TR0=1;
 257   1         		 //delay(100);
 258   1        		//}	
 259   1      	//}   
 260   1      }
 261          	
 262          receive() interrupt 4 using 0
 263          {
 264   1      	//TR0=0;
 265   1      	
 266   1      	while(!RI);/*串口中断标志位为RI,为1时中断,
              	即接着往下执行,平时等于0,即在这一句处死循环*/
 268   1      	
 269   1      	RI=0;
 270   1      	//d++;
 271   1      	b++;
 272   1      	rstemp=SBUF;
 273   1      	
 274   1      	first_addr[b-1]=rstemp;
 275   1      	
 276   1      
 277   1      }	
 278          	
 279          
 280          void main(void)
 281          {	initial();	
 282   1              //timeok=0;
 283   1              
 284   1              while(b<11);
 285   1              
 286   1              
 287   1              while(1)
 288   1             {
 289   2            		 delay(0xffff);
 290   2             		 g=(b-10)/2;
 291   2              b=0;
 292   2              //TMOD=0x22;
 293   2             	IT0=1;
 294   2             	EX0=1;
 295   2              ET0=1;
 296   2      	//EA=1;
 297   2      	TL0=0x00;
 298   2      	TH0=0x00;
 299   2      	
 300   2      			read_flash_to_ram();            /*转化为32位汉字原代码*/
C51 COMPILER V3.20,  SN-50203013  BEST                                                     05/24/00  15:48:46  PAGE 6   

 301   2      			save_out_ram();
 302   2      			 
 303   2      			TR0=1;
 304   2      			
 305   2      			while(b<11)
 306   2      			{   
 307   3      				
 308   3      				//TR0=0;
 309   3      				take_out_intr();/*滚动*/
 310   3      				//TR0=1;
 311   3      	                       	delay(0000);/*等待,过后换下一屏*/
 312   3      			          
 313   3      			}
 314   2      			TR0=0;
 315   2      		
 316   2      			
 317   2      		}	
 318   1      			
 319   1         
 320   1       }
 321          
 322                
 323           
 324          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1263    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    100    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     93       8
   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 + -