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

📄 test1.c

📁 单片机控制的12864液晶显示器的驱动程序,通过按键控制
💻 C
字号:
#include "C8051F200.h"
#include "TEST1.H"
#include "disdrive.h"

//--------------------------------全屏显示”科“字---------------------------------------------

char code z_qing2[] = {/*--  文字:  清  --*/0x10,0x61,0x86,0x60,0x22,0xAA,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x20,0x00,0x00,0x02,0x3E,0x01,0x00,0x00,0x3F,0x0A,0x0A,0x0A,0x0A,0x2A,0x3F,0x00,0x00,0x00,0x00};
char code z_chu2[] =  {/*--  文字:  除  --*/0x00,0xFE,0x22,0x5A,0x86,0x20,0x10,0x28,0x24,0xE3,0x24,0x28,0x10,0x20,0x00,0x00,0x00,0x3F,0x02,0x04,0x13,0x09,0x05,0x11,0x21,0x1F,0x01,0x05,0x09,0x10,0x00,0x00};
char code z_dang[] =  {/*--  文字:  当  --*/0x00,0x00,0x22,0x24,0x28,0x20,0x20,0x3F,0x20,0x28,0x24,0x22,0xE0,0x00,0x00,0x00,0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x3F,0x00,0x00,0x00};
char code z_qian2[] = {/*--  文字:  前  --*/0x08,0x08,0xE8,0xA9,0xAA,0xAC,0xE8,0x08,0x0C,0xEA,0x09,0xE8,0x0C,0x08,0x00,0x00,0x00,0x00,0x3F,0x02,0x12,0x22,0x1F,0x00,0x00,0x17,0x20,0x1F,0x00,0x00,0x00,0x00};
char code z_liang[] = {/*--  文字:  量  --*/0x00,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBF,0x22,0x20,0x00,0x00,0x00,0x20,0x28,0x2F,0x2A,0x2A,0x2A,0x3F,0x2A,0x2A,0x2A,0x2F,0x28,0x20,0x00,0x00};
char code z_ANULL[] = {/*--  文字:  A  --*/ 0x00,0x00,0xE0,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1E,0x13,0x02,0x13,0x1E,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char code z_VNULL[] = {/*--  文字:  V  --*/ 0x08,0x78,0x88,0x00,0x88,0x78,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char code z_xiang[] = {/*--  文字:  相  --*/0x10,0x10,0xD0,0xFF,0x50,0x90,0x00,0xFE,0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x04,0x03,0x00,0x3F,0x00,0x00,0x00,0x3F,0x11,0x11,0x11,0x11,0x3F,0x00,0x00,0x00};

char code * code Page_ke [] = {z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
							   z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
							   z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
							   z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
								};


void FeedDog(void)	//喂狗
{	
	WDTCN = 0xA5;
}

void WatchDog(void) 
{
	WDTCN = 0x07;					// Watchdog Timer Control Register // 超时间隔94ms
	WDTCN = 0xFF;					// 禁止看门狗失效,一直有效并关不掉
	WDTCN = 0xA5;					// 复位并允许;
}

void KillDog(void) 
{
	EA = 0;
	WDTCN = 0xDE;					// Disable WDT
	WDTCN = 0xAD;
}


// 11.0592M
void SYSCLK_Init(void)
{
	OSCXCN = 0x20;		//00100000	// start external oscillator with 模式为晶振
									// 11.0592MHz crystal
	OSCICN = 0x88;					// select external oscillator as SYSCLK
									// source and enable missing clock
									// detector
}

// port init
void PORT_Init(void)
{

	PRT0MX = 0x01;	//端口P00和P01配置为串口数据线
	PRT1MX = 0x00;
	PRT2MX = 0x00;

}

void UART_Init(void)	// 串口初始化
{					
	SCON	= 0xD0;						//串口工作方式3					
	T2CON	= 0x30;						// 定时器2作为串口1的波特率发生器
	RCAP2	= -(SYSCLK/BAUDRATE/32);
	TR2		= 1;						// TR2=1
}

void Timer0_Init(void) {

	TMOD	= 0x01;						// 定时器0工作在16位定时器方式;
	CKCON	= 0x00;
	TH0		= TIMER0_H;					//定时1ms
	TL0		= TIMER0_L;

//	TR0  = 1;							//开始计数
}

void InterruptEnable_Init(void) 
{
	IE   = 0x12;						// 屏蔽所有中断,开中断UART0,T0
	IP   = 0x10;						// 串口优先级要高,其余采用默认优先级
	EIE1 = 0x00;						// 其余中断禁止					
	EIE2 = 0x00;						
	EIP1 = 0x00;
	EIP2 = 0x00;
	EA   = 1;
}


void SYSINI(void)
{
	KillDog();
	SYSCLK_Init();						// initialize oscillator
	PORT_Init();						// initialize crossbar and GPIO
	UART_Init();
	Timer0_Init();
	InterruptEnable_Init();
	WatchDog();							// 打开看门狗;
}


void main(void)
{
		unsigned char i = 0;
		SYSINI();
		HardInitailLED();
		LedFillNULL();
		while(1)
		{
		ShowCharPage(Page_ke,4,0);
		FeedDog();
		delay(0xFFFF);
		FeedDog();
		delay(0xFFFF);
		FeedDog();
		}		
}


//清屏
void LedFillNULL()
{       char page ;
        char yData;
        for(page=0x00; page<0x08; page++)
        {
           SetPosition(page,0);
           for(yData=0; yData<64; yData++)
                        SendLedData(0x00);
           SetPosition(page,9);
           for(yData=0; yData<64; yData++)
                        SendLedData(0x00);
        }
 }


////////////////////////////////////////////////////////////////
//interal fuctions:
//set position to x,y
void SetPosition(UCHAR startx,UCHAR starty)
{
        DriveControlChip(startx,starty);
        SetLedXAddress(startx%8);         //X Address should <=7
        SetLedYAddress(starty%8*8);     //Y Address should <=63
}

//show one dot:the minus controlable number
void ShowOneDot(char code *pc32,unsigned char isconvert,unsigned char startx,unsigned char starty)
{
        char ucNum = 0;
        char showchar;

        SetPosition(startx,starty);
        for( ucNum=0; ucNum<8; ucNum++)
        {
                showchar = *(pc32+ucNum);
                if(isconvert==0x00)
                        SendLedData(showchar);
                else
                {
                        showchar = ~showchar;
                        SendLedData(showchar);
                }
        }
}

//show char:chinese
void ShowOneChar(char code *pc32,unsigned char isconvert,unsigned char startx,unsigned char starty)//startx<8  starty<16
{
        ShowOneDot(pc32,isconvert,startx,starty);
        ShowOneDot(pc32+16,isconvert,startx+1,starty);
        ShowOneDot(pc32+8,isconvert,startx,starty+1);
        ShowOneDot(pc32+24,isconvert,startx+1,starty+1);
}

void ShowCharPage(char code ** ZiMoPage,unsigned char ucNumLine,unsigned char  ucSelectLineNum)  //cNumLine = item num
{		      
		unsigned char ucLine;	//行变量
		unsigned char ucLineMax;//总的行最大值
		unsigned char ucSegment;//列变量
		unsigned char ucNumFirst;//字模首位变量在行列式中的位置
		if(ucSelectLineNum == 0)	//是显示数据页面不是菜单页面,注意:如果是显示数据页面,cNumLine<=4
		{		
			for(ucLine=0;ucLine<ucNumLine;ucLine=ucLine++)
				for(ucSegment=0;ucSegment<8;ucSegment=ucSegment++)
				{
					ShowOneChar(*(ZiMoPage+ucLine*8+ucSegment),0x00,ucLine+ucLine,ucSegment+ucSegment);
				}
		}
		else
		{	
			ucNumFirst = (ucSelectLineNum/4)*32;//显示页面首字在行列式字模当中的首位
			
			if((ucNumLine-ucSelectLineNum)>=4) ucLineMax = 4;
			else ucLineMax = ucNumLine-(ucSelectLineNum/4)*4;
		
			for(ucLine=0;ucLine<ucLineMax;ucLine=ucLine++) 	
				for(ucSegment=0;ucSegment<8;ucSegment=ucSegment++)	//写入某一行
				{
					if(ucSelectLineNum%4==ucLine)
					{
						ShowOneChar(*(ZiMoPage+ucLine*8+ucSegment+ucNumFirst),0xFF,ucLine+ucLine,ucSegment+ucSegment);	
					}
					else
					{
						ShowOneChar(*(ZiMoPage+ucLine*8+ucSegment+ucNumFirst),0x00,ucLine+ucLine,ucSegment+ucSegment);		
					}
				}
		}
}	

⌨️ 快捷键说明

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