//***************************//
//模 塊 名:適用于128 x 32點陣,串行模式
//工作電壓:3.0-3.3V
//創(chuàng) 建 人:乾思迪
//創(chuàng)建日期:
//功 能:橫,點,圖片顯示的測試
//**************************//
#include<reg52.h>
#include<stdio.h>
#define Uchar unsigned char
#define Uint unsigned int
sbit R_S= P3^5;
sbit RES= P3^4;
sbit SCK= P1^6;
sbit SDA= P1^7;
sbit CS1= P3^7;
//#######################################//
char code hanzi[1024]={//縱取模字節(jié)倒序
/*-- 調(diào)入了一幅圖像:C:\Documents and Settings\Administrator\桌面\12832-1.bmp --*/
/*-- 寬度x高度=128x32 --*/
0xFE,0x42,0x42,0x22,0x1E,0xAA,0x4A,0xAA,0x9A,0x0A,0x02,0x02,0xFE,0x00,0x00,0x40,
0x42,0x42,0xFE,0x42,0x42,0xFE,0x42,0x42,0x40,0x10,0x88,0xE4,0x47,0x02,0x00,0x00,
0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00,0xFE,
0x02,0x12,0x2A,0xC6,0x88,0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x88,0x88,0x00,0x00,0x10,
0x61,0x06,0xE0,0x18,0x84,0xE4,0x1C,0x84,0x65,0xBE,0x24,0xA4,0x64,0x04,0x00,0x00,
0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0x00,0x00,0x00,0x00,0x00,
0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,0x00,
0xFF,0x42,0x42,0x41,0x41,0x48,0x72,0x54,0x40,0x41,0x43,0x41,0xFF,0x00,0x00,0x80,
0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x84,0x42,0x21,0x10,0x08,0x0E,0x04,0x00,0x00,
0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00,0xFF,
0x00,0x02,0x04,0x03,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x00,0x04,
0x04,0xFF,0x00,0x01,0x00,0xFF,0x41,0x21,0x12,0x0C,0x1B,0x61,0xC0,0x40,0x00,0x00,
0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x20,
0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00,0x10,
0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,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,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,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,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,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,
};
//##########################################//
void delay(Uint time);
void intial(void);
void Comwrite(Uchar com);
void Datwrite(Uchar dat);
void display(Uchar disp,Uchar disp1);
void hanzi_disp();
void dispkuang();
void main(void);
//###########################################################//
void main(void)
{
RES=0;
delay(10);
RES=1;
// PS1=1;
delay(10);
intial();
delay(10);
while(1)
{
hanzi_disp();
delay(8000);
//dispkuang();
//delay(1000);
display(0xff,0xff);
delay(1000);
display(0xff,0x00);
delay(2000);
display(0x00,0xff);
delay(2000);
display(0x55,0x55);
delay(2000);
display(0xaa,0xaa);
delay(2000);
display(0xaa,0x55);
delay(2000);
display(0x55,0xaa);
delay(2000);
}
}
void dispkuang()
{
Uchar i,j,Page=0xb4;
Comwrite(0x40);
Comwrite(Page);
Comwrite(0x10);
Comwrite(0x00);
Datwrite(0xff);
for(j=0;j<126;j++)
{
Datwrite(0x01);
}
Datwrite(0xff);
for(i=0;i<2;i++)
{
Page++;
Comwrite(Page);
Comwrite(0x10);
Comwrite(0x00);
Datwrite(0xff);
for(j=0;j<126;j++)
{
Datwrite(0x00);
}
Datwrite(0xff);
}
Page++;
Comwrite(Page);
Comwrite(0x10);
Comwrite(0x00);
Datwrite(0xff);
for(j=0;j<126;j++)
{
Datwrite(0x80);
}
Datwrite(0xff);
}
//############################################################//
void display(Uchar disp,Uchar disp1)
{
Uchar i,j,Page=0xaf;
Comwrite(0x40);
for(i=0;i<8;i++)
{
Page=++Page;
Comwrite(Page);
Comwrite(0x10);
Comwrite(0x00);
for(j=0;j<66;j++)
{Datwrite(disp);
Datwrite(disp1);
}
}
}
//#########################################################//
void hanzi_disp()
{
Uchar data i,j;
Uchar Page=0xaf;
Comwrite(0x40);
for(i=0;i<8;i++)
{
Page=++Page;
Comwrite(Page);
Comwrite(0x10);
Comwrite(0x00);
for(j=0;j<128;j++)
{Datwrite(hanzi[i*128+j]);}
}
}
//#########################################################//
void intial(void)
{
delay(500);
Comwrite(0xe3);
Comwrite(0xA2);//Bais set
Comwrite(0xA0);//ADC seg鏡像選擇 0xa0正常,0xA1左右鏡像
Comwrite(0xc8);//com output scan direction,com鏡像選擇 0xc0正常,0xC8上下鏡像
Comwrite(0x2c);內(nèi)部電源管理,
Comwrite(0x2e);內(nèi)部電源管理,
Comwrite(0x2F);內(nèi)部電源管理,三條指令間隔2um
Comwrite(0xf8);
Comwrite(0x00);
Comwrite(0x81);//調(diào)對比度指令
Comwrite(0x1f); //對比度微調(diào),范圍0X00~0X3F之間,原來正常品參數(shù)是0x13,現(xiàn)調(diào)為0x1f即可。
Comwrite(0x21); //對比度粗調(diào),范圍0X20~0X27之間
Comwrite(0xAF);//顯示開
Comwrite(0x50);
delay(10);
}
//這款顯示屏的左上角第一行點陣是(COM31),程序參數(shù)是(0X60)//
//###########################################################//
void Comwrite(Uchar com)
{
unsigned char data i,j;
CS1=0;
R_S=0;
SCK=0;
for(i=0;i<8;i++)
{
j=com;
SCK=0;
SDA=com&0x80;
SCK=1;
com=j<<1;
}
CS1=1;
R_S=1;
}
//###########################################################//
/*我的改動是
if(com&0x80)
SDA=1;
else SDA=0
dat&0x80也一樣這么做*/
//###########################################################//
void Datwrite(Uchar dat)
{
unsigned char data i,j;
CS1=0;
R_S=1;
SCK=0;
for(i=0;i<8;i++)
{
j=dat;
SCK=0;
SDA=dat&0x80;
SCK=1;
dat=j<<1;
}
CS1=1;
R_S=0;
}
//###############################################//
void delay(Uint time)
{
unsigned char j;
while(time--)
{
for(j=0;j<=30;j++) //100uS=0.1mS//
{;;}
}
}
|