📄 st7920driver.c
字号:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0
//返回参数:无
//使用说明:地址范围为40H~3FH
//*******************************************
void Serial_CGRAM_Address_Set(uchar ucCGramAdd)
{
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Serial_Write_LCD(COMMAND,ucCGramAdd); //设定CGRAM地址到地址计数器AC
}
//*******************************************
//函数名称:void Serial_DDRAM_Address_Set(uchar ucDDramAdd)
//函数功能:设定DDRAM(文本区)地址到地址计数器AC
//形式参数:uchar ucDDramAdd
//行参说明:具体地址
//格式说明:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0
//返回参数:无
//使用说明:
// 第一行地址:80H~8FH
// 第二行地址:90H~9FH
// 第三行地址:A0H~AFH
// 第四行地址:B0H~BFH
//*******************************************
void Serial_DDRAM_Address_Set(uchar ucDDramAdd)
{
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Serial_Write_LCD(COMMAND,ucDDramAdd); //设定DDRAM地址到地址计数器AC
}
//*******************************************
//函数名称:void Serial_Standby_Mode(void)
//函数功能:进入待命模式
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:执行任何指令都会终止待命模式
//格式说明:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 0 0 0 0 0 0 0 1
//*******************************************
void Serial_Standby_Mode(void)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
Serial_Write_LCD(COMMAND,AWAIT_MODE); //进入待命模式
}
//*******************************************
//函数名称:void Serial_VerticalRoll_IRAM_Address_Select_Set(bit bSelect)
//函数功能:卷动地址或IRAM地址选择
//形式参数:bit bSelect
//行参说明:卷动地址或IRAM地址选择标志位
//返回参数:无
//格式说明:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 0 0 0 0 0 0 1 SR
// SR:0,允许输入IRAM地址
// SR:1,允许输入垂直卷动地址
//使用说明:无
//*******************************************
void Serial_VerticalRoll_IRAM_Address_Select_Set(bit bSelect)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
if(bSelect)
{
Serial_Write_LCD(COMMAND,ROLLADDRESS_ON); //允许输入垂直卷动地址
}
else
{
Serial_Write_LCD(COMMAND,IRAMADDRESS_ON); //允许输入IRAM地址
}
}
//*******************************************
//函数名称:void Serial_AgainstWhite_Set(uchar ucAgWhSet)
//函数功能:反白选择设置
//形式参数:uchar ucAgWhSet
//行参说明:具体指令
//格式说明:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 0 0 0 0 0 1 R1 R0
// R1,R0:00,第一行反白显示或正常显示
// R1,R0:01,第二行反白显示或正常显示
// R1,R0:10,第三行反白显示或正常显示
// R1,R0:11,第四行反白显示或正常显示
// 当第一次设置时为反白显示,再一次设置时为正常显示
//返回参数:无
//使用说明:无
//*******************************************
void Serial_AgainstWhite_Set(uchar ucAgWhSet)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
Serial_Write_LCD(COMMAND,ucAgWhSet); //反白选择设置
}
//*******************************************
//函数名称:void Serial_Sleep_Mode(bit bSelect)
//函数功能:进入或离开睡眠模式
//形式参数:bit bSelelect
//行参说明:进入或离开睡眠模式的标志位,1进入,0离开
//格式说明:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 0 0 0 0 1 SL X X
// SL:0,进入睡眠模式
// SL:1,离开睡眠模式
//返回参数:无
//使用说明:无
//*******************************************
void Serial_Sleep_Mode(bit bSelect)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
if(bSelect)
{
Serial_Write_LCD(COMMAND,SLEEP_MODE); //进入睡眠模式
}
else
{
Serial_Write_LCD(COMMAND,NO_SLEEP_MODE); //离开睡眠模式
}
}
//*******************************************
//函数名称:void Serial_Graph_Mode_Set(bit bSelect)
//函数功能:打开或关闭绘图显示
//形式参数:bit bSelect
//行参说明:打开或关闭绘图显示的标志位,1打开,0关闭
//格式说明:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 0 0 1 DL X RE G X
// DL:0,4bitMPU控制界面
// DL:1,8bitMPU控制界面
// RE:0,基本指令集
// RE:1,扩充指令集
// G :0,绘图显示OFF
// G :1,绘图显示ON
//返回参数:无
//使用说明:无
//*******************************************
void Serial_Graph_Mode_Set(bit bSelect)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
if(bSelect)
{
Serial_Write_LCD(COMMAND,GRAPH_ON); //打开绘图模式
}
else
{
Serial_Write_LCD(COMMAND,GRAPH_OFF); //关闭绘图模式
}
}
//*******************************************
//函数名称:void Serial_VerticalRoll_IRAM_AddressValue_Set(uchar ucAddVal)
//函数功能:设定IRAM地址或卷动地址
//形式参数:uchar ucAddVal
//行参说明:具体的地址值
//格式说明:
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0
// SR=1:AC5~AC0为垂直卷动位址
// SR=0:AC3~AC0为IRAM位址
//返回参数:无
//使用说明:必须在扩展指令集的情况下使用
//*******************************************
void Serial_VerticalRoll_IRAM_AddressValue_Set(uchar ucAddVal)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
Serial_Write_LCD(COMMAND,ucAddVal);
}
//*******************************************
//函数名称:void Serial_GDRAM_Address_Set(uchar ucGDramAdd)
//函数功能:设定GDRAM(图形区)地址到地址计数器AC
//形式参数:uchar ucGDramAdd
//行参说明:具体地址值
// RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
// 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0
// 先设定垂直位置再设定水平位置(连续写入两个字节完成垂直和水平位置的设置)
// 垂直地址范围:AC6~AC0
// 水平地址范围:AC3~AC0
//返回参数:无
//使用说明:必须在扩展指令集的情况下使用
//*******************************************
void Serial_GDRAM_Address_Set(uchar ucGDramAdd)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
Serial_Write_LCD(COMMAND,ucGDramAdd);
}
//******************************************************************************
//*****************以上为串行工作模式下的基本函数*******************************
//******************************************************************************
//*********以下为串行工作模式下的功能函数,由基本函数组成************************
//******************************************************************************
//*******************************************
//函数名称:void Serial_Init_LCD(void)
//函数功能:串行初始化LCD
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:无
//*******************************************
void Serial_Init_LCD(void) //串行初始化LCD
{
RST = 1; //复位后拉高,停止复位
PSB = 0; //选择串行传输模式
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令动作
Serial_Write_LCD(COMMAND,CLEAR_SCREEN); //清屏,地址指针指向00H
Serial_Write_LCD(COMMAND,0x06); //光标的移动方向
Serial_Write_LCD(COMMAND,0x0c); //开显示,关游标
}
//*******************************************
//函数名称:void Serial_DisplayOneChineseCharacter_WithAddress(uchar ucAdd,uchar code *p)
//函数功能:在(文本区)ucAdd指定的位置显示一个汉字(16*16点阵)
//形式参数:uchar ucAdd,uchar code *p
//行参说明:指定的位置,要显示的汉字
//地址必须是:80H~8FH,90H~9FH,A0H~AFH,B0H~BFH.
//返回参数:无
//使用说明:使用之前要初始化液晶
//*******************************************
void Serial_DisplayOneChineseCharacter_WithAddress(uchar ucAdd,uchar code *p)
{
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令动作
Serial_DDRAM_Address_Set(ucAdd);
Serial_Write_LCD(DATA, *p );
Serial_Write_LCD(DATA,*(p+1));
}
//*******************************************
//函数名称:void Serial_DisplayOneASCIICharacter_WithAddress(uchar ucAdd,uchar ucchar)
//函数功能:在(文本区)ucAdd指定的位置显示一个ASCII字符(16*8点阵)
//形式参数:uchar ucAdd,uchar ucchar
//地址必须是:80H~8FH,90H~9FH,A0H~AFH,B0H~BFH.
//行参说明:指定的位置,要显示的字符
//返回参数:无
//使用说明:使用之前要初始化液晶
//*******************************************
void Serial_DisplayOneASCIICharacter_WithAddress(uchar ucAdd,uchar ucchar)
{
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令动作
Serial_DDRAM_Address_Set(ucAdd);
Serial_Write_LCD(DATA,ucchar);
}
//*******************************************
//函数名称:void Serial_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p)
//函数功能:在(文本区)ucAdd指定的位置显示一串字符(或是汉字或是ASCII或是两者混合)
//形式参数:uchar ucAdd,uchar code *p
//行参说明:指定的位置,要显示的字符串
//地址必须是:80H~8FH,90H~9FH,A0H~AFH,B0H~BFH.
//返回参数:无
//使用说明:使用之前要初始化液晶
//*******************************************
void Serial_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p)
{
uchar i;
i = strlen(p);
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令动作
Serial_DDRAM_Address_Set(ucAdd);
for( ; i ; i -- )
Serial_Write_LCD(DATA, *(p++));
}
//*******************************************
//函数名称:void Serial_UpRollOneLine(uchar ucN)
//函数功能:DDRAM(文本区)内容垂直上卷ucN行
//形式参数:uchar ucN
//行参说明:上卷的行数:0~3
//返回参数:无
//使用说明:无
//*******************************************
void Serial_UpRollOneLine(uchar ucN)
{
Serial_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
Serial_Write_LCD(COMMAND,ROLLADDRESS_ON); //允许输入卷动位址
Serial_Write_LCD(COMMAND,0x40+ucN*0x10); //上卷ucN行
}
//*******************************************
//函数名称:void Serial_ImgDisplay(unsigned char code *img)
//函数功能:全屏显示128*64个象素的图形
//形式参数:unsigned char code *img
//行参说明:要显示的图形
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -