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

📄 ks0108.c

📁 全国电子设计大赛:智能电动车的设计.实现功能:以AT89C52单片机为核心
💻 C
字号:
//*************************************************************************************************
//  Module Name :  KS0108.C
//  CreateDate  :  2004-11-23
//  ModifData   :  2005-05-03
//  Description :  
//  Author      :  李远正
//  Version     :  V2.0
//*************************************************************************************************

#include <absacc.h>
#include "number.h"
#include "KS0108.H"

//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// 写命令到LCD 
void KS0108WriteCMD( bit Left ,unsigned char command )
{
    unsigned char i;

	if(!Left)	
		{	
		    for( i=0;i<10;i++ ) if( READ_Status_LCD1&0x80 == 0 ) break; // BUSY=1时,LCD正在工作,等待...
			SET_LEFT	= command;
		}
	else
		{	for( i=0;i<10;i++ ) if( READ_Status_LCD1&0x80 == 0 ) break; // BUSY=1时,LCD正在工作,等待...
			SET_RIGHT	= command;	
		}
}

//-----------------------------------------------
// 写数据到LCD 
void KS0108WriteDAT( bit Left ,unsigned char datum )
{
    unsigned char i; 

	if( !Left )	
		{	
			for( i=0;i<10;i++ ) if( READ_Status_LCD1&0x80 == 0 ) break; // BUSY=1时,LCD正在工作,等待...
			WRITE_DATA_LCD1	= datum;
		}
	else
		{	
			for( i=0;i<10;i++ ) if( READ_Status_LCD1&0x80 == 0 ) break; // BUSY=1时,LCD正在工作,等待...
			WRITE_DATA_LCD2	= datum;	
		}
}

//-------------------------------------------------------------------------------------------------
// 将所有RAM单元清零 
void LCDClear( void )
{
	unsigned char page,tier;

	for( page=0; page<8; page++ )
	{	
		KS0108WriteCMD( 0,page|CMD_KS0108_PageAdd ); KS0108WriteCMD( 1,page|CMD_KS0108_PageAdd );// 设置页地址,每页8行64列
		KS0108WriteCMD( 0,CMD_KS0108_TierAdd );      KS0108WriteCMD( 1,CMD_KS0108_TierAdd );	 // 设置起始列,每执行一次读写操作,列地址自动加1
		for( tier=0; tier<64; tier++ )        // 将所有列清零 (1列有8位数据)
		{
		    KS0108WriteDAT( 0,0 );  KS0108WriteDAT( 1,0 );
		}					        
	}
}

//=================================================================================================
// 在指定的地址显示16×16点阵汉字
void DisplayChinese( unsigned char page, unsigned char tier, unsigned char code *chinese )
{
	unsigned char page_temp,tier_temp,x_temp;

	KS0108WriteCMD( 0,CMD_KS0108_FirstLine );  KS0108WriteCMD( 1,CMD_KS0108_FirstLine );// 设置起始行为第一行

	page_temp = 0;
	while( page_temp<2 )
	{
		x_temp    = page_temp<<4; 
		tier_temp = 0;
		if( tier<64 )          // 选择左半屏
		{
			KS0108WriteCMD( 0,(page+page_temp)&0x07|CMD_KS0108_PageAdd );   // 设置行起始地址
			KS0108WriteCMD( 0,tier                 |CMD_KS0108_TierAdd );	// 设置列起始地址
			while( tier_temp<16 ) KS0108WriteDAT( 0,chinese[x_temp|tier_temp++] );  
		}
		else                   // 选择右半屏
		{
			KS0108WriteCMD( 1,(page+page_temp)&0x07|CMD_KS0108_PageAdd );   // 设置行起始地址
			KS0108WriteCMD( 1,(tier-64)            |CMD_KS0108_TierAdd );	// 设置列起始地址
			while( tier_temp<16 ) KS0108WriteDAT( 1,chinese[x_temp|tier_temp++] );
		}
		page_temp++;
	}
}

//---------------------------------------------------------------------------------------
// 在指定的地址显示16×16点阵渐出图形
void DisplayPic( unsigned char page, unsigned char tier, unsigned char code *chinese, unsigned char tier_num )
{
	unsigned char page_temp,tier_temp,x_temp;

	KS0108WriteCMD( 0,CMD_KS0108_FirstLine );  KS0108WriteCMD( 1,CMD_KS0108_FirstLine );// 设置起始行为第一行

	for( page_temp=0; page_temp<2; page_temp++ )
	{
		x_temp    = page_temp<<4; 
		tier_temp = 0;
		if( tier<64 )          // 选择左半屏
		{
			KS0108WriteCMD( 0,(page+page_temp)&0x07|CMD_KS0108_PageAdd );// 设置行起始地址
			KS0108WriteCMD( 0,tier                 |CMD_KS0108_TierAdd );// 设置列起始地址
			while( tier_temp<16 )	
			{
				if( tier_temp<tier_num ) KS0108WriteDAT( 0,chinese[x_temp|tier_temp] );
				else                     KS0108WriteDAT( 0,0 );
				tier_temp++;
			}
		}
		else                 // 选择右半屏
		{
			KS0108WriteCMD( 1,(page+page_temp)&0x07|CMD_KS0108_PageAdd );// 设置行起始地址
			KS0108WriteCMD( 1,(tier-64)            |CMD_KS0108_TierAdd );// 设置列起始地址
			while( tier_temp<16 )
			{
				if( tier_temp<tier_num ) KS0108WriteDAT( 1,chinese[x_temp|tier_temp] );
				else                     KS0108WriteDAT( 1,0 );
				tier_temp++;
			}
		}
	}
}

//---------------------------------------------------------------------------------------
// 在指定的地址反显16×16点阵汉字
void DisplayRevChinese( unsigned char page,unsigned char tier,unsigned char code *chinese )
{
	unsigned char page_temp,tier_temp,x_temp;

	KS0108WriteCMD( 0,CMD_KS0108_FirstLine );  KS0108WriteCMD( 1,CMD_KS0108_FirstLine );// 设置起始行为第一行

	for( page_temp=0; page_temp<2; page_temp++ )
	{
	    x_temp    = page_temp<<4; 
	    tier_temp = 0;
	    if( tier<64 )       // 选择左半屏
	    {
			KS0108WriteCMD( 0,(page+page_temp)&0x07|CMD_KS0108_PageAdd );// 设置行起始地址
			KS0108WriteCMD( 0,tier                 |CMD_KS0108_TierAdd );// 设置列起始地址
			while( tier_temp<16 ) KS0108WriteDAT( 0,~chinese[x_temp|tier_temp++] ); // 取反
		}
	    else                // 选择右半屏
		{
			KS0108WriteCMD( 1,(page+page_temp)&0x07|CMD_KS0108_PageAdd );// 设置行起始地址
			KS0108WriteCMD( 1,(tier-64)            |CMD_KS0108_TierAdd );// 设置列起始地址
			while( tier_temp<16 ) KS0108WriteDAT( 1,~chinese[x_temp|tier_temp++] ); // 取反
		}
	}
}
/*
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
// 在指定的地址显示16×32点阵数字
void DisplayBigNumber( unsigned char page, unsigned char tier, unsigned char number )
{
	unsigned char page_temp,tier_temp,x_temp;

	KS0108WriteCMD( 0,CMD_KS0108_FirstLine );  KS0108WriteCMD( 1,CMD_KS0108_FirstLine );// 设置起始行为第一行

	for( page_temp=page; page_temp<(4+page); page_temp++ )
	{
	  x_temp    = (page_temp-page)<<4;	  // x_temp=0x00,0x10,0x20,0x30
	  tier_temp = 0;
	  if( tier<64 )       // 选择左半屏
		{
			KS0108WriteCMD( 0,page_temp|CMD_KS0108_PageAdd );		// 设置行起始地址
			KS0108WriteCMD( 0,tier     |CMD_KS0108_TierAdd );		// 设置列起始地址	
			while( tier_temp<16 ) KS0108WriteDAT( 0,big_num[number][x_temp|tier_temp++] );
		}
	  else                // 选择右半屏
		{
			KS0108WriteCMD( 1,page_temp|CMD_KS0108_PageAdd );		// 设置行起始地址
			KS0108WriteCMD( 1,(tier-64)|CMD_KS0108_TierAdd );		// 设置列起始地址
			while( tier_temp<16 ) KS0108WriteDAT( 1,big_num[number][x_temp|tier_temp++] );
		}
	}
}
*/
//---------------------------------------------------------------------------------------
// 显示8×16数字
void DisplayNumber( unsigned char page, unsigned char tier, unsigned char number )
{
	unsigned char page_temp,tier_temp,x_temp;

	KS0108WriteCMD( 0,CMD_KS0108_FirstLine );  KS0108WriteCMD( 1,CMD_KS0108_FirstLine );// 设置起始行为第一行

	for( page_temp=page; page_temp<(2+page); page_temp++ )
	{
	  x_temp    = (page_temp-page)<<3;   
	  tier_temp = 0;
	  if( tier<64 )	    // 选择左半屏
		{
			KS0108WriteCMD( 0,page_temp|CMD_KS0108_PageAdd );		// 设置行起始地址
			KS0108WriteCMD( 0,tier     |CMD_KS0108_TierAdd );		// 设置列起始地址
			while( tier_temp<8 ) KS0108WriteDAT( 0,lit_num[number][x_temp|tier_temp++] );
		}
	  else		        // 选择右半屏
		{
			KS0108WriteCMD( 1,page_temp|CMD_KS0108_PageAdd );		// 设置行起始地址
			KS0108WriteCMD( 1,(tier-64)|CMD_KS0108_TierAdd );		// 设置列起始地址
			while( tier_temp<8 ) KS0108WriteDAT( 1,lit_num[number][x_temp|tier_temp++] );
		}
	}
}

