求分享ST7036的串口程序
/********************************************************;
;* IC : ST7036 *;
;* MCU type : W78E52B(8K ROM) *;
;* Data : 4Line mode *;
;********************************************************/
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//========================================================
sbit RES=P3^1;
sbit CS1=P3^3;
sbit A0=P3^0;
sbit SCL=P1^0;
sbit SDI=P1^1;
sbit key1=P3^4;
//========================================================
void init(); //初始化
void font1(); //字形1
void font2(); //字形2
void font3(); //字形3
void d_icon();
void c_icon();
void write_cgram();
void d_cgram(int p);
void write_com(int para);
void write_data(int para);
void delay(int t);
//========================================================
void init()
{
//P1=P3=0Xff;
RES=1;
delay(50);
RES=0;
delay(10);
RES=1;
delay(500);
write_com(0x39); //FUNCTION SET 001,DL,N,DH,IS2,IS1
delay(50);
write_com(0x39); //FUNCTION SET 001,DL,N,DH,IS2,IS1
delay(50);
write_com(0x39); //FUNCTION SET 001,DL,N,DH,IS2,IS1
delay(50);
write_com(0x15); //INTERNAL FREQ 0001B10Fx B:Bias ; Fx: Frame frequency
delay(50);
write_com(0x7f); //CONTRAST SET 0111CCCC ,C3,C2,C1,C0
delay(50);
write_com(0x5e); //POWER/ICON/CONTRAST CTRL 0101IBCC
delay(50);
write_com(0x6c); //Follower Control 0110FRRR , F=1,Follower on; 0:off; RRR: Ra/Rb
delay(50);
write_com(0x01); //CLR DISPLAY
delay(500);
write_com(0x0c); //DISPLAY ON ,00001DCB ,D=1:Display on; 0:off
delay(50);
}
//========================================================
void font1()
{
int i,j,k;
write_com(0x80); //
delay(50);
for(i=0;i<16;i++)
{
write_data(0X30);
}
write_com(0x90);
delay(50);
for(j=0;j<16;j++)
{
write_data(0X31);
}
write_com(0xa0);
delay(50);
for(k=0;k<16;k++)
{
write_data(0X32);
}
}
//========================================================
void font2()
{
int i,j,k;
write_com(0x80); //
delay(50);
for(i=0;i<16;i++)
{
write_data(0X33);
}
write_com(0x90);
delay(50);
for(j=0;j<16;j++)
{
write_data(0X34);
}
write_com(0xa0);
delay(50);
for(k=0;k<16;k++)
{
write_data(0X35);
}
}
//========================================================
void font3()
{
int i,j,k;
write_com(0x80); //
delay(50);
for(i=0;i<16;i++)
{
write_data(0X36);
}
write_com(0x90);
delay(50);
for(j=0;j<16;j++)
{
write_data(0X37);
}
write_com(0xa0);
delay(50);
for(k=0;k<16;k++)
{
write_data(0X38);
}
}
//========================================================
void d_icon()
{
//int i;
write_com(0x39);
delay(50);
write_com(0x5e);
delay(50);
write_com(0x40); //
delay(50);
//*
write_data(0x15);
write_com(0x41); //
delay(50);
write_data(0x01);
write_com(0x42); //
delay(50);
write_data(0x14);
write_com(0x43); //
delay(50);
write_data(0x01);
write_com(0x44); //
delay(50);
write_data(0x09);
write_com(0x45); //
delay(50);
write_data(0x00);
write_com(0x46); //
delay(50);
write_data(0x05);
write_com(0x47); //
delay(50);
write_data(0x08);
write_com(0x48); //
delay(50);
write_data(0x10);
write_com(0x49); //
delay(50);
write_data(0x10);
write_com(0x4a); //
delay(50);
write_data(0x08);
write_com(0x4b); //
delay(50);
write_data(0x0a);
write_com(0x4c); //
delay(50);
write_data(0x01);
write_com(0x4d); //
delay(50);
write_data(0x00);
write_com(0x4e); //
delay(50);
write_data(0x01);
write_com(0x4f); //
delay(50);
write_data(0x00);
//*/
//for(i=0;i<16;i++)
//{
// write_data(0x1f);
// }
}
//========================================================
void c_icon()
{
int i;
write_com(0x39);
delay(50);
write_com(0x5e);
delay(50);
write_com(0x40); //
delay(50);
for(i=0;i<16;i++)
{
write_data(0xff);
}
}
//========================================================
void write_com(int para)
{
int j;
j=8;
CS1=0;
A0=0;
do
{
if(para&0x80)
SDI=1;
else
SDI=0;
SCL=0;
SCL=1;
--j;
para<<=1;
}
while(j);
CS1=1;
}
//========================================================
void write_data(int para)
{
int j;
j=8;
CS1=0;
A0=1;
do
{
if(para&0x80)
SDI=1;
else
SDI=0;
SCL=0;
SCL=1;
--j;
para<<=1;
}
while(j);
CS1=1;
}
//========================================================
void kscan()
{
delay(50);
while(key1==1)
{
delay(50);
}
}
//========================================================
void write_cgram()
{
int i;
write_com(0x38);
delay(50);
write_com(0x40);
delay(50);
for(i=0;i<8;i++)
{
write_data(0x1f);
}
for(i=8;i<16;i++)
{
write_data(0x55);
}
for(i=16;i<17;i++)
{
write_data(0x55);
write_data(0xaa);
write_data(0x55);
write_data(0xaa);
write_data(0x55);
write_data(0xaa);
write_data(0x55);
write_data(0xaa);
}
for(i=24;i<25;i++)
{
//write_data(0x1f);
write_data(0x00);
write_data(0x1f);
write_data(0x00);
write_data(0x1f);
write_data(0x00);
write_data(0x1f);
write_data(0x00);
write_data(0x1f);
}
}
//========================================================
void d_cgram(int p)
{
int i,j;
write_com(0x80);
delay(50);
for(i=0;i<20;i++)
{
write_data(p);
}
write_com(0x90);
delay(50);
for(j=0;j<20;j++)
{
write_data(p);
}
write_com(0xa0);
delay(50);
for(j=0;j<20;j++)
{
write_data(p);
}
}
//========================================================
void delay(int t)
{
register int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
//========================================================
main()
{
init();
delay(200);
//kscan();
c_icon();
while(1)
{
font1();
delay(200);
kscan();
font2();
delay(200);
kscan();
font3();
delay(200);
kscan();
write_com(0x01);
delay(500);
write_cgram();
d_cgram(0);
delay(200);
kscan();
write_com(0x01);
delay(500);
write_cgram();
d_cgram(1);
delay(200);
kscan();
write_com(0x01);
delay(500);
write_cgram();
d_cgram(2);
delay(200);
kscan();
write_com(0x01);
delay(500);
write_cgram();
d_cgram(3);
delay(200);
kscan();
}
}
