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

📄 液晶驱动程序.txt

📁 TSZ-CC2430开发工具原理图及自己开发硬件时用到的相关文档。
💻 TXT
字号:
//深圳市华创信电子有限公司
//www.a-tops.com  Email:sales@a-tops.com tech@a-tops.com

#include<reg51.h>
#include"d:\软件阁\12864\map.c"
#include<intrins.h>

#define S2 0x08
#define S4 0x02
#define S5 0x01
#define S6 0x10

#define S47 0x08
#define S48 0x04
#define S49 0x02
#define S50 0x01
#define S52 0x08
#define S54 0x02


/*------ 接口逻辑定义区 -------------*/

#define  E   P3_6

#define  RW     P3_1   
#define  EL     P3_2
#define  CS1    P3_3     /* E1: IC1 片选端,E2: IC2 */
#define  CS2    P3_4
#define  RESET  P3_5   /* RW=0,写数据; RW=1;读数据处理 */ 
#define  RS     P3_0   /* RS = 1 ,指向数据 ; RSCS1 = 0 ,指向命令寄存器 */

#define TT     2


uchar code Bet1[]="No Best";
uchar code Bet2[]="only Better";



static uchar H2=0x31;  /*  时钟驱动数据缓冲区  */
static uchar H1=0x30;
static uchar M2=0x33;
static uchar M1=0x30;
    uchar  CLK=0; 
    bit Flag=0;             /* AM & PM */
    bit BL_FG=0;            /* BackLight */

/*------------------------- 延时子程序--------- */
void delay(uint times)
{
 while(times)times--;
} 


/* -------------------------忙音检测 --------------*/

void  CheckBF(bit CS)       /* cs=0,检查IC1     CS=1检查IC2 */
{   
   bit temp;
   RS=0;
   RW=1;
       
    if(CS)CS2=1;
                  else CS1=1;
           
        do {  
              EL=1;
              temp=P1_7;
              EL=0;
                        }while(temp);
            
  CS1=0;    /* 总线释放 ,芯片处高阻状态 */  
  CS2=0;
 
} 
 

/*-----------写命令···寄存器 ------ -----------*/

void  Wcode(bit CC1,uchar dd1) /* 选择芯片 、数据 */
{
       CheckBF(CC1);
       RS=0;
       RW=0;
      

 if(CC1)CS2=1;
    
   else CS1=1;
              P1=dd1;
              EL=1;
              delay(TT);
              EL=0;        /* 写入指令 */ 
            
   CS1=0;  /* 总线释放 ,芯片处高阻状态 */  
   CS2=0;   
                      }

/* -------   写显示数据····· to DDRAM --------*/


void Wdata(bit CC2,uchar dd2)
{

   CheckBF(CC2);
       RS=1;
       RW=0;
      

 if(CC2)CS2=1;
    
   else CS1=1;
              P1=dd2;
              EL=1;
              delay(TT);
              EL=0;        /* 数据写入RAM */ 
            
   CS1=0; /* 总线释放 ,芯片处高阻状态 */  
   CS2=0;   

    }       

/* ------------------------------显示一幅图片 128 *64 ------------*/
void  DisMap(uchar *Imp)
{
  uchar m;
  uchar n;


  for(n=0;n<=7;n++)
{
   Wcode(0,(0xb8+n));  /* Setting Page 0 -- 7*/
   Wcode(1,(0xb8+n));
    
   Wcode(0,0x40);      /* 列 =0 */
   Wcode(1,0x40);

   for(m=0;m<64;m++){ Wdata(0,(*Imp)); Imp++; }
   for(m=0;m<64;m++){ Wdata(1,(*Imp)); Imp++; }
   
 }  }

/*---------- 写指令------*/

void  Wcode2(uchar  order)
{
 delay(TT);
 RS=0;RW=0;
 P1=order;

 E=1;
 _nop_();
 E=0; /* 启动写信号 */
 
}


