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

📄 lcm046.c

📁 此程序为单片机89S52液晶显示模块显示程序.具体解释在程序中有.
💻 C
字号:
#include <reg51.H>
/*cs=p0.7   WRPort=p0.5    data=p0.4*/
sbit CS=P0^7 ;
sbit WRPort=P0^5;
sbit DA=P0^4;
///////////////////////////////////////////////////////////
void timedelay(unsigned int time);
void WRPortcom(unsigned char *p);
void WRPortdd(unsigned char *p);
void WRPortda(unsigned char *p);
void walp(unsigned char *p);
void clearLCD();
void Set1(unsigned char wei,unsigned char n);
void SetNum(unsigned int num);
///////////////////////////////////////////////////////////
unsigned char command;
unsigned char lcdaddr;
unsigned char lcddata;
const unsigned char nums[10]={0xEB,0x60,0xAD,0x8F,0x4E,0xC7,0xE7,0x8A,0xEF,0xCF};    // 0--9 数字对应表
///////////////////////////////////////////////////////////
void main(void) 
{
    unsigned char *p;
    p=&command;
    CS=1;
    WRPort=1;
    DA=1;
    timedelay(500);

    *p=0x29;    WRPortcom(p);   //initialize
    *p=0x18;    WRPortcom(p);	//rc
    *p=0x01;    WRPortcom(p);   //sys en
    *p=0x03;    WRPortcom(p);   //lcd on 
    *p=0x05;    WRPortcom(p);   //close WDT

    clearLCD();

    while(1)
      {
        SetNum(1234);			
      }        
}
///////////////////////////////////////////////////////////
//          基本硬件操作                                ///
///////////////////////////////////////////////////////////

void WRPortcom(unsigned char *p)
{   
    unsigned char i;
    CS=1; timedelay(3);   CS=0; timedelay(3);
    WRPort=0; timedelay(3);   DA=1; timedelay(3);   WRPort=1; timedelay(3);
    WRPort=0; timedelay(3);   DA=0; timedelay(3);   WRPort=1; timedelay(3);
    WRPort=0; timedelay(3);   DA=0; timedelay(3);   WRPort=1; timedelay(3);

    for(i=8;i>0;i--)
    {
     timedelay(3);
     if(*p&0x80)	
      {
        DA=1;timedelay(3);
      }	
     else 		
      {
        DA=0;timedelay(3);
      }
        WRPort=0;timedelay(5);
        WRPort=1;timedelay(5);
        *p=(*p)<<1;	
    }

    DA=0;timedelay(3);
        WRPort=0;timedelay(5);
    WRPort=1;timedelay(5);
    CS=1;timedelay(3);
    DA=1;timedelay(3);
}
///////////////////////////////////////////////////////////
void WRPortdd(unsigned char *p)
{   
    unsigned char i;
    CS=1; timedelay(10);  CS=0; timedelay(10);
    WRPort=0; timedelay(3);   DA=1; timedelay(3);   WRPort=1; timedelay(3);
    WRPort=0; timedelay(3);   DA=0; timedelay(3);   WRPort=1; timedelay(3);
    WRPort=0; timedelay(3);   DA=1; timedelay(3);   WRPort=1; timedelay(3);
    WRPort=0; timedelay(3);   DA=0; timedelay(3);   WRPort=1; timedelay(3);

    for(i=5;i>0;i--)
    {
      if(*p&0x80)	
      {
        DA=1;timedelay(3);
      }	
      else 		
      { 
        DA=0;timedelay(3);
      }
      WRPort=0;timedelay(5);
      WRPort=1;timedelay(5);
      *p=(*p)<<1;	
    }


}
///////////////////////////////////////////////////////////
void WRPortda(unsigned char *p)
{
    unsigned char i;
    for(i=4;i>0;i--)
       {

          if(*p&0x01)	
    	{
          DA=1;timedelay(3);
    	}	
          else 		
    	{
          DA=0;timedelay(3);
    	}
          WRPort=0;timedelay(5);
          WRPort=1;timedelay(5);
          *p=(*p)>>1;	
       }
}
///////////////////////////////////////////////////////////
void timedelay(unsigned int s)          // s*10 (us)
{
   int i,j;
   for(i=0;i<10;i++)
   for (j=0;j<s;j++);
}
///////////////////////////////////////////////////////////
void clearLCD()                         //清LCD屏
{
    unsigned char i;
    CS=1; timedelay(3);   CS=0; timedelay(3);
    lcdaddr=0x00;                   //地址开始

    for (i=0;i<8;i++)
    {
      lcddata=0x00; 	
      WRPortdd(&lcdaddr);   			
      WRPortda(&lcddata);
      WRPort=1;
      DA=1;
      CS=1;                       //写一个地址结束(一条数据4位)
      timedelay(10);
          lcdaddr=lcdaddr+0x08*(i+1);   //清屏data
    }
}



///////////////////////////////////////////////////////////
//              数据显示                                 //
///////////////////////////////////////////////////////////
void Set1(unsigned char wei,unsigned char n)
{
     unsigned char i;
     CS=1;    timedelay(3);
     CS=0;    timedelay(3);
         lcdaddr=0x00+(wei-1)*2*8;           //取前5位作为A0--A4
     lcddata=nums[n];
     WRPortdd(&lcdaddr);
    
     for(i=8;i>0;i--)
          {
         if(lcddata&0x80)	
          {
            DA=1;timedelay(3);
          }	
         else 		
          {
            DA=0;timedelay(3);
          }
         WRPort=0;timedelay(5);
         WRPort=1;timedelay(5);
         lcddata=(lcddata)<<1;	
          }
}
///////////////////////////////////////////////////////////
void SetNum(unsigned int num)
{   
    Set1( 1,(num/1000) );
    Set1( 2,(num/100)%10 );
    Set1( 3,(num/10)%10 );
    Set1( 4,num%10 );	
}



⌨️ 快捷键说明

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