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

📄 main.c~

📁 1602LCD在SPACEA061上的驱动程序
💻 C~
字号:
#include "SPCE061A.h"
#define  E   (0x1000)
#define  RS  (0x2000)
#define  RW  (0x4000)

#define  DIO (*P_IOA_Data)
#define  Delay_data  40
#define  DIO_Dir      (*P_IOA_Dir)
#define  DIO_Attrib   (*P_IOA_Attrib)
#define  DIO_Buffer   (*P_IOA_Buffer)
#define  CIO          (*P_IOB_Data)
#define  CIO_Dir      (*P_IOB_Dir)
#define  CIO_Attrib   (*P_IOB_Attrib)
#define  CIO_Buffer   (*P_IOB_Buffer)
#define  mask   (0xff00)

unsigned int IO_Dir,IO_Data,IO_Attrib;
void Write_Command(unsigned int Get_Data); //写命令
void Check_Busy(void);                     //是否忙
void LCD_Init(void);                       //初始化
void Write_Data(unsigned int Get_Data);    //显示
void CLS(void);                             //清屏
void Delay(unsigned long int m);

void IO_Init(void)
{
   DIO_Dir&=~mask;
   DIO_Attrib&=~mask;
   DIO=(DIO_Buffer&(~mask));
   
   CIO_Dir|=RS+RW+E;
   CIO_Attrib|=RS+RW+E;
   CIO=(CIO_Buffer|(RS+RW+E));
   
}

//........................................................
void OutPut(void)    //作为输出子程序
{
  DIO_Dir|=mask;
  DIO_Attrib|=mask;
  DIO=(DIO_Buffer|mask);
}
//..........................................................//
//.........................................................//
void InPut(void)   //输入子程序
{ 
  DIO_Dir&=~mask;
  DIO_Attrib&=~mask;
  DIO=(DIO_Buffer&~mask);
}
void IO_Resum(void)
{
   DIO_Dir=IO_Dir;
   DIO_Attrib=IO_Attrib;
   DIO=IO_Data;
}	
//////////.......................................

int main()
{   int j; 
    *P_IOB_Dir=0xffff;
    *P_IOB_Attrib=0xffff;
    *P_IOB_Data=0x0000;	
    LCD_Init();                      
   	Write_Command(0x0080);		//设置当前DDRAM地址为0x00
	Write_Data(41);
	Write_Data(21);
	CLS(); 
	//Write_Data(23);
	//Write_Data('O');
    for(j=0;j<5;j++)
	{
		Delay(65535);						//延时
		*P_Watchdog_Clear = 0x0001;			//清看门狗
	}
  
}



void LCD_Init(void)
{   int i; 
    IO_Init();
    OutPut();
    DIO = DIO_Buffer&~mask;
    DIO |= 0x3000;
    
    CIO=CIO_Buffer&(~(RS+RW));
    for(i=0;i<2;i++)
      {
	    CIO|=E;
	    asm("nop");
	    CIO&=~E;
	    Delay(100);
      }
    DIO_Buffer &= ~mask;
    DIO = DIO_Buffer|0x3800;
    CIO_Buffer|=E;
    asm("nop");
    CIO_Buffer &= ~E;
    Delay(100);
    Write_Command(0x0001);
    Write_Command(0x0006);
    Write_Command(0x000c);
    
}

void Delay(unsigned long int m)  //延时
{  
    while(m--)

    *P_Watchdog_Clear=0x0001;
}
////////////////////////////////////......

//.......................................
void Write_Command(unsigned int Get_Data)//写指令并执行
{                                        //RS=0,RW=1,E=0
    unsigned int Deal_IO=0;
	InPut();
 	CIO=CIO_Buffer|RW;
 	CIO&=~(E+RS);
 	asm("nop");
        do{
		CIO|=E;
        Deal_IO=DIO;
		CIO&=~E;
	}while(Deal_IO&0x8000!=0);
        OutPut();
	CIO&=~RW;
	Get_Data<<=8;
	DIO=DIO_Buffer&~mask;
	DIO|=Get_Data;
	CIO=CIO_Buffer|E;
	asm("nop");
        asm("nop");
	CIO&=~E;
	IO_Resum();
}

//////////////////////////////////////////////
//......................................//////
void Write_Data(unsigned int Get_Data)  //写数据并执行
{                                       //RS=1,RW=0,E=1
  unsigned int Deal_IO=0;
                            //busy?
    InPut();   
    CIO=CIO_Buffer|RW;
    CIO&=~(E+RS);
    asm("nop");
    do{
		CIO|=E;
               Deal_IO=DIO;
		CIO&=~E;
	}while(Deal_IO&0x8000!=0);
    OutPut();
    CIO&=~RW;
    CIO|=RS;
    DIO = DIO_Buffer&~mask;
    Get_Data<<=8;
    DIO|=Get_Data;
    CIO=CIO_Buffer|E;
    asm("nop");
    asm("nop");
    CIO&=~E;
    IO_Resum();
    *P_Watchdog_Clear=0x0001;
  
}
 
//........................................................

void CLS(void) //   清屏
{
 Write_Command(1);
}
///////////........................................................

⌨️ 快捷键说明

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