/*################# 写数据 ############*/

void  Wdata2(uchar  Data)
{
 delay(TT);
 RS=1;RW=0;
 P1=Data;

 E=1;
 _nop_();_nop_();
 E=0;   /* 启动写信号 */
 
}
 

/* -----------------------中断Timer0 :  时钟显示驱动 ------------------ */

void CLOCK0() 
{

 
         M1++;
               if(M1==0x3a){ M2++;M1=0x30; } 
     
                    if(M2==0x36){ H1++;M2=0x30; }
  
                         if(H1==0x3a){ H2++;H1=0x30; }
  
                              if((H2==0x31)&(H1==0x32)){ H2=0x30; H1=0x30; Flag=!Flag; }


  
 /* ------------ 根据以上时钟数据驱动显示时钟 !*/                              
 
 Wcode2(0x38); /* RE 正常模式 */
 
 if(H2==0x30) { Wcode2(0xdc); Wdata2(0x20); }               // H2
        else { Wcode2(0xdc); Wdata2(0x31); }
 
 Wcode2(0xdd);
 Wdata2(H1);               // H1
 Wcode2(0xde);
 Wdata2(M2);              // M2
 Wcode2(0xdf);
 Wdata2(M1);              // M1 
        
       Wcode2(0x3e);     /* 扩展模式,图标闪闪发光 !*/ 
       Wcode2(0x79); 
       Wdata2(S50);
 {
              if(Flag) { Wcode2(0x79); Wdata2(S49); }       
                   
                   else { Wcode2(0x79); Wdata2(S48); }          
                 
       }

}

/* -----------------------中断Timer0 :  背光源驱动 ------------------ */

       void BL() interrupt 1  using 1 
{

 CLK++;
          if(CLK==100)
  {
         EA=0;  /* 禁止再中断入 */
         ET0=0;
         TR0=0;
         BL_FG=!BL_FG;
 /* --------------- 允许继续中断计时 --------*/   
        if(BL_FG){ P3_7=1; CLK=20; }
            else { P3_7=0; CLK=60; }
            
            TH0=0;
            TL0=0;
            EA=1;  /* 禁止再中断入 */
            ET0=1;
            TR0=1;
          }
 }           


