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

📄 st7549t.c

📁 该程序为ST7549的测试程序
💻 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);

 }

}

  





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -