📄 st7920driver.c
字号:
//液晶屏坐标说明:
// _______________________________________________
// |(0,0) (7,0)|
// | |
// | |
// |(0,31) (7,31)|
// |(8,0) (15,0)|
// | |
// | |
// |(8,31)________________________________(15,31)|
//
//返回参数:无
//使用说明:此函数适用于OCMJ4X8C 12864型液晶
//*******************************************
void Serial_ImgDisplay(unsigned char code *img)
{
uchar i,j;
Serial_Write_LCD(COMMAND,GRAPH_OFF); //先关闭图形显示功能
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
Serial_Write_LCD(COMMAND,0x80+j); //设定垂直坐标
Serial_Write_LCD(COMMAND,0x80+i); //设定水平坐标
Serial_Write_LCD(DATA,img[j*16+i*2]); //放入数据高字节
Serial_Write_LCD(DATA,img[j*16+i*2+1]); //放入数据低字节
}
}
for(j=32;j<64;j++)
{
for(i=0;i<8;i++)
{
Serial_Write_LCD(COMMAND,0x80+j-32);
Serial_Write_LCD(COMMAND,0x88+i);
Serial_Write_LCD(DATA,img[j*16+i*2]);
Serial_Write_LCD(DATA,img[j*16+i*2+1]);
}
}
Serial_Write_LCD(COMMAND,GRAPH_ON); //最后打开图形显示功能
}
//*******************************************
//函数名称:void Serial_ImgDisplayCharacter(uchar x,uchar y,uchar code *img)
//函数功能:使用绘图的方法,在(x,y)处画一个16*16点阵的图案,也可以是字符
//形式参数:uchar x,uchar y,uchar code *img
// x取值范围:0~15
// y取值范围:0~32 (针对OCMJ4X8C 12864型液晶)
//行参说明:坐标水平位置,坐标垂直位置,要显示的图形
//液晶屏坐标说明:
// _______________128个象素______________________
// |(0,0) (7,0)|
// | |
// 6 | |
// 4 |(0,31) (7,31)|
// 个 |(8,0) (15,0)|
// 象 | |
// 素 | |
// |(8,31)________________________________(15,31)|
//
//返回参数:无
//使用说明:此函数适用于OCMJ4X8C 12864型液晶
//*******************************************
void Serial_ImgDisplayCharacter(uchar x,uchar y,uchar code *img)
{
uchar i;
Serial_Write_LCD(COMMAND,GRAPH_OFF); //先关闭图形显示功能
for(i=0;i<16;i++)
{
Serial_Write_LCD(COMMAND,0x80+y+i);
Serial_Write_LCD(COMMAND,0x80+x);
Serial_Write_LCD(DATA,img[i*2]);
Serial_Write_LCD(DATA,img[i*2+1]);
}
Serial_Write_LCD(COMMAND,GRAPH_ON); //最后打开图形显示功能
}
//*******************************************
//函数名称:void Serial_CreateSelfDefiniteCharacterInCGRAM(uchar ucCGRAMAdd,uchar code *p)
//函数功能:在CGRAM中,在ucCGRAMAdd指定的地址创建16*16点阵的自定义字符,一共可以建立4个
//形式参数:uchar ucCGRAMAdd,uchar code *p
//行参说明:CGRAM中的地址,自定义的字符
// ucCGRAMAdd可以且只可以取的值: 0x40 , 0x50 , 0x60 , 0x70
// ucCode 对应的显示编码为:[0000H],[0002H],[0004H],[0006H]
//返回参数:无
//使用说明:无
//*******************************************
void Serial_CreateSelfDefiniteCharacterInCGRAM(uchar ucCGRAMAdd,uchar code *img)
{
uchar i;
for( i=0 ; i<16; i++)
{
Serial_Write_LCD(COMMAND,BASIC_FUNCTION);
Serial_Write_LCD(COMMAND,ucCGRAMAdd+i);
Serial_Write_LCD(DATA,img[i*2]);
Serial_Write_LCD(DATA,img[i*2+1]);
}
}
//*******************************************
//函数名称:void Serial_UseSelfDefiniteCharacterInCGRAM(uchar ucAdd,uchar ucCode)
//函数功能:使用自定义的字符
//形式参数:uchar ucAdd,uchar ucCode
//行参说明:字符要显示的位置,自定义的字符对应的编码
// ucCGRAMAdd可以且只可以取的值: 0x40 , 0x50 , 0x60 , 0x70
// ucCode 对应的显示编码为:[0000H],[0002H],[0004H],[0006H]
//返回参数:无
//使用说明:无
//*******************************************
void Serial_UseSelfDefiniteCharacterInCGRAM(uchar ucAdd,uchar ucCode)
{
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Serial_Write_LCD(COMMAND,ucAdd); //设定DDRAM位址
Serial_Write_LCD(DATA,0x00);
Serial_Write_LCD(DATA,ucCode);
}
//*******************************************
//函数名称:void Serial_IRAMDisplay(uchar ucAdd,uchar code * p)
//函数功能:设定IRAM的地址,并在改地址填数据
//形式参数:uchar ucAdd,uchar code * p
//行参说明:IRAM地址,数据
// ucAdd取值范围:0x40~0x4f
//返回参数:无
//使用说明:调用函数参考串行基本函数集
//*******************************************
void Serial_IRAMDisplay(uchar ucAdd,uchar code * p)
{
Serial_VerticalRoll_IRAM_Address_Select_Set(0);
Serial_VerticalRoll_IRAM_AddressValue_Set(ucAdd);
Serial_Write_LCD(DATA,*(p++));
Serial_Write_LCD(DATA, *p );
}
//******************************************************************************
//*****************以上为串行工作模式下的功能函数*******************************
//******************************************************************************
//*****************以下为并行工作模式下的基本函数*******************************
//******************************************************************************
//*******************************************
//函数名称:void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content )
//函数功能:并行模式向LCD发送数据或指令
//形式参数:bit b_Data_Command , unsigned char uc_Content
//行参说明:数据或指令的标志位,指令或数据的内容
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content )
{
Parallel_Check_Busy();
if(b_Data_Command)
{
RS = 1; //数据
RW = 0; //写模式
}
else
{
RS = 0; //指令
RW = 0; //写模式
}
P1=uc_Content;//数据放到P1口上
E = 1;
E = 0;
}
//*******************************************
//函数名称:uc_Parallel_Read_LCD_Data
//函数功能:并行读LCD数据
//形式参数:无
//行参说明:无
//返回参数:读回的数据
//使用说明:无
//*******************************************
uchar uc_Parallel_Read_LCD_Data(void)
{
uchar uc_Content;
Parallel_Check_Busy();
P1 = 0xff; //输入前置1
RS = 1; //数据
RW = 1; //读模式
E = 1; //使能
uc_Content = P1; //P1口的内容放到变量中
E = 0;
return uc_Content;
}
//*******************************************
//函数名称:uchar uc_Parallel_Read_LCD_AC(void)
//函数功能:并行读LCD AC(地址寄存器)中的地址
//形式参数:无
//行参说明:无
//返回参数:读回的AC值
//使用说明:无
//*******************************************
uchar uc_Parallel_Read_LCD_AC(void)
{
uchar uc_Content;
Parallel_Check_Busy();
P1 = 0xff; //输入前置1
RS = 0; //指令
RW = 1; //读模式
E = 1; //使能
uc_Content = P1; //P1口的内容放到变量中
E = 0;
return uc_Content;
}
//*******************************************
//函数名称:void Parallel_Check_Busy(void)
//函数功能:并行方式查忙
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Check_Busy(void)
{
bit temp;
P1 = 0xff; //输入前置1
RS = 0; //指令
RW = 1; //读模式
do
{
temp = BUSY;
E = 1; //使能
E = 0;
}
while(temp);//等待不忙
}
//******************************************************************************
//*****************以上为并行工作模式下的基本函数*******************************
//******************************************************************************
//*****************以下为并行工作模式下的功能函数*******************************
//******************************************************************************
//*******************************************
//函数名称:void Parallel_Init_LCD(void)
//函数功能:并行初始化LCD
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Init_LCD(void)
{
RST = 1; //复位后拉高,停止复位
PSB = 1; //选择并行传输模式
Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令动作
Parallel_Write_LCD(COMMAND,CLEAR_SCREEN); //清屏,地址指针指向00H
Parallel_Write_LCD(COMMAND,0x06); //光标的移动方向
Parallel_Write_LCD(COMMAND,0x0c); //开显示,关游标
}
//*******************************************
//函数名称:void Parallel_Clear_Ram(void)
//函数功能:并行清屏函数
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Clear_Ram(void)
{
Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Parallel_Write_LCD(COMMAND,CLEAR_SCREEN); //清屏
}
//******************************************************************************
//*****************以上为并行工作模式下的功能函数*******************************
//******************************************************************************
//*****************以下为 测 试 函数*******************************
//******************************************************************************
void main(void)
{
uint i=60000;
Serial_Init_LCD();
while(1)
{
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -