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

📄 cgm12864b.c

📁 C8051F.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
//-------------------------------------------------------------------------
//函数名称:      void LCD_WriteData1(char ch)
//函数功能:      向LCD控制芯片KS0108发送数据
//入口参数:      char ch 数据参数
//出口参数:      无
//全局变量引用:  无
//调用模块:      LCD_WaitReady1()
//----------------------------------------------------------------------
void LCD_WriteData1(char ch)	
{
	LCD_WaitReady1(); ////判断LCD是否处于忙状态
	LCD_CS2=SELECTCS;
	LCD_RW=0;
	LCD_RS=1;
	LCD_DATA=ch;
	LCD_E=1;
	LCD_E=0;
	LCD_CS2=!SELECTCS;
}
//-------------------------------------------------------------------------
//函数名称:      void LCD_WriteData2(char ch)
//函数功能:      向LCD控制芯片KS0108发送数据
//入口参数:      char ch 数据参数
//出口参数:      无
//全局变量引用:  无
//调用模块:      LCD_WaitReady2()
//----------------------------------------------------------------------
void LCD_WriteData2(char ch)
{
	LCD_WaitReady2();   //判断LCD是否处于忙状态
	LCD_CS1=SELECTCS;
	LCD_RW=0;
	LCD_RS=1;
	LCD_DATA=ch;
	LCD_E=1;
	LCD_E=0;
	LCD_CS1=!SELECTCS;
}
//-------------------------------------------------------------------------
//函数名称:      void LCD_WriteHZ(char x,char y,char *Dot) 
//函数功能:      在液晶的指定位置显示16*16点阵汉字
//入口参数:      char x:横向坐标 char y:纵向坐标 char *Dot:汉字点阵的首地址
//出口参数:      无
//全局变量引用:  无
//调用模块:      LCD_WriteCommand1(); LCD_WriteCommand2();
//               LCD_WriteData1();	LCD_WriteData1();
//----------------------------------------------------------------------
void LCD_WriteHZ(char x,char y,char *Dot) 
{
char i;
	for (i=0;i<32;i++)
	{
		if ((x+i%16)<64) //横向坐标小于64时在左屏显示汉字
		{
			LCD_WriteCommand1(0xB8+y+i/16);
			LCD_WriteCommand1(0x40+x+i%16);
			LCD_WriteData1(Dot[i]);
		}
		else             //横向坐标大于64时在右屏显示汉字
		{
			LCD_WriteCommand2(0xB8+y+i/16);
			LCD_WriteCommand2(0x40+x-64+i%16);
			LCD_WriteData2(Dot[i]);
		}
	}
}
//-------------------------------------------------------------------------
//函数名称:      void InitLCD(void)
//函数功能:      初始化液晶并清屏
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      Delay1ms(1);LCD_WriteCommand1(); LCD_WriteCommand2();
//               LCD_WriteData1();	LCD_WriteData1();
//----------------------------------------------------------------------

void InitLCD(void)	
{
	char i,j;
	LCD_RST=0;
	Delay1ms(1);
	LCD_RST=1;
	LCD_WriteCommand1(0xc0);	
	LCD_WriteCommand2(0xc0);
	LCD_WriteCommand1(0x3f);  	//开显示
	LCD_WriteCommand2(0x3f);
	for (j=0;j<8;j++)			//清屏
	{
		LCD_WriteCommand1(0xB8+j);	//清左半屏
		LCD_WriteCommand1(0x40);
		for (i=0;i<64;i++)
			LCD_WriteData1(0x00);
		LCD_WriteCommand2(0xB8+j);	//清右半屏
		LCD_WriteCommand2(0x40);
		for (i=0;i<64;i++)
			LCD_WriteData2(0x00);
	}
}
//-------------------------------------------------------------------------
//函数名称:      void DispBmp(char *buf)
//函数功能:      显示位图
//入口参数:      char *buf 位图数据首地址
//出口参数:      无
//全局变量引用:  无
//调用模块:      LCD_WriteCommand1(); LCD_WriteCommand2();
//               LCD_WriteData1();	  LCD_WriteData1();
//----------------------------------------------------------------------

void DispBmp(char *buf)	//显示一幅位图
{
int i,j;
	for (j=0;j<8;j++)			//显示位图
	{
		LCD_WriteCommand1(0xB8+j);	
		LCD_WriteCommand1(0x40);
		for (i=0;i<64;i++)
			LCD_WriteData1(buf[(j*2)*64+i]);
		LCD_WriteCommand2(0xB8+j);	
		LCD_WriteCommand2(0x40);
		for (i=0;i<64;i++)
			LCD_WriteData2(buf[(j*2+1)*64+i]);
	}
}
//-------------------------------------------------------------------------
//函数名称:      void SYSCLK_Init (void)
//函数功能:      系统时钟初始化;使能外部时钟:11.0592MHz
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无
//----------------------------------------------------------------------
void SYSCLK_Init (void)
{
   int i;                              // delay counter
   OSCXCN = 0x67;                      // start external oscillator with
                                       // 18.432MHz crystal
   for (i=0; i < 256; i++) ;           // Wait for osc. to start up
   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
}
//-------------------------------------------------------------------------
//函数名称:      PORT_Init ()
//函数功能:      端口初始化;使能交叉开关
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无
//----------------------------------------------------------------------

void PORT_Init (void)
{
   XBR2    = 0x40;                     // Enable crossbar and weak pull-ups
}

//-------------------------------------------------------------------------
//函数名称:      Timer0_Init ()
//函数功能:      定时器0初始化;定时时间1ms
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无
//----------------------------------------------------------------------

void Timer0_Init (void)
{
   	CKCON|=0x8;
   	TMOD|=0x1;    	//16Bit
	Count1ms=10;
   	TR0 = 0;                         	// STOP Timer0
   	TH0 = (-SYSCLK/1000) >> 8;    		// set Timer0 to overflow in 1ms
   	TL0 = -SYSCLK/1000;
   	TR0 = 1;   	// START Timer0
   	IE|= 0x2; 
}

//-------------------------------------------------------------------------
//函数名称:      Timer0_ISR ()
//函数功能:      定时器0中断服务程序
//入口参数:      无
//出口参数:      无
//全局变量引用:  Count1ms
//调用模块:      无
//----------------------------------------------------------------------
void Timer0_ISR (void) interrupt 1  //1ms
{
	TH0 = (-SYSCLK/1000) >> 8;  
   	TL0 = -SYSCLK/1000;
	if (Count1ms) Count1ms--;
}

//-------------------------------------------------------------------------
//函数名称:      Delay1ms(unsigned char T)
//函数功能:      延时1ms程序
//入口参数:      unsigned char T :定时时间常数
//出口参数:      无
//全局变量引用:  Count1ms
//调用模块:      无
//----------------------------------------------------------------------

void Delay1ms(unsigned char T)
{
	Count1ms=T;
	while (Count1ms);
}

//-------------------------------------------------------------------------
//函数名称:      void Delay1s(unsigned char T)
//函数功能:      延时1s程序
//入口参数:      unsigned char T :定时时间常数
//出口参数:      无
//全局变量引用:  Count1ms
//调用模块:      Delay1ms()
//----------------------------------------------------------------------
void Delay1s(unsigned char T)
{
	while (T)
	{
		Delay1ms(200);
		Delay1ms(200);
		Delay1ms(200);
		Delay1ms(200);
		Delay1ms(200);
		T--;
	}
}

//---------------------------------------------------------------------------
// 主程序
//----------------------------------------------------------------------------

void main (void) 
{
	WDTCN = 0xde;
	WDTCN = 0xad;           //关看门狗
	SYSCLK_Init ();         //初始化时钟
	Timer0_Init();			//初始化定时器
	PORT_Init ();           //初始化IO口
	EA=1;					//开中断
 	InitLCD();              //清屏
	Delay1s(1);             //延时1S
	for (;;)
	{
		DispBmp(screen1); //显示位图"新华龙电子-单片机推广应用急先锋!"
		Delay1s(3);
		DispBmp(screen2); //显示位图"换代创新后的51-高速SOC美国silicon labs 8051F"
		Delay1s(3);
		InitLCD();        //清屏
		LCD_WriteHZ(2,1,Han); //显示16*16点阵汉字'汉'
        Delay1ms(100);
		LCD_WriteHZ(60,3,Zi); //显示16*16点阵汉字'字'
		Delay1s(3);
	}
}

⌨️ 快捷键说明

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