/*================================================================  */
/*=============================== 显示主程序 ========== */
/*================================================================  */
 

 
  void main()
{

 
 uchar i; 
 uchar *IP;

/* --------- 初始化地区------------------------------------------*/ 
     
  RESET=0;
  delay(8000);
  RESET=1;      /* 软 件 复 位  */
  CS1=0;    /* 总线释放 ,芯片处高阻状态 */    
  CS2=0;
      
  RESET=0;
  delay(8000);
  RESET=1;      /* 软 件 复 位  */
  CS1=0;    /* 总线释放 ,芯片处高阻状态 */    
  CS2=0;
  
  /* ----------------------------OPEN BACKLIGHT----------- */

  TMOD=0x11;          /* 定义Timer0 为 16 位定时器 */
  TH0=0x0;  
  TL0=0x0;
  ET0=1;
  EA=1; 
  TR0=1;    /* 开始中断计时 */
  CLK=0x0;    /* 首次触发时钟显示 */ 

 
/*--------------以下是 GS-C803301 字符首页 测试区 -----------------------*/ 
 Wcode2(0x01);
 Wcode2(0x38); /* RE 正常模式 */

 Wcode2(0xc); /* Display On , Cursor Off */ 

 Wcode2(0x6); /* 设定 输入模式 ++ */ 

 Wcode2(0xc4);
 Wdata2('G');
 Wcode2(0xcc);
 Wdata2('E');
 Wcode2(0xcd);
 Wdata2('N');
 Wcode2(0xce);
 Wdata2('D');
 Wcode2(0xcf);
 Wdata2('A');   // display " Genda ";

 IP=Bet1;
 Wcode2(0x80);
 for(;*IP!='\0';IP++)Wdata2(*IP);    // No Best

  IP=Bet2;
  Wcode2(0x90);
  for(;*IP!='\0';IP++)Wdata2(*IP);   // Only  Better

 
 /* --------------------------------------------------- 128 *64 Area ---*/ 
  Wcode(0,0xb8);  /* 设置页面Page= 0  */
  Wcode(1,0xb8);
 
  Wcode(0,0xc0);  /* 设置显示首行地址 =00  ,(00 --63) */
  Wcode(1,0xc0);
 
  Wcode(0,0x40);  /* 设置 x 轴地址 = 00 ,(00-63)  */
  Wcode(1,0x40);
 
  Wcode(0,0x3f);  /* 开屏显示 */
  Wcode(1,0x3f);
  DisMap(Map2);        /* 显示图片 */

             Wcode2(0x3e);     /*display ":" */ 
             Wcode2(0x7d); 
             Wdata2(0xff);      

        while(1)
{
   CLOCK0();
   
   Wcode2(0x70); Wdata2(0xc0|S2); 
   delay(60000); delay(60000);  /* 显示图标 */
   delay(60000);  delay(60000); delay(60000);  delay(60000); 
   Wcode2(0x70); Wdata2(0);delay(60000); 
 
 

   Wcode2(0x71); Wdata2(0xc0|S6); delay(60000); delay(60000);
   delay(60000); delay(60000);
   delay(60000);   delay(60000); delay(60000);  delay(60000); 
    Wcode2(0x71); Wdata2(0);
   delay(60000); 

   

   Wcode2(0x70); Wdata2(0xc0|S4); delay(60000);
   delay(60000); delay(60000);
    delay(60000); delay(60000);
   delay(60000); delay(60000);
   delay(60000);
    Wcode2(0x70); Wdata2(0);   
     delay(60000); 


   Wcode2(0x70); Wdata2(0xc0|S5); delay(60000); delay(60000);
   delay(60000); delay(60000);
   delay(60000);   delay(60000); 
   delay(60000); 
   Wcode2(0x70); Wdata2(0);
   delay(60000);



   Wcode2(0x7a); Wdata2(0xc0|S52); delay(60000); delay(60000);
   delay(60000); delay(60000);
   delay(60000);   delay(60000); delay(60000);
   Wcode2(0x7a); Wdata2(0); delay(60000);


                  
          if(Flag) { Wcode2(0x79); Wdata2(0xc3); }       
                       else { Wcode2(0x79); Wdata2(0xc5); }  
                        delay(60000); delay(60000);
                         delay(60000); delay(60000);

            if(Flag) { Wcode2(0x79); Wdata2(2); }       
                       else { Wcode2(0x79); Wdata2(4); }  
                        
    Wcode2(0x7a); Wdata2(0xc0|S54); delay(60000); delay(60000);
    delay(60000); delay(60000);
     delay(60000); delay(60000);     
     delay(60000); delay(60000); 
     delay(60000);delay(60000);
    Wcode2(0x7a); Wdata2(0);
    delay(60000); 
 
     
            for(i=0;i<13;i++)      /* 全部点亮图标 */
              {
                  Wcode2(0x70+i);
                  Wdata2(0x3f);  
                                     }
                  if(Flag) { Wcode2(0x79); Wdata2(0x2); }       
                       else { Wcode2(0x79); Wdata2(0x4); }   

for(i=0;i<35;i++)delay(60000);

                   for(i=0;i<13;i++)      /* 全部  Clear 图标 */
                {
                        Wcode2(0x70+i);
                            Wdata2(0x0);        }
                          if(Flag) { Wcode2(0x79); Wdata2(0x2); }       
                       else { Wcode2(0x79); Wdata2(0x4); }   
         
delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000);

      }   

}    /* ----------------------程序到此结束啦!! */
 

⌨️ 快捷键说明

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