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

📄 t6963c.c

📁 51单片机游戏程序包括图纸
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <AT89X52.h>	
#include "t6963c.h"
#include "fangkuai.h"
#include "typedef.h"

static uint txthome=0x0000;
static uint grshome=0x1000;

//LCD接口定义
sfr   PORTD = 0x90 ;
sbit  PCD = P2^7 ;
sbit  PWR = P2^5 ;
sbit  PRD = P2^6 ;

//常量数据
unsigned char code CCTable[] = {
/*冯   CB7EB */
0x00,0x47,0x20,0x29,0x09,0x09,0x11,0x13,0x21,0xE0,0x2F,0x20,0x20,0x20,0x20,0x20,
0x00,0xF8,0x08,0x08,0x10,0x10,0x10,0xFC,0x04,0x04,0xF4,0x04,0x04,0x04,0x28,0x10,

/*燕   CD1E0 */
0x04,0x04,0xFF,0x04,0x17,0x10,0xF7,0x14,0x34,0xD7,0x00,0x28,0x24,0x66,0xC2,0x00,
0x40,0x40,0xFE,0x40,0xC0,0x14,0xDE,0x50,0x52,0xCE,0x00,0x88,0x44,0x66,0x22,0x00,

/*辉   CBBD4 */
0x10,0x13,0x96,0x58,0x51,0xFE,0x28,0x28,0x29,0x28,0x28,0x2B,0x4C,0x48,0x80,0x00,
0x00,0xFE,0x44,0x40,0xFC,0x40,0xA0,0xA0,0xFC,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,

/*制   CD6C6 */
0x24,0x34,0x24,0x3F,0x44,0x04,0x7F,0x04,0x3F,0x24,0x24,0x24,0x24,0x27,0x05,0x04,
0x04,0x04,0x24,0xA4,0x24,0x24,0xA4,0x24,0xA4,0xA4,0xA4,0xA4,0x84,0x84,0x14,0x08,

/*作   CD7F7 */
0x08,0x0C,0x09,0x13,0x12,0x34,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x80,0x80,0x00,0xFE,0x80,0x88,0xFC,0x80,0x80,0x84,0xFE,0x80,0x80,0x80,0x80,0x80,

/*得   CB5C3 */
0x13,0x1A,0x23,0x4A,0x8B,0x10,0x13,0x30,0x50,0x97,0x10,0x11,0x11,0x11,0x10,0x10,
0xF8,0x08,0xF8,0x08,0xF8,0x00,0xFE,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x50,0x20,

/*分   CB7D6 */
0x08,0x0C,0x08,0x10,0x10,0x20,0x40,0x9F,0x04,0x04,0x04,0x04,0x08,0x10,0x20,0x40,
0x80,0x80,0x40,0x20,0x30,0x18,0x0E,0xE4,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,0x00,

/*等   CB5C8 */
0x20,0x3E,0x28,0x45,0x85,0x3F,0x01,0xFF,0x00,0x00,0x7F,0x04,0x02,0x02,0x00,0x00,
0x80,0xFC,0xA0,0x10,0x10,0xF8,0x00,0xFE,0x20,0x20,0xFC,0x20,0x20,0x20,0xA0,0x40,

/*级   CBCB6 */
0x10,0x13,0x20,0x24,0x44,0xF8,0x10,0x21,0x7D,0x41,0x02,0x1A,0xE4,0x08,0x11,0x06,
0x00,0xF8,0x88,0x88,0x90,0x90,0xBE,0x44,0x44,0x48,0x28,0x10,0x30,0x48,0x8E,0x04,

/*按   CB0B4 */
0x10,0x10,0x10,0x13,0xFE,0x10,0x14,0x1B,0x30,0xD1,0x11,0x10,0x10,0x11,0x56,0x20,
0x40,0x20,0x20,0xFE,0x04,0x40,0x40,0xFE,0x88,0x10,0x90,0x60,0x58,0x8E,0x04,0x00,

/*开   CBFAA */
0x00,0x7F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x08,0x08,0x10,0x20,0x40,0x00,
0x00,0xFE,0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

/*始   CCABC */
0x10,0x18,0x10,0x10,0xFC,0x25,0x24,0x44,0x44,0x28,0x18,0x14,0x22,0x42,0x80,0x00,
0x20,0x30,0x20,0x48,0x84,0xFE,0x84,0x00,0xFC,0x84,0x84,0x84,0x84,0xFC,0x84,0x00,

/*太   CCCAB */
0x01,0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x02,0x02,0x04,0x05,0x08,0x10,0x20,0x40,
0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x98,0xCC,0x86,0x04,

/*棒   CB0F4 */
0x20,0x20,0x27,0x20,0xFB,0x20,0x77,0x69,0xA2,0xAD,0x20,0x27,0x20,0x20,0x20,0x20,
0x40,0x40,0xFC,0x40,0xF8,0x80,0xFE,0x20,0x58,0xF6,0x40,0xFC,0x40,0x40,0x40,0x40,

/*了   CC1CB */
0x00,0x7F,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x05,0x02,
0x00,0xFC,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*!   CA3A1 */
0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};