//---------------------------------------------------------------------------------------
// 显示8×16反显数字
void DisplayRevNumber( unsigned char page, unsigned char tier, unsigned char number )
{
	unsigned char page_temp,tier_temp,x_temp;

	KS0108WriteCMD( 0,CMD_KS0108_FirstLine );  KS0108WriteCMD( 1,CMD_KS0108_FirstLine );// 设置起始行为第一行

	for( page_temp=page; page_temp<(page+2); page_temp++ )
	{
	  x_temp    = (page_temp-page)<<3;
	  tier_temp = 0;
	  if( tier<64 )       // 选择左半屏
		{
			KS0108WriteCMD( 0,page_temp|CMD_KS0108_PageAdd );       // 设置行起始地址
			KS0108WriteCMD( 0,tier     |CMD_KS0108_TierAdd );		// 设置列起始地址
			while( tier_temp<8 ) KS0108WriteDAT( 0,~lit_num[number][x_temp|tier_temp++] );// 取反
		}
	  else                // 选择右半屏
		{
			KS0108WriteCMD( 1,page_temp|CMD_KS0108_PageAdd );		// 设置行起始地址
			KS0108WriteCMD( 1,(tier-64)|CMD_KS0108_TierAdd );		// 设置列起始地址
			while( tier_temp<8 ) KS0108WriteDAT( 1,~lit_num[number][x_temp|tier_temp++] );// 取反
		}
	}
}
//=================================================================================================
// 初始化LCD屏 
void LCDInit( void )
{
	KS0108WriteCMD( 0,CMD_KS0108_FirstLine ); KS0108WriteCMD( 1,CMD_KS0108_FirstLine ); // 设置起始行为第一行
	KS0108WriteCMD( 0,CMD_KS0108_DispOn );    KS0108WriteCMD( 1,CMD_KS0108_DispOn );	// 开显示

	LCDClear( );   // 将所有RAM单元清零 
}

⌨️ 快捷键说明

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