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

📄 main.c

📁 at89c55和lcm128645Z液晶显示模块的并口连接的显示例子程序(keil c实现)
💻 C
字号:


#include <AT89X55.h>

                                                  
#define Uchar unsigned char
#define Uint  unsigned int
#define Ulong unsigned long

sbit E=P2^0;//E=P3^0;//
sbit RW=P2^1;//RW=P3^1;
sbit RS=P2^2;//RS=P3^2;

/** 定义字符串数组*/
code char STR1[]="中南大学铁道学院";
code char STR3[]="长沙瑞纬电气公司";


/*定义函数声明*/
void Delayus(Ulong t);   /*延时函数*/
void BUSYLOOP();          /*判忙函数*/
void Write_command(Uchar CMD,Uchar bb);  /*写控制字函数*/
void Write_data(Uchar CMD);              /*写数据函数*/
void init();                             /*初始化函数*/
void Display(Uchar *ptr,Uchar ddram);    /*显字符串函数*/

     /*void Delayus(Ulong t);   /*延时函数*/
    
  void Delayus(Ulong t)
{

        Ulong w;
        for(w=0;w<t;w++)
         {;}
 }

   /*  void BUSYLOOP()          判忙函数*/
       
      void BUSYLOOP()
    { 

      
      P0=0x0ff;//P1=0x0ff;
      RS=0;
      RW=1;
      
       do {
             E=1;
             P1=P0;//P2=P1;
             E=0;
           }
      //while(P2>0x7F);
      while(P1>0x7F);
    }

     

/*    void Write_command(Uchar CMD,Uchar bb);  /*写控制字函数*/
   
    void Write_command(Uchar CMD,Uchar bb) 
{ 
   if(bb)
   {BUSYLOOP();}

   RS=0;
   RW=0;
   E=1;
   //P1=CMD;
   P0=CMD;
   Delayus(1);
   E=0;
}


/* void Write_data(Uchar CMD);              /*写数据函数*/

   void Write_data(Uchar CMD) 

{ 
   BUSYLOOP();
   RS=1;
   RW=0;
   E=1;
   //P1=CMD;
   P0=CMD;
   Delayus(1);
   E=0; 
}


 /* void init();                             /*初始化函数*/

  void init()
{
  
   Delayus(38);
   Write_command(0x30,0); /*8位  基本指令*/
   Delayus(1);
   Write_command(0x30,0);/*8位   基本指令*/
   Delayus(1);
   Write_command(0x0C,1);/*开显示*/
   Delayus(1);
   Write_command(0x01,0);/*清屏*/
   Delayus(20);
   Write_command(0x06,1);/*光标右移*/
   
}


  /*void Display(Uchar *ptr,Uchar ddram);    /*显字符串函数*/
  
    void Display(Uchar *ptr,Uchar ddram)
{

    Uchar l,il,x;
   
    int lie,hang;
    
    
    l=0;
    if(ddram<0x88)
    { hang=0; }   /*定位行地址:第一行*/
    else if(ddram<0x90)
    { hang=2; }   /*定位行地址:第三行*/
        else if(ddram<0x98)
    { hang=1;}   /*定位行地址:第二行*/
        else  { hang=2; }   /*定位行地址:第四行*/

        lie=0xf&ddram; /*定义列地址*/
        if(lie>0x07)
        {lie=lie-0x08;}
        x=lie*2;
        Write_command(ddram,0);/*定位显示起始地址*/
        while ( (ptr[l])!='\0' )
        { l++; }
        
        for(il=0;il<l;il++)
    	{ 
           Write_data(ptr[il]); /*输出单个字符*/
           x++;
           if(x==0x10)
           { x=0;
             hang++;
             switch(hang)
        	 { 
               case 0:Write_command(0x80,0);break;
               case 1:Write_command(0x90,0);break;
               case 2:Write_command(0x88,0);break;
               case 3:Write_command(0x98,0);break;
        	 }

             if(hang>3)
             {Write_command(0x80,0);
             hang=0;
        	 }
    		 
          }

    		
    	}
    	
    }


    /*主函数开始*/

  main()

{
    init();
    Display(STR1,0x80);  //上面一行显示一个预定的字符串
    Display(STR3,0x88);
    
    Delayus(200);
    Write_command(0x9c,0);//将光标移动0x9c
    Write_command(0x0f,0);//将光标处反白闪烁
    // Write_command(0x80,0); //进入睡眠状态
    // Delayus(200);
    // Write_command(0x0C,0); //唤醒
    while(1)
    {;}
    
}


/*    主函数结束**/

⌨️ 快捷键说明

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