⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st7920.c

📁 c语言实现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 + -