📄 st7920.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define lcdBus P2
sbit lcd_rs = P0^7;
sbit lcd_rw = P0^6;
sbit lcd_e = P0^5;
static void delayus(uchar n)
{
n = n>>1;
while( --n );
}
static void delayms(uchar n)
{
while( n-- )
{
delayus(240);
delayus(240);
delayus(240);
delayus(240);
}
}
void checkBusy()
{
lcd_rs = 0;
lcd_rw = 1;
lcd_e = 1;
lcdBus = 0xff;
while( (lcdBus&0x80)==0x80 );
lcd_e = 0;
}
void writeCommand(uchar com)
{
checkBusy();
lcd_rs = 0;
lcd_rw = 0;
lcdBus = com;
lcd_e = 1;
delayus( 10 );
lcd_e = 0;
delayus( 10 );
}
void writeData(uchar dat)
{
checkBusy();
lcd_rs = 1;
lcd_rw = 0;
lcdBus = dat;
lcd_e = 1;
delayus( 10 );
lcd_e = 0;
delayus( 10 );
}
void lcdReset()
{
delayms( 40 );
writeCommand( 0x30 ); //0b0011x0xx 8-bit interface and basic instruction
delayus( 130 );
writeCommand( 0x30 ); //0b0011x0xx
delayus( 50 );
writeCommand( 0x0c ); //0b00001bcd display on/off control
delayus( 130 );
writeCommand( 0x01 ); //0b00000001 display clear
delayms( 12 );
writeCommand( 0x06 ); //0b000001(I/D)s entry mode set
}
void writeCGRAM(uchar addr,uchar *array) // 0<=addr<=3
{
uchar i;
addr = addr<<4;
addr = addr|0x40;
writeCommand( 0x30 );
writeCommand( addr );
for( i=0 ; i<16 ; i++ )
{
writeData( array[i*2] );
writeData( array[i*2+1] );
}
}
void writeString(uchar line,uchar *str)
{
uchar i;
switch( line )
{
case 0:
writeCommand(0x80);
break;
case 1:
writeCommand(0x90);
break;
case 2:
writeCommand(0x88);
break;
case 3:
writeCommand(0x98);
}
for( i=0 ; str[i] ; i++ )
{
writeData(str[i]);
delayus(100);
}
}
void writeBmp(uchar *img)
{
uchar x,y,i;
uint j = 0;
for( i=0 ; i<9 ; i+=8 )
for( y=0 ; y<32 ; y++ )
for( x=0 ; x<8 ; x++ )
{
writeCommand(0x36);
writeCommand(y+0x80);
writeCommand(x+0x80+i);
writeCommand(0x30);
writeData(img[j++]);
writeData(img[j++]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -