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

📄 main.#3

📁 12232液晶单片机驱动程序源代码
💻 #3
📖 第 1 页 / 共 5 页
字号:
//#include "REG51F.H"
//#include "c8051F020.h"
//#include "absacc.h" 
//#include "string.h"
//#include "stdio.h"
//#include "intrins.h"
//#include <MfRcuC.h>
//#include <MfRc500R.h>
//#include <MfErrNo.h>
//don't del above test,else will don't open .c 
#include "c8051F020.h"
#include "absacc.h" 
#include "string.h"
#include "stdio.h"
#include "intrins.h"
#include <MfRcuC.h>
#include <MfRc500R.h>
#include <MfErrNo.h>
#include <I2c.h>

/////////////////////////////////液晶测试
#define uchar unsigned char

//#define data  1
#define comm  0
#define f_page  0xb8
#define f_row   0xc0
#define f_line  0x00
//#define LCD12232_DATA P2 //数据口

//******************************************************************
// 串口1中断服务相应定义
unsigned char xdata Receive_Buf_UART1[30];// UART1 RECEIVE buffer
unsigned char xdata UART1_Receive_Len;	
bit Receive_Flag_UART1=0,Padding_Flag_UART1=0,UART1_Rec_Complete=0; // UART1 RECEIVE FLAG
//********************************************************************
unsigned char xdata MLastSelectedSnr[5];
unsigned char xdata Returnval; 
unsigned char xdata MRcvBuffer[64] ,MSndBuffer[16]; //
static MfCmdInfo  MInfo;
unsigned char status=0;
//********************************************
bit haveset=0;
sbit PReset=P1^3;
//sbit csflash=P1^1;
sbit csrc500=P1^2;
sbit csrtc=P1^1;
sbit DIR=P1^4;   //DIR=1时发送
sbit speak=P1^7;

sbit rst=P1^1;

sbit e1 =P1^5;
sbit e2 =P1^6;
sbit rw =P1^7;
sbit a0 =P1^4;

sbit bf =P2^7;

uchar code tab1[]={
0x0, 0x22, 0x64, 0x0C, 0x80, 0x04, 0x74, 0x84, 
   0x04, 0x04, 0x04,0x0C4, 0x3E, 0x04, 0x00, 0x00, 
   0x04, 0x04, 0x7E, 0x01, 0x80, 0x40, 0x20, 0x11, 
   0x0A, 0x04, 0x0B, 0x10, 0x60,0x0C0, 0x40, 0x00, 
/*--  文字:  科  --*/
0x00,0x10,0x14,0x92,0x51,0x30,0x13,0x1C,0x10,0x00,0x1F,0x00,0x00,0xFF,0x00,0x00,
0x02,0x04,0x08,0x10,0x20,0xC0,0x60,0x1C,0x08,0x00,0xE0,0x04,0x02,0xFC,0x00,0x00,
/*--  文字:  国  --*/
0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0x8A,0x8A,0x0A,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x49,0x4E,0x48,0x40,0xFF,0x00,0x00,
/*--  文字:  技  --*/
0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00,
0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00,
/*--  文字:  肇  --*/
0x80,0x60,0x1C,0x95,0x96,0x94,0x9C,0xC8,0xA4,0xAF,0x94,0x94,0x2C,0x44,0x44,0x00,
0x20,0x22,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2F,0x22,0x22,0x20,0x00,
/*--  文字:  有  --*/
0x00,0x04,0x84,0x44,0xE4,0x34,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,
0x02,0x01,0x00,0x00,0xFF,0x09,0x09,0x09,0x29,0x49,0xC9,0x7F,0x00,0x00,0x00,0x00,
/*--  文字:  庆  --*/
0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0xC5,0x7E,0xC4,0x44,0x44,0x44,0x44,0x44,0x00,
0x40,0x30,0x0F,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x18,0x30,0x60,0x20,0x00,
/*--  文字:  限  --*/
0xFE,0x02,0x32,0x4E,0x82,0x00,0xFE,0x4A,0xCA,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,
0xFF,0x00,0x02,0x04,0x03,0x00,0xFF,0x40,0x20,0x03,0x0C,0x12,0x21,0x60,0x20,0x00,
/*--  文字:  金  --*/
0x40,0x40,0x20,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x50,0x20,0x60,0x20,0x00,
0x40,0x40,0x42,0x42,0x4A,0x72,0x42,0x7F,0x42,0x62,0x5A,0x42,0x42,0x40,0x40,0x00,
/*--  文字:  公  --*/
0x00,0x00,0x80,0x40,0x30,0x0E,0x84,0x00,0x00,0x0E,0x10,0x60,0xC0,0x80,0x80,0x00,
0x00,0x01,0x20,0x70,0x28,0x24,0x23,0x31,0x10,0x10,0x14,0x78,0x30,0x01,0x00,0x00,
/*--  文字:  鹏  --*/
0x00,0xFE,0x12,0xFE,0x00,0xFE,0x12,0xFE,0x00,0xFC,0x0E,0x35,0x44,0x7C,0x00,0x00,
0x20,0x1F,0x21,0x7F,0x20,0x1F,0x41,0x7F,0x08,0x09,0x09,0x29,0x49,0x21,0x1F,0x00,
/*--  文字:  司  --*/
0x00,0x10,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0x02,0xFE,0x00,0x00,
0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,0x20,0x40,0x3F,0x00,0x00
};


uchar code tab2[]={
//--  文字:  8  --
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
//--  文字:  G  --
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,
//--  文字:  6  --
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
//--  文字:  o  --
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
//--  文字:  -  --
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
//--  文字:  l  --
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
//--  文字:  7  --
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
//--  文字:  d  --
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,
//--  文字:  5  --
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
//--  文字:  e  --
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,
//--  文字:  8  --
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
//--  文字:  n  --
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
//--  文字:  -  --
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
//--  文字:  P  --
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,
//--  文字:  2  --
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
//--  文字:  a  --
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
//--  文字:  2  --
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
//--  文字:  l  --
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
//--  文字:  2  --
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
//--  文字:  m  --
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
//--  文字:  3  --
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
//--  文字:     --
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//--  文字:  1  --
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
//--  文字:  L  --
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,
//--  文字:  9  --
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
//--  文字:  C  --
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
//--  文字:  6  --
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
//--  文字:  M  --
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00
};

uchar code tab3[488]={
//--  调入了一幅图像:F:\梁\其它\HOCO12232.bmp  --
//--  宽度x高度=122x32  --
0x00,0x00,0x00,0x70,0xF8,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xF0,0xE0,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x48,0xD4,0xB4,0x62,0xC2,0x82,0x03,0x02,0x02,
0x02,0x84,0xC4,0xE0,0xA0,0xE0,0x60,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xB0,0xF8,0xF0,0xF0,0xF8,0xFC,0x60,0x60,0x30,
0x18,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xD8,0x58,0x58,0x58,0x58,
0x58,0xD8,0xD8,0x98,0xB0,0x30,0x70,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x07,0x07,0x02,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x04,
0x0D,0x1B,0x36,0x6D,0xDB,0xF6,0xED,0xFB,0xFE,0xFE,0xFF,0x7F,0x1F,0x07,0x01,0x00,
0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFE,0xFE,
0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xE0,0xC0,0xC0,0xF8,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x3E,0xF8,0x01,0x37,
0x0C,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x60,0xFF,0xC7,0x03,0x03,0x03,0x03,0xE1,
0xFF,0x3F,0x0F,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x0F,0x3F,0x7F,0xFF,0xEF,
0xBF,0x7F,0xFF,0xC7,0x07,0x1F,0xFE,0xF8,0xB0,0x60,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x10,0x20,0x40,0x40,0x80,0x83,
0xFF,0xFF,0xFF,0xFF,0x83,0x40,0x40,0x20,0x10,0x08,0x04,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x7F,0xFF,
0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0x3F,0x3F,0x0F,0x61,0x3F,0x1F,0x2F,0x3F,
0x1F,0x0F,0x00,0x0F,0x07,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1E,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x70,0x3C,0x1F,0x07,0x03,0x01,0x01,0x00,0x00,
0x01,0x07,0x07,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0xEC,0x00,
0x7C,0x44,0x7C,0x00,0x7C,0x40,0x40,0x00,0x7C,0x44,0x38,0x00,0x7C,0x14,0x1C,0x00,
0x7C,0x40,0x40,0x00,0x78,0x24,0x78,0x00,0x7C,0x18,0x18,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x10,0x04,0x07,0x00,0x01,0x00,0x00,0x00,0x01,
0x05,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

/****************************************************************************
*                                                                           *
* Function:     main                                                        *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
****************************************************************************/
void main(void)
{
 // unsigned char idata i;
  unsigned char xdata catq[2],csn[5];
  unsigned char xdata rbuf[16]={0};
  unsigned char xdata keybuf[6],keycodebuf[12],temp_buf[17];
  unsigned char xdata sector_num;  //扇区绝对号
  unsigned char xdata selec_abkey;  //key a b selector
  unsigned char xdata block_num;    //块绝对号
  unsigned char xdata e2key_secotor;
 // unsigned short idata rc500_e2addr;
  unsigned short delay;
  unsigned char xdata i,j,buff[40];
 
	OSCXCN = 0x67;					// Enable external crystal	
	WDTCN = 0xDE;					// disable watchdog timer
	WDTCN = 0xAD;

    EMI0CF = 0x07;	      			// Set External Memory Configuration Register,
	                                //使用片内 4K 和片外存储器低端口,地址数据复用
									//因为地址与数据复用,所以应将XBR2.1设为高电平,以使交叉开关
									//跳过ALE,RD,WR 
                            	
    XBR0 = 0X05;                    //SET  UART0,I2C    
    XBR1 = 0x10;     	      		// Set INT1
    XBR2 = 0x42;              		// Enable XBAR,Enable EMFILE
  
    P0MDOUT = 0xe1; 				//Output configuration for P0 
	                                //ALE,RD,WR,TXD配置为推挽输出,RXD,INT1配置为漏级开路  
	P1MDOUT = 0xff; 				// Output configuration for P1 
	                                //复位脚配置为推挽输出
    P2MDOUT = 0x00; 				// Output configuration for P2 
    P3MDOUT = 0xff; 				// Output configuration for P3
  
    P0|=0x1A;                       //set RX0,RX1,INT1为输入 
	

	delay=256;						// Delay >1 ms  before polling XTLVLD.
	while(delay--);

	while (!(OSCXCN & 0x80));		// Wait until external crystal has									// started.
	OSCICN = 0x0C;					// Switch to external oscillator
	OSCICN = 0x88;					// Disable internal oscillator; enable 
                        			// missing clock detector.
	while (!(OSCXCN & 0x80));		// Wait until external crystal has									// started.
	OSCICN = 0x08;					// Switch to external oscillator

///////////////////////////////////////////////////
//test 液晶    


   init_lcd ();
 
   
    wrlattice (0x00,0x00);
    disphz (tab1);
    delay1 (300);
    wrlattice (0xff,0x00);
    delay1 (300);
    wrlattice (0x00,0x00);
    dispzf (tab2);
    delay1 (300);
    wrlattice (0x33,0x33);
    wrlattice (0x00,0x00);
    delay1 (300);
    disptu (tab3);
    delay1 (300);
 

/////////////////////////////////

   csrc500=0;
   csrtc=1;
   SpeakSound();    
   SpeakSound();

	// 初始化UART0、TIMER2
  	Baudrate_Init();                // 初始化串口0的波特率
	TI0=0;                          //发送清零  
    DIR=0;                          //485置于接收状态

    IT1=1;                          // 外部中断1设为沿触发 
   
	ES0=1;          	            //允许串口0中断	
	 
    EX1=1;                          //外部中断1开放
    EA=1;

//---------------------i2c init------------------------
   SMB0CN = 0x44;                   // Enable SMBus with ACKs on acknowledge 
                                    // cycle
   SMB0CR = -100;                   // SMBus clock rate = 100kHz.
   EIE1 |= 2;                       // SMBus interrupt enable
   SM_BUSY = 0;                     // Free SMBus for first transfer.
// TEST I2C CODE---------------------------------------------------------------------
   for(i=0;i<40;i++)   
     SM_Send(CHIP_A,0x0FFF+i,i);      // Send 0x53(data) to address 0x88 on CHIP_A

  // SM_Send(CHIP_B, 0x0001, 0x66);      // Send 0x66(data) to address 0x01 on CHIP_B
  // SM_Send(CHIP_C, 0x0010, 0x77);
  // SM_Send(CHIP_B, 0x0333, 0xF0);
 //  SM_Send(CHIP_A, 0x0242, 0xF0);
   for(i=0;i<40;i++)
   {
    buff[i] = SM_Receive(CHIP_A, 0x0FFF+i); // Read address 0x88 on CHIP_A
	}
  // check = SM_Receive(CHIP_B, 0x0001); // Read address 0x01 on CHIP_B
  // check = SM_Receive(CHIP_C, 0x0010);
  // check = SM_Receive(CHIP_B, 0x0333);
  // END TEST I2C CODE-----------------------------------------------------------------
        
   status=Mf500PcdConfig();  //配置RC500内部寄存器函数
   status=Mf500PiccHalt();  

while(1)  //while(1)
{         
  if(UART1_Rec_Complete==1){//接收成功
       UART1_Rec_Complete=0; 
                                                                                    		
       switch(Receive_Buf_UART1[1]){  //run command

          case 0x00:   //择卡命令                        
               do{
               	  status=Mf500PiccRequest(PICC_REQALL,catq);                                   	                                      
                  status=Mf500PiccAnticoll(0,csn);       //csn 为返回的卡序列号SN                                           
                  status=Mf500PiccSelect(csn,catq);      //选择这张卡 				   								                                                                                                             		                                                                
                }while(status); 								                                                                                                                                                                                           
               SEND_ICINFO_PC(0,0,5,csn);
			   SpeakSound();
               break; 

          case 0x01:   //卡验证                          
               sector_num=Receive_Buf_UART1[2]*4+3;//算出密钥所在的扇区
               if(Receive_Buf_UART1[3]==0x0A)         //认证密钥
                       selec_abkey=PICC_AUTHENT1A;
               if(Receive_Buf_UART1[3]==0x0B) 
                       selec_abkey=PICC_AUTHENT1B;    
               switch(Receive_Buf_UART1[4]){
    		   case 0x01:
			       memmove(keybuf,Receive_Buf_UART1+5,6);                            
			       status=Mf500HostCodeKey(keybuf,keycodebuf);//将密钥转换成RC500格式                                                                                                 
 		           status=Mf500PiccAuthKey(selec_abkey,csn,keycodebuf,sector_num);                             
                   if(status==0)                                  
			              SEND_ICINFO_PC(1,0,0,NULL);                                                                                                
            	   else     
                          SEND_ICINFO_PC(1,1,0,NULL);   
                   SpeakSound();
                   break;    

⌨️ 快捷键说明

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