把網(wǎng)上的st7567串行驅動稍微修改了一下,改成并行的。屏幕能起來,經(jīng)常會出現(xiàn)閃屏,不知道啥問題。以后有空在查。
貼下代碼,請高手閑的時候也幫忙看下:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P1^2; //A0
sbit rw=P1^1;
sbit en=P1^0;
sbit res=P1^3;
unsigned char code hz0[128]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x78,0x08,0x00,0x00,0x00,0x00,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0xE0,0xF0,0x70,0x60,0x00,0x00,0x00,
0x00,0x02,0x02,0x02,0x02,0xE2,0xFF,0xFF,0x0F,0x02,0x02,0xF2,0xFF,0xFF,0x06,0x00,
0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFE,0x03,0x01,0x00,0x00,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x20,0x3C,0x3F,0x67,0x40,0xC0,0xE0,0xFE,0xFF,0x8F,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x40,0x40,0x60,0x30,0x18,0x0C,0x0E,0x07,0x03,0x01,0x03,0x07,0x0F,0x0E,0x00,
0x10,0x10,0x30,0x30,0x70,0x7F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"好",0*/
};
unsigned char code hz1[128]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x78,0x08,0x00,0x00,0x00,0x00,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0xE0,0xF0,0x70,0x60,0x00,0x00,0x00,
0x00,0x02,0x02,0x02,0x02,0xE2,0xFF,0xFF,0x0F,0x02,0x02,0xF2,0xFF,0xFF,0x06,0x00,
0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFE,0x03,0x01,0x00,0x00,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x20,0x3C,0x3F,0x67,0x40,0xC0,0xE0,0xFE,0xFF,0x8F,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x40,0x40,0x60,0x30,0x18,0x0C,0x0E,0x07,0x03,0x01,0x03,0x07,0x0F,0x0E,0x00,
0x10,0x10,0x30,0x30,0x70,0x7F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"好",1*/
};
unsigned char code hz2[128]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x78,0xF0,0xE0,0xC0,0x00,0x04,0x3C,0xF8,
0xF0,0xE0,0x00,0x00,0x00,0xC0,0xF0,0x7C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x7C,0x7C,0x3C,0x84,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x85,
0x85,0x84,0x84,0x84,0x87,0xC7,0xC5,0xC4,0x84,0x24,0x34,0x1E,0x1E,0x0E,0x04,0x00,
0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFC,
0xFC,0xFC,0x24,0x26,0x23,0x21,0x21,0x20,0x20,0x20,0x30,0x38,0x38,0x30,0x20,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x30,0x70,0x7F,
0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"學",2*/
};
unsigned char code hz3[128]={
0x00,0x00,0x00,0x00,0x20,0x60,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0xF0,0xF0,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x1C,0x78,0x78,
0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0x60,0x30,0x30,0x10,0x18,
0x08,0x0C,0x04,0x06,0x02,0x02,0x02,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x04,0x0C,0x08,0x08,0x18,0x38,0x38,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,/*"習",3*/
};
unsigned char code bmp[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xE8,0xB0,0x90,0x88,0x8C,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x80,0xC0,0xC0,0x40,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x70,0x70,0xF0,0xB8,0x98,0xB8,0x3C,0x3C,0xB4,0x36,0x36,0x3E,0x27,0x27,
0x23,0x23,0x23,0x23,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x2E,0x20,0x20,0x21,0x21,0x21,
0x21,0x21,0x21,0x23,0x22,0x2B,0x27,0x25,0xA5,0xAF,0xAB,0xEB,0x7A,0x76,0x46,0x26,
0x0C,0x0C,0x1C,0x18,0x78,0x78,0x70,0x70,0x70,0x60,0xE0,0x40,0xC0,0x80,0x80,0x80,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x78,0xF8,0xC8,0x8C,0x06,0x07,0x07,
0x05,0x13,0xE3,0xF1,0xF8,0xFC,0x1C,0xEE,0x1E,0x1E,0x0E,0x0E,0xCE,0xEE,0xCE,0x2E,
0x5E,0x1E,0xBE,0xEC,0x3C,0xFC,0xF8,0xF5,0xC9,0x03,0x02,0x0C,0xB8,0xF0,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0xF0,0xB8,0x8C,0x06,0x03,0x81,0xE1,0xF8,0xF8,0xFC,0xDC,0xFE,0x1E,0x1E,
0x0E,0x4E,0xEE,0xEE,0x4E,0x0E,0x1E,0x1E,0xFE,0xDC,0xFD,0xF9,0xFB,0xE3,0x87,0x87,
0x87,0x83,0xC6,0xC4,0x7C,0x38,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x05,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x03,0x07,0x07,0x0E,0x0F,0x0F,0x0E,0x1E,0x1E,0x1E,0x1E,0x0E,
0x0E,0x0F,0x0F,0x0E,0x07,0x07,0x03,0x01,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0D,0x0E,
0x0E,0x1E,0x1E,0x1E,0x1E,0x0E,0x0E,0x0D,0x0F,0x07,0x07,0x03,0x03,0x01,0x01,0x01,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
} ;
void delay(int m) //延時約0.5ms
{
unsigned char h,l;
for(l=0;l<=m;l++)
for(h=249;h>0;h--);
}
void write_com(uchar com) //寫命令
{
rs=0;
rw=0;
en=0;
P2=com;
delay(1);
en=1;
delay(1);
en=0;
}
void write_data(uchar indata) //寫數(shù)據(jù)
{
rs=1;
rw=0;
en=0;
P2=indata;
delay(1);
en=1;
delay(1);
en=0;
}
void led_set_pos(uchar x, uchar y)
{
write_com(0xb0|y); //頁地址0,12832總共4頁(0~3)
write_com(((x&0xf0)>>4)|0x10); //列地址高4位0x1?
write_com((x&0x0f)|0x01); //列地址低4位0x0?
}
void led_clear(uchar dispdata)
{
uchar x,y;
for(y=0;y<4;y++)
{
write_com(0xb0|y);
write_com(0x01);
write_com(0x10);
for(x=0;x<128;x++)
write_data(dispdata);
}
}
void led_init()
{
res=0; //低電平復位
delay(100);
res=1; //復位完畢
delay(100);
write_com(0xe2); //軟復位
delay(5);
write_com(0xae); //開顯示
write_com(0x2f); //升壓
delay(5);
write_com(0x23); //粗調對比度,可設置范圍0x20~0x27
write_com(0x81); //微調對比度
write_com(0x20); //微調對比度的值,可設置范圍0x00~0x3f
write_com(0xa2); //1/9 偏壓比(bias)
write_com(0xc8); //行掃描順序:從上到下
write_com(0xa0); //列掃描順序:從左到右
write_com(0x40); //起始行:第一行開始
write_com(0xaf); //開顯示
led_clear(0x00);
}
//顯示32*32漢字,x取值0,32,64,96 y只能取值0
void led_show32hz(uchar x,uchar y,uchar *hz)
{
uchar i,j;
for(i=0;i<4;i++)
{
led_set_pos(x,y+i);
for (j=0;j<32;j++)
{
write_data(*hz);
hz++;
}
}
}
//畫圖
void led_draw(uchar x,uchar y,uchar *bmp)
{
int i,j;
for(i=0;i<4;i++)
{
led_set_pos(x,y+i);
for(j=0;j<128;j++)
{
write_data(*bmp);
bmp++;
}
}
}
void main()
{
led_init();
led_show32hz(0,0,hz0);
led_show32hz(32,0,hz1);
led_show32hz(64,0,hz2);
led_show32hz(96,0,hz3);
delay(2000);
//led_draw(0,0,bmp);
//delay(2000);
}
|