gy1206f6.c
来自「STN ST7920 TEST CODE AND SPEC.」· C语言 代码 · 共 195 行
C
195 行
// ST7920 128*64 2003.3.25
#include <reg52.h>
#include <delay.c>
#define Uchar unsigned char
sbit RS=P3^6;
sbit RW=P3^0;
sbit E =P3^5;
sbit RES=P3^7;
void ComWrite(Uchar com);
void DatWrite(Uchar dat);
void Initial(void);
void Disp(Uchar,Uchar);
void DispChar(Uchar,Uchar);
void DispBmp(Uchar *);
void DispRow(Uchar,Uchar);
Uchar c1=0xb0;
Uchar c2=0xa0;
extern char code w[];
void main(void)
{
Initial();
while(1)
{
ComWrite(0x01); //DDRAM clear
delay(200);
DispRow(0x0ff,0);//display com line
delay(200);
DispRow(0x00,0x0ff);//display com line
delay(200);
Disp(0xaa,0xaa);//display seg line
delay(200);
Disp(0x55,0x55);//display seg line
delay(200);
DispRow(0xaa,0x55);//display snower
delay(200);
DispRow(0x55,0xaa);//display snower
delay(200);
Disp(0x00,0x00);//no display
delay(200);
DispChar(0xb0,0xc0);//display Chinese
delay(200);
DispChar(0xc0,0xbc);//display Chinese
delay(200);
DispChar(0xb7,0xe6);//display Chinese
delay(200);
DispChar(0xc3,0xf7);//display Chinese
}
}
void DispBmp(Uchar *p)
{
Uchar HorAdd=0x80;
Uchar VerAdd=0x80;
ComWrite(0x04); // I/D =0
for(;VerAdd<0x80+32;VerAdd++)
{
ComWrite(0x34); // RE=1;
ComWrite(0x36); // Graphics=1;
ComWrite(VerAdd);
ComWrite(0x80);
ComWrite(0x32); // RE=0;
for(HorAdd = 0; HorAdd <0x0f; HorAdd++)
{DatWrite(*p++);DatWrite(*p++);}//{DatWrite(Updat);DatWrite(Dndat);}
}
delay(10000);
ComWrite(0x30); // RE=0;
}
void Disp(Uchar dot1,Uchar dot2)
{
Uchar HorAdd=0x80;
Uchar VerAdd=0x80;
for(;VerAdd<0x80+32;VerAdd++)
{
ComWrite(0x34); // RE=1;
ComWrite(0x36); // Graphics=1;
ComWrite(VerAdd);
ComWrite(0x80);
ComWrite(0x32); // RE=0;
for(HorAdd = 0; HorAdd <0x0f; HorAdd++)
{
DatWrite(dot1);DatWrite(dot1);
DatWrite(dot2);DatWrite(dot2);
}
}
delay(10000);
ComWrite(0x30); // RE=0;
}
void DispRow(Uchar dot1,Uchar dot2)
{
Uchar HorAdd=0x80;
Uchar VerAdd=0x80;
Uchar Temp=0;
bit flag=1;
for(;VerAdd<0x80+32;VerAdd++)
{
ComWrite(0x34); // RE=1;
ComWrite(0x36); // Graphics=1;
ComWrite(VerAdd);
ComWrite(0x80);
ComWrite(0x30); // RE=0;
if (flag==1)
{
Temp = dot1;
flag=0;
}
else
{
Temp = dot2;
flag=1;
}
for(HorAdd = 0; HorAdd <0x0f; HorAdd++)
{
DatWrite(Temp);DatWrite(Temp);
DatWrite(Temp);DatWrite(Temp);
}
}
delay(10000);
ComWrite(0x30); // RE=0;
}
void DispChar(Uchar Updat,Uchar Dndat)
{
Uchar cnt=0;
ComWrite(0x04); // I/D =0
// ComWrite(0x02);
ComWrite(0x9f); // SET DDRAM 00 TO AC
for(c1++,cnt=0;c1<0xf7,cnt<32;cnt++)
{DatWrite(c1);DatWrite(c2++);}
{DatWrite(Updat);DatWrite(Dndat);}
delay(10000);
}
void Initial()
{
delay(500);
RES =0;
delay(100);
RES =1;
delay(500);
ComWrite(0x30); //Function set 00 1 DL : x RE G 0
ComWrite(0x30); //Function set 00 1 DL : x RE G 0
ComWrite(0x0c); // 0000 : 1 D C B ;display on
ComWrite(0x34); // RE=1 Function set
ComWrite(0x0c); // sleep mode off
ComWrite(0x02); // enable CGRAM
ComWrite(0x30); // RE =0;Function set
ComWrite(0x06); // I/D=1
delay(150);
}
void DatWrite(Uchar dat)
{
RS =1;
RW =0;
E =1;
P1 =dat;
delay(0);
E =0;
delay(0);
}
void ComWrite(Uchar com)
{
RS =0;
RW =0;
E =1;
P1 =com;
delay(0);
E =0;
delay(0);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?