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

📄 ht1621.c

📁 HT1621驱动LCD测试程序
💻 C
字号:
/****************************************************
技 术 部:HT1621驱动的6907a液晶的串口驱动模式
创建日期:2009年1月8日
引脚定义:CS1========P1^0
          CS2========P1^3
          CLK========P1^1
          SID========P1^2
***************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar  unsigned char 
#define uint   unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

unsigned char flag;
unsigned int a;
void  clearlcd();

sbit CS1 = P1^0;  //显示数据或控制指令
sbit CS2 = P1^3;  //显示数据或控制指令
sbit CLK = P1^1;  //同步时钟
sbit SID = P1^2;  //数据输入端

sbit P3_2= P3^2;  //int0

void delay1(uint ms) //1ms
{
  	uint i,j;
  	for(i=0;i<ms;i++)
  	for(j=0;j<125;j++);
}

void delay2(uint ms) //1ms带中断
{
  	uint i,j;
   	for(i=0;i<ms;i++)
  	for(j=0;j<125;j++);
	while(flag==0);         
}

void int0() interrupt 0 using 0
{	
    for(a=0;a<2000;a++);  //15ms	
    if(P3_2==0)
    { 
      for(a=0;a<2000;a++);//15ms
      flag=1-flag;
	  while(P3_2==0);  
      for(a=0;a<2000;a++);	
      while(P3_2==0);     
	  for(a=0;a<2000;a++);	 
    }
  return;
}


void send(bit i)  //发送数据
{	
    SID=i;
	_nop_();
	CLK=1;
	_nop_();
	CLK=0;
	_nop_();
	CLK=1;
   _nop_();
}

void sendcom(uchar cmdcode)  //送控制字
{  
   uchar j;
   CS1=1;
   CS2=1;
   _nop_();
   _nop_();
   CS1=0;
   CS2=0;
   send(1);
   send(0);
   send(0);
   for (j=0;j<8;j++)
   {  if((cmdcode&0x80)==0x80)
         send(1);
      else
         send(0);
      cmdcode<<=1;
   }
   send(0);
   SID=1;
   CS1=1;
   CS2=1;

}

void transend(unsigned char address,unsigned char data1)  //送6位地址+8位数据
{  unsigned char j;
   CS1=1;
   CS2=1;
   _nop_();
   _nop_();
   CS1=0;
   CS2=0;
   send(1);
   send(0);
   send(1);
   address<<=2;
   for (j=0;j<6;j++)
   {  if((address&0x80)==0x80)
         send(1);
      else
         send(0);
      address<<=1;
   }
   for (j=0;j<8;j++)
   {  if((data1&0x80)==0x80)
         send(1);
      else
         send(0);
      data1=data1<<1;
   }
   SID=1;
   CS1=1;
   CS2=1;

}

void transendsz(unsigned char address,unsigned char data1)  //送6位地址+8位数据
{  unsigned char j;
   send(1);
   send(0);
   send(1);
   address<<=2;
   for (j=0;j<6;j++)
   {  if((address&0x80)==0x80)
         send(1);
      else
         send(0);
      address<<=1;
   }
   for (j=0;j<8;j++)
   {  if((data1&0x80)==0x80)
         send(1);
      else
         send(0);
      data1=data1<<1;
   }
   SID=1;
   CS1=1;
   CS2=1;
}

void transend1(unsigned char address,unsigned char data1)
{
   CS1=1;
   _nop_();
   _nop_();
   CS1=0;
   transendsz(address, data1);
}

void transend2(unsigned char address,unsigned char data1)
{
   CS2=1;
   _nop_();
   _nop_();
   CS2=0;
   transendsz(address, data1);
}

void display2()//2
{   
        unsigned char i;
        unsigned char data data_1[16]={0x70,0xa2,0x70,0xa5,0xa0,0xd7,0x0a,0x5a,
                                       0x0d,0x70,0xa5,0xa0,0xd7,0x0a,0x5a,0x0d};

        unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0x61,0xa2,0x61,0xa2,
                                       0x61,0xa2,0x61,0xa2,0x61,0xa2,0x61,0xa4};
		for(i=0;i<16;i++)
		transend1(i+i,data_1[i]);
        for(i=0;i<16;i++)
        transend2(i+i,data_2[i]);
}

void display5()//5
{        
        unsigned char i;
        unsigned char data data_1[16]={0xd0,0xa1,0xd0,0xaa,0xa0,0x7d,0x0a,0xaa,
                                       0x07,0xd0,0xaa,0xa0,0x7d,0x0a,0xaa,0x07};

        unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0xc1,0xa1,0xc1,0xa1,
                                       0xc1,0xa1,0xc1,0xa1,0xc1,0xa1,0xc1,0xa1};
		for(i=0;i<16;i++)
		transend1(i+i,data_1[i]);
        for(i=0;i<16;i++)
        transend2(i+i,data_2[i]);
}

void display8()//8
{      
        unsigned char i;
        unsigned char data data_1[16]={0xf0,0xa3,0xf0,0xaf,0xa0,0xff,0x0a,0xfa,
                                       0x0f,0xf0,0xaf,0xa0,0xff,0x0a,0xfa,0x0f};

        unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0xe1,0xa3,0xe1,0xa3,
                                       0xe1,0xa3,0xe1,0xa3,0xe1,0xa3,0xe1,0xa5};
		for(i=0;i<16;i++)
		transend1(i+i,data_1[i]);
        for(i=0;i<16;i++)
        transend2(i+i,data_2[i]);
}

void dspimg1()//※
{        
        unsigned char i;
        unsigned char data data_1[16]={0x0f,0x50,0x0f,0x50,0x5f,0x00,0xf5,0x05,
                                       0xf0,0x0f,0x50,0x5f,0x00,0xf5,0x05,0xf0};

        unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0x16,0x54,0x16,0x54,
                                       0x16,0x54,0x16,0x54,0x16,0x54,0x16,0x58};
		for(i=0;i<16;i++)
		transend1(i+i,data_1[i]);
        for(i=0;i<16;i++)
        transend2(i+i,data_2[i]);
}


void dspimg2()//字符
{       
        transend2(0,0xf0);transend2(2,0xf0);transend2(4,0x08);transend2(12,0x08);transend2(16,0x08);
        delay2(800);clearlcd();
        transend2(2,0x0f);transend2(8,0x08);transend2(0,0x0f);transend2(20,0x08);
        delay2(800);clearlcd();
        transend1(2,0x0c);transend2(10,0x08);transend2(14,0x08);transend2(18,0x08);transend2(22,0x08);
        transend2(26,0x08);transend2(30,0x02);transend2(24,0x08);transend2(28,0x08);
        delay2(800);clearlcd();
}

void displayall()
{   unsigned char i;
	unsigned char data_1[32];
	for(i=0;i<32;i++)
	{data_1[i]=0xff;
	transend(i+i,data_1[i]);
	}
}

void  clearlcd()
{	unsigned char i;
	unsigned char data_1[32];
	for(i=0;i<32;i++)
	{data_1[i]=0x00;
    transend(i+i,data_1[i]);
	}
    delay1(50);
}

void initlcd()	//初始化IC
{	
    sendcom(0x00);//关闭LCD系统振荡
	sendcom(0x01);//Enable system
	sendcom(0x02);//LCD 打开系统振荡
	sendcom(0x03);//Display on
	sendcom(0x29);//BIAS=1/3 DUTY=1/4
    
 }

main()
{	 
     CS1=1;
     CS2=1;   
     IE=0;
   	 P3_2=1;
	 EA=1;
	 EX0=1;
	 IT0=1;		    //下降沿触发
     flag=1;
	 initlcd();	    //初始化
     delay1(50);
	 while(1)
	{
     displayall();
	 delay2(800);

     display2();
	 delay2(800);
	 display5();
	 delay2(800);
	 display8();
	 delay2(800);
     dspimg1();
	 delay2(800);
     clearlcd();
     delay2(800);
	 dspimg2();
	 }
}

⌨️ 快捷键说明

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