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

📄 main.lst

📁 12232液晶单片机驱动程序源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 222   1      									//因为地址与数据复用,所以应将XBR2.1设为高电平,以使交叉开关
 223   1      									//跳过ALE,RD,WR 
 224   1                                  	
 225   1          XBR0 = 0X05;                    //SET  UART0,I2C    
 226   1          XBR1 = 0x10;     	      		// Set INT1
 227   1          XBR2 = 0x42;              		// Enable XBAR,Enable EMFILE
 228   1        
 229   1          P0MDOUT = 0xe1; 				//Output configuration for P0 
 230   1      	                                //ALE,RD,WR,TXD配置为推挽输出,RXD,INT1配置为漏级开路  
 231   1      	P1MDOUT = 0xff; 				// Output configuration for P1 
 232   1      	                                //复位脚配置为推挽输出
 233   1          P2MDOUT = 0x00; 				// Output configuration for P2 
 234   1          P3MDOUT = 0xff; 				// Output configuration for P3
 235   1        
 236   1          P0|=0x1A;                       //set RX0,RX1,INT1为输入 
 237   1      	
 238   1      
 239   1      	delay=256;						// Delay >1 ms  before polling XTLVLD.
 240   1      	while(delay--);
 241   1      
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 5   

 242   1      	while (!(OSCXCN & 0x80));		// Wait until external crystal has									// started.
 243   1      	OSCICN = 0x0C;					// Switch to external oscillator
 244   1      	OSCICN = 0x88;					// Disable internal oscillator; enable 
 245   1                              			// missing clock detector.
 246   1      	while (!(OSCXCN & 0x80));		// Wait until external crystal has									// started.
 247   1      	OSCICN = 0x08;					// Switch to external oscillator
 248   1      
 249   1      ///////////////////////////////////////////////////
 250   1      //test 液晶    
 251   1      
 252   1      
 253   1         init_lcd ();
 254   1       
 255   1         
 256   1          wrlattice (0x00,0x00);
 257   1          disphz (tab1);
 258   1          delay1 (300);
 259   1          wrlattice (0xff,0x00);
 260   1          delay1 (300);
 261   1          wrlattice (0x00,0x00);
 262   1          dispzf (tab2);
 263   1          delay1 (300);
 264   1          wrlattice (0x33,0x33);
 265   1          wrlattice (0x00,0x00);
 266   1          delay1 (300);
 267   1          disptu (tab3);
 268   1          delay1 (300);
 269   1       
 270   1      
 271   1      /////////////////////////////////
 272   1      
 273   1         csrc500=0;
 274   1         csrtc=1;
 275   1         SpeakSound();    
 276   1         SpeakSound();
 277   1      
 278   1      	// 初始化UART0、TIMER2
 279   1        	Baudrate_Init();                // 初始化串口0的波特率
 280   1      	TI0=0;                          //发送清零  
 281   1          DIR=0;                          //485置于接收状态
 282   1      
 283   1          IT1=1;                          // 外部中断1设为沿触发 
 284   1         
 285   1      	ES0=1;          	            //允许串口0中断	
 286   1      	 
 287   1          EX1=1;                          //外部中断1开放
 288   1          EA=1;
 289   1      
 290   1      //---------------------i2c init------------------------
 291   1         SMB0CN = 0x44;                   // Enable SMBus with ACKs on acknowledge 
 292   1                                          // cycle
 293   1         SMB0CR = -100;                   // SMBus clock rate = 100kHz.
 294   1         EIE1 |= 2;                       // SMBus interrupt enable
 295   1         SM_BUSY = 0;                     // Free SMBus for first transfer.
 296   1      // TEST I2C CODE---------------------------------------------------------------------
 297   1         for(i=0;i<40;i++)   
 298   1           SM_Send(CHIP_A,0x0FFF+i,i);      // Send 0x53(data) to address 0x88 on CHIP_A
 299   1      
 300   1        // SM_Send(CHIP_B, 0x0001, 0x66);      // Send 0x66(data) to address 0x01 on CHIP_B
 301   1        // SM_Send(CHIP_C, 0x0010, 0x77);
 302   1        // SM_Send(CHIP_B, 0x0333, 0xF0);
 303   1       //  SM_Send(CHIP_A, 0x0242, 0xF0);
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 6   

 304   1         for(i=0;i<40;i++)
 305   1         {
 306   2          buff[i] = SM_Receive(CHIP_A, 0x0FFF+i); // Read address 0x88 on CHIP_A
 307   2      	}
 308   1        // check = SM_Receive(CHIP_B, 0x0001); // Read address 0x01 on CHIP_B
 309   1        // check = SM_Receive(CHIP_C, 0x0010);
 310   1        // check = SM_Receive(CHIP_B, 0x0333);
 311   1        // END TEST I2C CODE-----------------------------------------------------------------
 312   1              
 313   1         status=Mf500PcdConfig();  //配置RC500内部寄存器函数
 314   1         status=Mf500PiccHalt();  
 315   1      
 316   1      while(1)  //while(1)
 317   1      {         
 318   2        if(UART1_Rec_Complete==1){//接收成功
 319   3             UART1_Rec_Complete=0; 
 320   3                                                                                          		
 321   3             switch(Receive_Buf_UART1[1]){  //run command
 322   4      
 323   4                case 0x00:   //择卡命令                        
 324   4                     do{
 325   5                     	  status=Mf500PiccRequest(PICC_REQALL,catq);                                   	          
             -                            
 326   5                        status=Mf500PiccAnticoll(0,csn);       //csn 为返回的卡序列号SN                         
             -                  
 327   5                        status=Mf500PiccSelect(csn,catq);      //选择这张卡 				   								                     
             -                                                                                        		                              
             -                                  
 328   5                      }while(status); 								                                                                  
             -                                                                                                                        
             - 
 329   4                     SEND_ICINFO_PC(0,0,5,csn);
 330   4      			   SpeakSound();
 331   4                     break; 
 332   4      
 333   4                case 0x01:   //卡验证                          
 334   4                     sector_num=Receive_Buf_UART1[2]*4+3;//算出密钥所在的扇区
 335   4                     if(Receive_Buf_UART1[3]==0x0A)         //认证密钥
 336   4                             selec_abkey=PICC_AUTHENT1A;
 337   4                     if(Receive_Buf_UART1[3]==0x0B) 
 338   4                             selec_abkey=PICC_AUTHENT1B;    
 339   4                     switch(Receive_Buf_UART1[4]){
 340   5          		   case 0x01:
 341   5      			       memmove(keybuf,Receive_Buf_UART1+5,6);                            
 342   5      			       status=Mf500HostCodeKey(keybuf,keycodebuf);//将密钥转换成RC500格式                              
             -                                                                   
 343   5       		           status=Mf500PiccAuthKey(selec_abkey,csn,keycodebuf,sector_num);                             
 344   5                         if(status==0)                                  
 345   5      			              SEND_ICINFO_PC(1,0,0,NULL);                                                              
             -                                  
 346   5                  	   else     
 347   5                                SEND_ICINFO_PC(1,1,0,NULL);   
 348   5                         SpeakSound();
 349   5                         break;    
 350   5                     case 0x02:
 351   5      			       e2key_secotor=Receive_Buf_UART1[5];                                                             
             -  			           
 352   5                 	       status= Mf500PiccAuthE2(selec_abkey,csn,e2key_secotor,sector_num);
 353   5                         // 参数e2key_secotor 0 <= e2key_sector <= 15此为e2rom的扇区号                     
 354   5                         // 参数sector_num为卡的扇区0  block  0 <= block <= 15 即为认证的卡的扇区               
             -    
 355   5                         if(status==0)                 		
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 7   

 356   5                                SEND_ICINFO_PC(1,0,0,NULL);                            
 357   5                         else  
 358   5                                SEND_ICINFO_PC(1,1,0,NULL); 
 359   5                         SpeakSound();
 360   5      				   break;   
 361   5      			   default:
 362   5      			        SEND_ICINFO_PC(1,2,0,NULL);
 363   5      					SpeakSound();
 364   5      			    	break;                                                 
 365   5      				}    
 366   4                     break;
 367   4      
 368   4      		 case 0x02:  //卡的初始化值操作
 369   4                     block_num=Receive_Buf_UART1[2]*4+Receive_Buf_UART1[3];
 370   4                     memmove(temp_buf,Receive_Buf_UART1+4,16);   //搬移16个16进制数      			                    
             -                                                  
 371   4                     status=Mf500PiccWrite(block_num,temp_buf);                              
 372   4       			   if(status==0)                 		
 373   4                     	   SEND_ICINFO_PC(2,0,0,NULL);                             
 374   4                     else  
 375   4                         SEND_ICINFO_PC(2,1,0,NULL);                                
 376   4                     SpeakSound();
 377   4                     break;		
 378   4      					
 379   4          	 case 0x03:   //卡的增减值操作
 380   4                     block_num=Receive_Buf_UART1[2]*4+Receive_Buf_UART1[3];
 381   4                     //memmove(temp_buf,RECEIVEBUFFER+5,1);   //搬移1个16进制数  
 382   4                     temp_buf[0]=Receive_Buf_UART1[5];
 383   4                     temp_buf[1]=Receive_Buf_UART1[6];
 384   4                     temp_buf[2]=0;
 385   4                     temp_buf[3]=0;
 386   4                     switch(Receive_Buf_UART1[4]){
 387   5      		       case 0x01:
 388   5      			       status=Mf500PiccValue(0xc0,block_num,temp_buf,block_num);//减值
 389   5                         if(status==0)
 390   5                               SEND_ICINFO_PC(3,0,0,NULL);                                                      
             -                  
 391   5                         else
 392   5      			             SEND_ICINFO_PC(3,1,0,NULL);  
 393   5                         SpeakSound();
 394   5      				   break; 
 395   5      			   case 0x02:
 396   5                         status=Mf500PiccValue(0xc1,block_num,temp_buf,block_num); //增值操作                   
             -         
 397   5                         if(status==0)
 398   5                               SEND_ICINFO_PC(3,0,0,NULL);                                                      
             -                              
 399   5                         else 
 400   5                               SEND_ICINFO_PC(3,1,0,NULL);                  
 401   5                         SpeakSound();
 402   5                         break;
 403   5      			   default:
 404   5                         SEND_ICINFO_PC(3,2,0,NULL);  
 405   5      			       break;							   
 406   5      			   }    
 407   4      			   break;
 408   4      
 409   4      	   case 0x04:  //读写块操作					                             
 410   4                 block_num=Receive_Buf_UART1[2]*4+Receive_Buf_UART1[3];
 411   4                 switch(Receive_Buf_UART1[4]){
 412   5      		       case 0x01:
 413   5      				    status=Mf500PiccRead(block_num,rbuf);             
C51 COMPILER V6.00i MAIN                                                                   07/16/2004 10:11:59 PAGE 8   

 414   5                          if(status==0)		                              
 415   5      				           SEND_ICINFO_PC(4,0,16,rbuf);                                                               
             -             
 416   5                  		else
 417   5                                 SEND_ICINFO_PC(4,1,0,NULL);                                                    
             -                                                      
 418   5                          SpeakSound(); 
 419   5                          break;
 420   5      			   case 0x02:
 421   5                          memmove(temp_buf,Receive_Buf_UART1+5,16);   //搬移16个16进制数      			               
             -                                                       
 422   5                          status=Mf500PiccWrite(block_num,temp_buf);                              
 423   5       			  		if(status==0)                 		
 424   5                       	       SEND_ICINFO_PC(4,0,0,NULL);  //显示写成功                             
 425   5                          else  
 426   5                                 SEND_ICINFO_PC(4,1,0,NULL);     
 427   5                          SpeakSound();
 428   5                          break;
 429   5      			   default:
 430   5      			        SEND_ICINFO_PC(4,2,0,NULL);     
 431   5      			        break; 
 432   5      			   }

⌨️ 快捷键说明

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