📄 ks0108.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 + -