/////////////////////////底层调用小函数/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

//延时几微秒
void delay(void)
{
 uchar i=0;
 i++;
 i++;
 }
//读状态位0和1,sta0=1:指令读写状态准备好;sta1=1:数据读写状态准备好 
void ST01Read(void)
{
  
	PORTD=0XFF;
	while(1){
		PCD=1;		
		PRD=0;    	
	   	PRD=1;		
		if ((PORTD^0==1)&&(PORTD^1==1))  break;  //判断指令、数据读写状态是否准备好
	
	}
}

//读状态位sta2,    检测数据自动 读 状态是否准备好 
static void ST2Read(void)
{
  
	PORTD=0XFF;
	while(1){
		PCD=1;		 
		PRD=0;    	
		PRD=1;						 
		if (PORTD^2==1)  break;  
	}
}

//读状态位sta3,    sta3=1:数据自动 写 状态准备好 
static void ST3Read(void){
  
	PORTD=0XFF;
	while(1)
	{
		PCD=1;		
		PRD=0;    	
		PRD=1;		
		if (PORTD^3==1)  break; 
	}
}

//读状态位sta6,   检测屏读或屏拷贝出错状态:sta6=1:出错;sta6=0:正确 
static void ST6Read(void)
{
  
	PORTD=0XFF;
	while(1)
	{
		PCD=1;		
		PRD=0;    	
		PRD=1;			
		if (PORTD^6==0)  break;  
	}
}

//////////////////////////////////对T6963C进行读写数据/////////////////////////////////

//写数据
static void WRData(uchar DData)
{
	ST01Read();
	PCD=0;      		
	PORTD=DData;
	PWR=0;
	PWR=1;      		
} 

///读数据
static void RDData(void)
{
	ST01Read();             
	PCD=0;          		
	PRD=0;           		
	PRD=1;          	
}

//写命令
static void WRCommand(uchar command)
{
	ST01Read();	        
	PCD=1;           
	PWR=0;	        	
	PORTD=command;      
	PWR=1;		
}

//单参数指令
static void WRCommandOne(uchar data1,uchar command)
{
	WRData(data1);		//写数据
	WRCommand(command);	//写命令
}
//双参数指令
static void WRCommandTwo(uchar data1,uchar data2,uchar command)
{
	WRData(data1);		//写数据
	WRData(data2);		//写数据
	WRCommand(command);	//写命令
}

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

/////////////////////////////T6963C常用处理程序/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////

//初始化T6963 LCD 显示
void Init_LCD_Graphic(void)
{
	
	//设置文本显示首地址
	
	WRCommandTwo(0x00,0x00,0x40);
	
	//设置文本显示区宽度 40字节
    
	WRCommandTwo(0x10,0x00,0x41);
	
	//设置图形显示区首地址
	
	WRCommandTwo(0x00,0x10,0x42);	 	//首地址0x0800
	
	//设置图形显示区宽度
	
	WRCommandTwo(0x10,0x00,0x43);	//40字节

    //设置CGRAM的首地址

	WRCommandTwo(0x03,0x00,0x22);		
		
	//设置显示方式	
		
	WRCommand(0x80);	 	//启用内部字符发生器,显示方式是文本与图形逻辑或
	
	//设置显示状态	
			
	WRCommand(0x9f);	//启用光标闪烁、光标显示、文本显示、图形显示
   
}

//清显示RAM
void ClrGraphic(void){
    uint i;
	//设置显示地址
			
	WRCommandTwo(0x00,0x00,0x24);
	
	//进入自动写方式
	
	WRCommand(0xb0);	
	//清8KRAM	
	
   	for(i=0;i<256;i++){
   	
   		WRData(0x00);
   	}   	
   	//退出自动写方式
   	
	WRCommand(0xb2);
}

/////////////////////////////////////////////////////////////////////////
//***********************************************************************
//= 函数原型: void char_addr_Pointer_Set(uchar x, uchar y)
//= 功    能: 根据字符的行列设置vram地址
//= 参    数: x行坐标,y列坐标
//= 返 回 值:
//= 函数性质:私有函数
//***********************************************************************

void char_addr_Pointer_Set(uchar x, uchar y)
{
    uint iPos;
	uint temp;
    iPos = y * 16 + x + txthome;
	temp=iPos;
	y=iPos>>8;
	x=temp&0x00ff;
    WRCommandTwo(x,y,0x24);
} 

//************************************************************************
//= 函数原型: void image_addr_Pointer_Set(uchar x, uchar y)
//= 功    能: 根据的行列设置图形字节的地址
//= 参    数:
//= 返 回 值:
//= 函数性质:私有函数

⌨️ 快捷键说明

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