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

📄 c8051f020_s1d1330_sed1335.txt

📁 C8051F020下的S1D1330(SED1335)驱动 希望对大家有帮助
💻 TXT
字号:
/*包含头文件*/
#i nclude <absacc.h>
#i nclude <c8051f020.h>
#i nclude "code.h"   

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long 

#define  AP  40                 //一行8点320/4=40个字节

//----------------端口定义-----------------
#define LCD_DATA P4//13358位数据输入
sbit A0= P3^2;   //1335数据类型选择
sbit RD= P3^0;   // 读选择 ,低电平有效
sbit WR= P3^1;   //1335写

//====================常量定义======== 
uchar SYSTAB[8]={0x30,0x87,0x07,39,52,239,40,0x00};
uchar SCRTAB[10]={0x00,0x00,240,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//----------------------------- 定义变量-----------------
bit bdata lcd_fanxian;
uchar *add;


/******************************************************************************************
*函数名:  WriteCommand
*参数:   uchar sys_data,要写的命令字
*返回值:  无
*描述:   向lcd 写命令,lcd write a command byte function 
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void WriteCommand(uchar sys_data)
{
 uchar i;

 A0=1;


 LCD_DATA=sys_data;          //写命令字

 for(i=0;i<5;i++);

// RD=1;
// for(i=0;i<10;i++);

 WR=0;
 for(i=0;i<5;i++);

 WR=1;
 for(i=0;i<5;i++);

// A0=0;
// for(i=0;i<10;i++);
} 

/******************************************************************************************
*函数名:  WriteData
*参数:   uchar display_data,要显示的数据
*返回值:  无
*描述:   向lcd 写数据,lcd write a display byte function
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void WriteData(uchar display_data)
{
    uchar i;

 A0=0;
// for(i=0;i<10;i++);

 LCD_DATA=display_data;
 for(i=0;i<5;i++);

// RD=1;
// for(i=0;i<10;i++);

 WR=0;
 for(i=0;i<5;i++);

 WR=1;
 for(i=0;i<5;i++);

// A0=1;
// for(i=0;i<10;i++);

} 

/******************************************************************************************
*函数名:  clear
*参数:   无
*返回值:  无
*描述:   清显示屏RAM  
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void clear(void)
{ 
 uint i,j;        

 WriteCommand(0x4c);  //读写显示数据后光标向右移动   

 WriteCommand(0x46); //当前光标显示的位置 显示存储器当前的地址指针 


 WriteData(0x00);
 WriteData(0x00);    //地址为0000


  WriteCommand(0x42);  //数据写入设置 地址有光标决定   方向有光标最近设置光标移动方向决定



 for(i=255;i>0;i--)
    {  
  for(j=125;j>0;j--)
     {
      WriteData(0x00);
     }
 } 
       
}

/******************************************************************************************
*函数名:  intglcd
*参数:   无
*返回值:  无
*描述:   SED1335驱动芯片的初始化函数
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void intglcd(void)
{
    uint counter;
 uchar i;
    for(counter=0;counter<50000;counter++);
    

 WriteCommand(0x40);
    for(i=0;i<8;i++)
 {

  WriteData(SYSTAB[i]);
 }                      //SET 初始化设置  8


 WriteCommand(0x44);
    for(i=0;i<10;i++)
 {

  WriteData(SCRTAB[i]);
 }                     //显示域设置   10 


 WriteCommand(0x5a);
    WriteData(0x00);

 WriteCommand(0x5b);
    WriteData(0x0c);           //显示合成设置   显示一三区为图形显示



 clear();                      // 清显示屏

 WriteCommand(0x4c); /* 光标自动向右增一*/
 WriteCommand(0x5d);
 WriteData(0x02);
 WriteData(0x0f);
 

 WriteCommand(0x59);    //显示总开关
    WriteData(0x16);          //显示开关状态设置?开显示一区 

}

/******************************************************************************************
*函数名:  WRCC32
*参数:   无
*返回值:  无
*描述:   显示32*32点阵汉字
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void WRCC32(uchar ox,uchar oy,uchar code1)
{ 
 uchar i,k;


 WriteCommand(0x4f);  //读写显示数据后光标向下移动  CSR+AP


 for(k=0;k<4;k++)
    {


  WriteCommand(0x46);                  //设置当前显示地址
  WriteData((AP*oy+ox+k)%256);   //显示地址低字节
  WriteData((AP*oy+ox+k)/256);     //显示地址高字节
  WriteCommand(0x42);                 //计算显示地址指针数据


 for(i=0;i<32;i++)
        {
      if(lcd_fanxian)
      {

            WriteData(~CCTA32[code1][i*4+k]);
      }
       else
      {

               WriteData(CCTA32[code1][i*4+k]);
       }
  }
 }
}

/******************************************************************************************
*函数名:  WRCC24
*参数:   uchar ox,
            uchar oy,
            uchar code1,
*返回值:  无
*描述:   显示24*24点阵汉字
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void WRCC24(uchar ox,uchar oy,uchar code1)
{ 
 uchar i,k;
 WriteCommand(0x4f);
 
 for(k=0;k<3;k++)
 {
  WriteCommand(0x46);
  WriteData((AP*oy+ox+k)%256);
  WriteData((AP*oy+ox+k)/256);
  WriteCommand(0x42);

  for(i=0;i<24;i++)
  {
      if(lcd_fanxian)
      {
             WriteData(~CCTA24[code1][i*3+k]);
      }
       else
      {
       WriteData(CCTA24[code1][i*3+k]);
      }
    }
  }
}


/******************************************************************************************
*函数名:  WRCC16
*参数:   uchar ox,
                uchar oy,
    uchar code1,
*返回值:  无
*描述:   显示16*16点阵汉字
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void WRCC16(uchar ox,uchar oy,uchar code1)
{ 
 uchar i,k;
 WriteCommand(0x4f);

 for(k=0;k<2;k++)
 {
  WriteCommand(0x46);
  WriteData((AP*oy+ox+k)%256);
  WriteData((AP*oy+ox+k)/256);
  WriteCommand(0x42);
  
   for(i=0;i<16;i++)
   {
      if(lcd_fanxian)
      {

        WriteData(~CCTA16[code1][i*2+k]);
      }
            else
      {

       WriteData(CCTA16[code1][i*2+k]);
      }
  }
    }
}

/******************************************************************************************
*函数名:  WRCC8
*参数:   uchar ox,
                uchar oy,
    uchar code1,
*返回值:  无
*描述:   显示8*16点阵数字,字母
*编写:   罗维平
*版本信息:  V1.0   2006年1月7日
******************************************************************************************/
void WRCC8(uchar ox,uchar oy,uchar code1)
{ 
 uchar i;
 WriteCommand(0x4f);


  WriteCommand(0x46);
  WriteData((AP*oy+ox)%256);
  WriteData((AP*oy+ox)/256);
  WriteCommand(0x42);
  
   for(i=0;i<16;i++)
   {
      if(lcd_fanxian)
      {
       WriteData(~CCTA8[code1][i]);
      }
      else
      {
       WriteData(CCTA8[code1][i]);
      }
  }
}

void main(void)
{
    uint i;

 WDTCN=0xde;
 WDTCN=0xad;
//晶振配置,采用内部晶振,默认为2MHz(八分频)
//允许时钟丢失监测器
// OSCICN = 0x97; 
// OSCXCN = 0x00; 

 OSCXCN = 0x67;                      // start external oscillator with
                                       // 18.432MHz crystal
    for (i=0; i < 256; i++) ;           // Wait for osc. to start up
    while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
    OSCICN = 0x08;                      // select external oscillator as SYSCLK
                                       // source and disable missing clock
                                      // detector 禁止时钟丢失检测
 
 XBR0 = 0x07;                     // Route SMBus to GPIO pins through crossbar
 XBR1 = 0x00;
 XBR2 = 0x40;                     // Enable crossbar and weak pull-ups
 
 P0MDOUT= 0x00;
 P1MDIN = 0xFF; 
    P3MDOUT = 0xFF;                   //1.8 推挽
    P74OUT=0x03;                      //1.8 添加,非常重要,配置成推挽方式  
 P0=0xFF;
 P2 &= 0x7f;


    intglcd();


// lcd_fanxian=1;

 WRCC8(8,150,0);
 WRCC8(9,150,1);
 WRCC32(8,100,0);
 WRCC16(2,10,0);

 WRCC16(5,10,1);

 WRCC16(8,10,3);

 WRCC16(11,10,2);

 WRCC16(14,10,4);

 WRCC16(17,10,5);

 WRCC16(20,10,6);

 WRCC16(23,10,7);

 WRCC16(26,10,8);

 WRCC16(29,10,9);

 WRCC16(32,10,10);

 WRCC16(2,30,10);

 WRCC16(5,30,11);

 WRCC16(8,30,12);

 WRCC16(11,30,13);

 WRCC16(14,30,14);

 WRCC16(17,30,15);

 WRCC16(20,30,16);

 WRCC16(23,30,17);

 WRCC16(26,30,18);

 WRCC16(29,30,19);

 WRCC16(32,30,20);


 WRCC24(20,100,0);
 WRCC24(25,100,1);

 while(1);
}

⌨️ 快捷键说明

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