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

📄 led.c

📁 北京青云公司液晶屏320*240的驱动程序
💻 C
字号:

//该程序实现2407的led显示
//  RS   BIT PA.0 ;控制线定义
//  RW   BIT PA.1
//  E    BIT PA.2
//  CS1  BIT PA.3
//  CS2  BIT PA.4
//  BUSY BIT PA.5
//  INT  BIT PA.6
//  RST  BIT PA.7
//  数据线PB
#include 	"lf2407regs.h"

//禁止总中断子程序       
void  inline  disable() 
{
	asm(" setc INTM");
	asm(" setc SXM");
	asm(" CLRC OVM");
	asm(" CLRC CNF");  
}
//使能总中断子程序
void inline enable() 
{
asm(" clrc INTM");
}
void sys_initial()
{      		    
    *IFR=0xFFFF;				// 清除中断标志   
    *SCSR1=0x87FE;         	//CLKIN=15M,CLKOUT=15M
    *WDCR=0xE8;           		//不使能看门狗
    *IMR=0X00;
    *MCRA=*MCRA&0X0;        //PA,PB配置为基本IO方式
    *MCRB=*MCRB&0X0;       //pc配置为基本IO方式
    *PADATDIR=(*PADATDIR&0X0060)|0X9F9B;//BUSY,INT,输入RS,RW,E输出高电平
    //延时程序
   // asm(" NOP");
   // asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
  //  asm(" NOP");
    //*PADATDIR=(*PADATDIR|0X0080);//RST置为高电平
    *PBDATDIR=(*PBDATDIR|0X0FF00);
   // *PCDATDIR=(*PCDATDIR&0X0FEFF);
    
}

void testbusy()
{
 int i=0;
 while(1)
 {
   i=(*PADATDIR)&0X0020;
   if(i==0x0) break;
 }  
}

void wractrl(int res,int data)
{
   testbusy();
   *PBDATDIR=(*PBDATDIR&0X0FF00)|res;
   *PADATDIR=(*PADATDIR&0X0FFF1)|0X01;//clr e,clr rw,set rs

   
   //NOP
   //NOP
   asm(" NOP");

 
    *PADATDIR=*PADATDIR|0X4;//set e
    //NOP
    //NOP
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");

    *PADATDIR=*PADATDIR&0X0FFFB;//clr e
    //NOP
   asm(" NOP");
    *PADATDIR=*PADATDIR|0X2;  //set  rw
    //lcall delay
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");
    testbusy();
    *PBDATDIR=(*PBDATDIR&0X0FF00)|data;
    *PADATDIR=(*PADATDIR&0X0FFF1)|0X01;//clr e,clr rw,set rs
    //nop
    asm(" NOP");
//    asm(" NOP");

    *PADATDIR=*PADATDIR|0X4;//set e
    //nop
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");
    asm(" NOP");

    *PADATDIR=*PADATDIR&0X0FFFB;//clr e
    //nop
     asm(" NOP");
   
    *PADATDIR=*PADATDIR|0X2; //set  rw
    asm(" NOP");

}


void wradata(int radata)
{
      testbusy();
      *PADATDIR=(*PADATDIR&0X0FFFB);
      *PBDATDIR=(*PBDATDIR&0X0FF00)|radata;
      *PADATDIR=(*PADATDIR&0X0FFF0);
      //NOP
      asm(" NOP");
      *PADATDIR=*PADATDIR|0X4;//set e
      //NOP
      asm(" NOP");
      asm(" NOP");
      asm(" NOP");
      asm(" NOP");
      *PADATDIR=*PADATDIR&0X0FFFB;//clr e
        asm(" NOP");
}



void clrram()
{
    int i;
    int j;
    wractrl(0x00,0x0cd);
    wractrl(0x18,0x0f0);
    wractrl(0x20,0x27);
    wractrl(0x30,0x0ef);
    wractrl(0x40,0x00);
    wractrl(0x50,0x00);
    wractrl(0x60,0x00);
    wractrl(0x70,0x00);
    for(i=1;i<=15;i++)
      for(j=1;j<=20;j++)
        {
        wradata(0x0a0);
        wradata(0x0a1);
        }
}





hanzixianshi()
{
 // wractrl(0x00,0x0cd);
 // wractrl(0x60,0x10);
 // wractrl(0x70,0x40);
 // wractrl(0x18,0x0f2);
   wractrl(0x60,0x00);
   wractrl(0x70,0x00);
   wradata(0X0C7);
   wradata(0X0E0);
   wradata(0X0D4);
   wradata(0X0C6);
}
  
  

void led_initial()
{
     wractrl(0x00,0x0cd);
     wractrl(0x08,0x073);
     wractrl(0x10,0x2f);
     wractrl(0x18,0x20);
     wractrl(0x20,0x27);
     wractrl(0x30,0x0ef);
     wractrl(0x40,0x00);
     wractrl(0x50,0x00);
     wractrl(0x28,0x27);
     wractrl(0x38,0x0ef);
     wractrl(0x48,0x00);
     wractrl(0x58,0x00);
     wractrl(0x60,0x00);
     wractrl(0x70,0x00);
     wractrl(0x90,0x0A);///???????????????????????????????????????????/
     wractrl(0x0b0,0x27);
     wractrl(0x0b8,0x0ef);
     wractrl(0x0a0,0x08);
     wractrl(0x0c0,0x0f0);
     wractrl(0x0d0,0x30);
     wractrl(0x0e0,0x00);
     wractrl(0x0f0,0x0a0);
     clrram();
     hanzixianshi();
     //清屏
     //汉字显示
     //延时
     //延时
     //清屏
//     返回
     
}




int rdacirl(int resNO)             //读寄存器
{
   int savedata;
   savedata=0;
   testbusy();
   *PBDATDIR=(*PBDATDIR&0X0FFFB);
   *PBDATDIR=(*PBDATDIR&0X0FF00)|resNO;
   *PADATDIR=(*PADATDIR&0X0FFF1)|0X01;//clr e,clr rw,set rt
   
   
   //NOP
   //NOP
   asm(" NOP");

 
    *PADATDIR=*PADATDIR|0X4;//set e
    //NOP
    //NOP
    asm(" NOP");
	asm(" NOP");
	asm(" NOP");
	asm(" NOP");
	

    *PADATDIR=*PADATDIR&0X0FFFB;//clr e
    //NOP
    asm(" NOP");
    *PADATDIR=*PADATDIR|0X2;  //set  rw
    //lcall delay


    testbusy();
    *PBDATDIR=(*PBDATDIR&0X00FF);//PB口配置为输入
    *PADATDIR=(*PADATDIR&0X0FFF3)|0X03;//clr e,set rw,set rs
    //nop
    asm(" NOP");


    *PADATDIR=*PADATDIR|0X4;//set e
    //nop
    asm(" NOP");
	asm(" NOP");
	asm(" NOP");
	asm(" NOP");

    savedata=*PBDATDIR;
   // *PCDATDIR=(*PCDATDIR|0XFF00)&0XFF00;
   // *PCDATDIR=*PCDATDIR|savedata;
    *PADATDIR=*PADATDIR&0X0FFFB;//clr e
    //nop
     asm(" NOP");
   
    *PADATDIR=*PADATDIR|0X2;
    *PBDATDIR=*PBDATDIR|0X0FF00; //set  rw,PB输出口
    asm(" NOP");
    return savedata;
 
}

main( ) 
{
  
  int data[100];
  disable();
  sys_initial();
 // led_initial();
 wractrl(0x00,0x0cd);//0
  wractrl(0x08,0x073);//1 
  wractrl(0x10,0x02f);//2        81
  wractrl(0x18,0x20);//3       83
    
      wractrl(0x20,0x27);//4       88
      wractrl(0x30,0x0ef);//5       A7
     wractrl(0x40,0x00);//6         F0
     wractrl(0x50,0x00);//7         B0
     wractrl(0x28,0x27);//8         A7
     wractrl(0x38,0x0ef);//9        EF
     wractrl(0x48,0x00);//10        80
     wractrl(0x58,0x00);//11        80
     wractrl(0x60,0x00);//12        80
     wractrl(0x70,0x00);//13        A0
     wractrl(0x90,0x0a);//14        81
     wractrl(0x0b0,0x27);//15       A7
     wractrl(0x0b8,0x0ef);//16      EF
     wractrl(0x0a0,0x08);//17       88
     wractrl(0x0c0,0x0f0);//18      F0
     wractrl(0x0d0,0x30);//19       B0
     wractrl(0x0e0,0x00);//20       80
     wractrl(0x0f0,0x0a0);//21      A0
 // led_initial();
  //rdacirl(0x00);
  data[0]=rdacirl(0x00);
  data[1]=rdacirl(0x08);
  data[2]=rdacirl(0x10);
  data[3]=rdacirl(0x18);
  data[4]=rdacirl(0x20);
  data[5]=rdacirl(0x30);
  data[6]=rdacirl(0x40);
  data[7]=rdacirl(0x50);
  data[8]=rdacirl(0x28);
  data[9]=rdacirl(0x38);
  data[10]=rdacirl(0x48);
  data[11]=rdacirl(0x58);
  data[12]=rdacirl(0x60);
  data[13]=rdacirl(0x70);
  data[14]=rdacirl(0x90);
  data[15]=rdacirl(0x0b0);
  data[16]=rdacirl(0x0b8);
  
  data[17]=rdacirl(0x0a0);
  data[18]=rdacirl(0x0c0);
  data[19]=rdacirl(0x0d0);
  data[20]=rdacirl(0x0e0);
  data[21]=rdacirl(0x0f0);
  clrram();
  hanzixianshi();
  asm(" nop");
//while(1)
//{    
//   rdacirl(0x00);

   
//}
   
   

   
}


void  interrupt  nothing() 
{
	return;
}

⌨️ 快捷键说明

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