st7920.c
来自「STN ST7920 TEST CODE AND SPEC.」· C语言 代码 · 共 250 行
C
250 行
/*
File:ST7920.c
Autor:rgh111
E-mail:rgh111@163.com Provide 8x2 & 7.5x2 Chinese character LCD
module,operate either into serial mode or parallel mode.
Date:2003.12.23
Vesion:1.0
Function:
Write data or command into the ST7920 in serial mode.
ST7920 serial clock max frequency 2.5Mhz.
*/
#include <reg52.h>
#include <delay.c>
//#include <intrans.h>
sbit ST7920_Cs=P1^0;
sbit ST7920_Clk=P1^1;
sbit ST7920_Sda=P1^2;
sbit ST7920_Rst=P1^3;
//Command Deifne.
//#define C_Clear 0x01
//#define C_ResetAddress 0x02
//#define C_ResetAddress 0x03
//#define C_Location 0x0?
//#define C_DisplayOnOff 0x0?
//#define C_PromptMove 0x0?
//#define C_FunctionSet 0x0?
//#define C_SetCgramAddress 0x0?
//#define C_SetDdramAddress 0x?
//#define C_ReadStatus 0x?
//#define C_WriteDataToRam 0x?
//#define C_ReadDataFromRam 0x?
//#define C_Idle 0x01
//#define C_ReceiveRollAddress 0x0?
//#define C_NagetiveDisplay 0x0?
//#define C_SleepWakeUp 0x0?
//#define C_ExpandFunctionSet 0x0?
//#define C_SetIramAddress 0x0?
//#define C_SetGramAddress 0x0?
void ResetSt7920(void);
void WriteSt7920Instruction(unsigned char x);
void WriteSt7920Data(unsigned char x);
void ExpandFunctionEnable(void);
void ExpandFunctionDisable(void);
void ClearScreen(void);
void CursorGoHome(void);
void DisplayOn(void);
void DisplayOff(void);
void IdleMode(void);
void RollInstructionEnable(void);
void RollInstructionDisable(void);
void SetRollAddress(unsigned char WhichLine);
void SetRollAddress(unsigned char WhichLine);
void Sleep(void);
void WakeUp(void);
void mian(void)
{
ResetSt7920();
}
void ResetSt7920(void)
{
ST7920_Rst=0;
delay(10);
ST7920_Rst=1;
delay(100);
}
void WriteSt7920Instruction(unsigned char x)
{
unsigned char i=0;
ST7920_Cs=1;
ST7920_Sda=1;
for(i=0;i<5;i++)
{
ST7920_Clk=0;
ST7920_Clk=1;
}
ST7920_Clk=0;
ST7920_Sda=0;
for(i=0;i<3;i++)
{
ST7920_Clk=1;
ST7920_Clk=0;
}
for(i=0;i<4;i++)
{
x<<=1;
ST7920_Sda=CY;
ST7920_Clk=1;
ST7920_Clk=0;
}
ST7920_Sda=0;
for(i=0;i<4;i++)
{
ST7920_Clk=1;
ST7920_Clk=0;
}
for(i=0;i<4;i++)
{
x<<=1;
ST7920_Sda=CY;
ST7920_Clk=1;
ST7920_Clk=0;
}
ST7920_Sda=0;
for(i=0;i<4;i++)
{
ST7920_Clk=1;
ST7920_Clk=0;
}
ST7920_Cs=0;
delay(1);
}
void WriteSt7920Data(unsigned char x)
{
unsigned char i=0;
ST7920_Cs=1;
ST7920_Sda=1;
for(i=0;i<5;i++)
{
ST7920_Clk=0;
ST7920_Clk=1;
}
ST7920_Clk=0;
ST7920_Sda=0;
ST7920_Clk=1;
ST7920_Clk=0;
ST7920_Sda=1;
ST7920_Clk=1;
ST7920_Clk=0;
ST7920_Sda=0;
ST7920_Clk=1;
ST7920_Clk=0;
for(i=0;i<4;i++)
{
x<<=1;
ST7920_Sda=CY;
ST7920_Clk=1;
ST7920_Clk=0;
}
ST7920_Sda=0;
for(i=0;i<4;i++)
{
ST7920_Clk=0;
ST7920_Clk=1;
}
ST7920_Clk=0;
for(i=0;i<4;i++)
{
x<<=1;
ST7920_Sda=CY;
ST7920_Clk=1;
ST7920_Clk=0;
}
ST7920_Sda=0;
for(i=0;i<4;i++)
{
ST7920_Clk=1;
ST7920_Clk=0;
}
ST7920_Cs=0;
delay(1);
}
void ExpandFunctionEnable(void)
{
WriteSt7920Instruction(0x24);
}
void ExpandFunctionDisable(void)
{
WriteSt7920Instruction(0x20);
}
void ClearScreen(void)
{
WriteSt7920Instruction(0x01);
delay(10);
}
void CursorGoHome(void)
{
WriteSt7920Instruction(0x02);
//WriteSt7920Instruction(0x03);
}
void DisplayOn(void)
{
WriteSt7920Instruction(0x0d);
}
void DisplayOff(void)
{
WriteSt7920Instruction(0x09);
}
void IdleMode(void)
{
WriteSt7920Instruction(0x01);
}
void RollInstructionEnable(void)
{
WriteSt7920Instruction(0x03);
}
void RollInstructionDisable(void)
{
WriteSt7920Instruction(0x02);
}
void SetRollAddress(unsigned char WhichLine)
{
ExpandFunctionEnable();
RollInstructionEnable();
WriteSt7920Instruction(WhichLine|0x40);
ExpandFunctionDisable();
}
/*
void NegativeDisplay(unsigned char WhichLine)
Function:
Expand instruction.
WhichLine=1,2,3,4.
*/
void NegativeDisplay(unsigned char WhichLine)
{
if(WhichLine>4) return;
if(WhichLine==0) return;
WriteSt7920Instruction((WhichLine-1)|0x04);
}
void Sleep(void)
{
WriteSt7920Instruction(0x08);
}
void WakeUp(void)
{
WriteSt7920Instruction(0x0c);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?