?? st7549t.c
字號:
/*******************************************************************************
Module Name : ZM95008
Driver IC : ST7549T
Interface : Series for three lines
Display : 64*64 Dots
written by : Frank.Fon
Date : 2007.07.13
Compiler : keil C51 Ver7.5
********************************************************************************/
#include<intrins.h>
#include<at89x52.h>
#define NOP _nop_();_nop_();_nop_();_nop_();
sbit SCLK = P1^0;
sbit SDA = P1^1;
sbit CSB = P1^2;
sbit RESB = P1^3;
#include<Pic.C>
/**********************************delay time***********************************/
void delay_ms(unsigned int ms)
{
unsigned int n;
for(;ms!=0;ms--)
for(n=0;n<125;n++)
;
}
/******************************write command to IC******************************/
void w_cmd(unsigned char cmd)
{
unsigned char i;
unsigned char j;
unsigned char A0 = 0x00;
CSB = 0;
for(i=0;i<1;i++)
{
SCLK = 0;
NOP;
SDA=(A0&0x80);
NOP;
SCLK = 1;
}
for(j=0;j<8;j++)
{
SCLK = 0;
NOP;
SDA =(cmd&0x80)?1:0;
NOP;
SCLK = 1;
cmd<<=1;
}
NOP;
CSB = 1;
}
/*******************************write data to IC*******************************/
void w_dat(unsigned char dat)
{
unsigned char j;
unsigned char A0 = 0x80;
CSB = 0;
SCLK = 0;
NOP;
SDA=(A0&0x80);
NOP;
SCLK = 1;
NOP;
for(j=0;j<8;j++)
{
SCLK = 0;
NOP;
SDA =(dat&0x80)?1:0;
NOP;
SCLK = 1;
dat<<=1;
}
NOP;
CSB = 1;
}
/*********************************Initialize IC******************************/
void init_IC()
{
RESB = 0;
delay_ms(100);
RESB = 1;
delay_ms(100);
w_cmd(0x21); //function set MX=MY=0 makes SEG0->SEG101 and COM0->COM66,PD=0 makes chip
delay_ms(10); //active,H1=0,H0=1;
w_cmd(0x12); //set bias:1/9 and duty:1/68
delay_ms(10);
w_cmd(0x08); //D0=0,LSB is on top,when D0=1,MSB is on top
delay_ms(10);
w_cmd(0xB6); //set VOP
delay_ms(10);
w_cmd(0x20); //function set H1=0,H0=0
delay_ms(10);
w_cmd(0x05); //PRS=1,VLCD programming HIGH
delay_ms(10);
w_cmd(0x0C); //Normal display
delay_ms(10);
}
/**************************display image*****************************/
void Display(unsigned char *pic)
{
unsigned char page;
unsigned char column;
unsigned char k = 0;
w_cmd(0x40);
for(page=0x40;page<0x48;page++)
{
w_cmd(page);
w_cmd(0x80);
for(column=0;column<64;column++)
{
w_dat(*pic++) ;
}
}
}
void Display_Full(unsigned char fill)
{
unsigned char page;
unsigned char column;
w_cmd(0x40);
for(page=0x40;page<0x48;page++)
{
w_cmd(page);
w_cmd(0x80);
for(column=0;column<64;column++)
{
w_dat(fill);
}
}
}
void Grid_Black()
{
unsigned char page,column;
for(page=0x40;page<0x48;page++)
{
w_cmd(page);
w_cmd(0x80);
for(column=0;column<32;column++)
{
w_cmd(0xAA);
w_cmd(0x55);
}
}
}
void Grid_White()
{
unsigned char page,column;
for(page=0x40;page<0x48;page++)
{
w_cmd(page);
w_cmd(0x80);
for(column=0;column<32;column++)
{
w_dat(0x55);
w_dat(0xAA);
}
}
}
void vertical_scan()
{
unsigned char page,column,i;
unsigned char DATA;
for(page=0x40;page<0x44;page++)
{
DATA=0x80;
for(i=0;i<8;i++)
{
w_cmd(page);
w_cmd(0x80);
for(column=0;column<64;column++)
{
w_dat(DATA);
}
w_cmd(page+4);
w_cmd(0x80);
for(column=0;column<64;column++)
{
w_dat(DATA);
}
DATA>>=DATA;
delay_ms(250);
w_cmd(page-4);
w_cmd(0x80);
for(column=0;column<64;column++)
{
w_dat(0x00);
}
w_cmd(page+4);
w_cmd(0x80);
for(column=0;column<64;column++)
{
w_dat(0x00);
}
}
}
}
void horizontal_scan()
{
unsigned char page,i;
for(i=0x80;i<0xA0;i++)
{
for(page=0x40;page<0x48;page++)
{
w_cmd(page);
w_cmd(i);
w_dat(0xFF);
w_cmd(i+32);
w_dat(0xFF);
}
delay_ms(200);
for(page=0x40;page<0x48;page++)
{
w_cmd(page);
w_cmd(i);
w_dat(0x00);
w_cmd(i+32);
w_dat(0x00);
}
}
}
void main()
{
init_IC();
while(1)
{
Display_Full(0xFF);
delay_ms(2000);
Display(Frame);
delay_ms(2000);
Grid_Black();
delay_ms(2000);
Grid_White();
delay_ms(2000);
vertical_scan();
horizontal_scan();
Display(Internet);
delay_ms(2000);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -