📄 t6963c3.c
字号:
//240x128液晶T6963控制器驱动程序(C51)
#include "absacc.h"
#include "t6963c.h"
#define ComPort 0xFF00
#define DataPort 0xFE00
#define LineChar 16 //宽度为16
#define WITH 2 //数字宽度设为16点
#define HIGH 32 //数字高度设为32点
/*---------------------------------------------------------------------------------------*/
// 指令,数据 读写状态检查
void RWCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x03; } while(sta!=0x03); }
// 向数据口发Data
void OutPortData( unsigned char dat ) { RWCheck(); XBYTE[DataPort]=dat; }
// 写有 1 个参数命令
void OutPortCom1( unsigned char command) { RWCheck(); XBYTE[ComPort]= command; }
// 写有 2 个参数命令
void OutPortCom2(unsigned char dat, unsigned char command)
{ OutPortData(dat); OutPortCom1(command); }
// 写有 3 个参数命令
void OutPortCom3(unsigned char data1, unsigned char data2, unsigned char command)
{ OutPortData(data1); OutPortData(data2); OutPortCom1(command);}
/*-----------------------------------------------------------------------------------*/
void ClearScreen()
{
unsigned int i;
// 清显示 RAM 区 0000h--2000h (8k)
OutPortCom3(0x00,0x00,0x24); //设置指针地址0000H
OutPortCom1(0xb0); //设置自动写状态
for(i=0x00;i<0x2000;i++) OutPortData(0x00); // data=0;
OutPortCom1(0xb2); // 自动写结束
}
/*------------------------------------------------------------------------------*/
//初始化LCD
void InitLCD()
{
OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
OutPortCom3( LineChar,0x00,0x43 ); //设置图形显示区域宽度 : LineChar
OutPortCom1(0xa7); //设置光标形状 cursor size 8x8
OutPortCom1(0x80); //设置显示方式: CGROM方式 文本\图形 "或"
OutPortCom1(0x98); //设置显示开关: 1001 1100 图形
ClearScreen();
}
/*------------------------------------------------------------------------------*/
//在line行、column列显示一个With*Higth数字Number,Number:数字 0~9
void ShowNumber(unsigned char line,unsigned char column,unsigned char number)
{
unsigned char i;
unsigned int StartAddr;
StartAddr=line*LineChar +column; //定位起始行
for(i=0;i<HIGH;i++)
{
OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address
OutPortCom2( NUMBERTAB[ number ][ WITH*i ], 0xc0); // scan the first line
OutPortCom2( NUMBERTAB[ number ][ WITH*i+1 ], 0xc4);
//OutPortCom2( NUMBERTAB[ number ][ WITH*i+2 ], 0xc4);
StartAddr=StartAddr + LineChar; //adress of the next line
}
}
/*-------------------------------------------------------------------------------------------*/
// 显示一幅8*16的图像
void ShowPicture(unsigned char line,unsigned char column,unsigned char *AsciiTAB)
{
unsigned char i;
unsigned int StartAddr;
StartAddr=line*LineChar +column; //定位起始行
for(i=0;i<16;i++)
{
OutPortCom3( (unsigned char)(StartAddr),(unsigned char)(StartAddr>>8), 0x24); //set address
OutPortCom2(AsciiTAB[i] , 0xc0); // scan the first line
StartAddr=StartAddr + LineChar; //adress of the next line
}
}
/*----------------------------------------------------------------------------------------------*/
//显示一个字符串(0~9),pointpos小数点位置,整个数据在显示屏上占据5个字符空间,每个字符大小为24*40
unsigned char* gcvt(float value_float);
void ShowPower(float power_float) //功率值显示函数
{
unsigned char i;
unsigned char* str;
str=gcvt(power_float);
for(i=0;i<6;i++)
{
ShowNumber(0,2*i+1,str[i]);
}
}
/*-----------------------------------------------------------------------------------------------*/
// 波长显示函数
void ShowWaveLength(unsigned char *str)
{
unsigned char i=0;
for(i=0;i<4;i++)
{
ShowNumber(33,2+2*i,str[i]);
}
}
/*-------------------------------------------------------------------------------------------------*/
// 显示单位rel,dbm,w,mw,uw
void Showrel( ) { ShowPicture( 0,13,LETTER[6]);ShowPicture( 0,14,LETTER[3]);ShowPicture( 0, 15,LETTER[4]);}
void ShowrelClear(){ShowPicture( 0,13,LETTER[0]);ShowPicture( 0,14,LETTER[0]);ShowPicture( 0, 15,LETTER[0]);}
void Showdbm( ) { ShowPicture(16,13,LETTER[2]);ShowPicture(16,14,LETTER[1]);ShowPicture(16, 15,LETTER[5]);}
void ShowWatt( ) { ShowPicture(16,13,LETTER[8]);ShowPicture(16,14,LETTER[0]);ShowPicture(16, 15,LETTER[0]);}
void Showmw( ) { ShowPicture(16,13,LETTER[5]);ShowPicture(16,14,LETTER[8]);ShowPicture(16, 15,LETTER[0]);}
void Showuw( ) { ShowPicture(16,13,LETTER[7]);ShowPicture(16,14,LETTER[8]);ShowPicture(16, 15,LETTER[0]);}
/*-----------------------------------------------------------------------------------------------*/
//-- 浮点数转化为字符串函数 --//
unsigned char* gcvt(float value_float)
{
unsigned char i=5,dp;
unsigned int value_int;
unsigned char tstr[6];
//--- 判断符号位 ------
if(value_float<0)
{ value_float=0-value_float;tstr[0]=11;}
else tstr[0]=12;
//--- 确定小数位 ------
if(value_float>10)
{dp=3; value_int=value_float*100;}
else
{dp=2; value_int=value_float*1000;}
//--- 分离为字符串 -----
for(i=5;i>0;i--)
{
if(i==dp) tstr[i]=10;
else { tstr[i]=value_int%10; value_int=value_int/10;}
}
return tstr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -