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

📄 st7920drive.c

📁 ST7920显示驱动程序
💻 C
字号:
/******************************************************************************
模块名称:st7920 并行方式驱动12864液晶驱动
功能概要:st7920显示驱动
液晶型号:       生产厂家:        驱动芯片:st7920
******************************************************************************/
#include <reg52.h>
#include <absacc.h>
#define uint  unsigned int
#define uchar unsigned char
#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1
#define ADC   0x7FFF

unsigned char bdata flag;
sbit chang_over=flag^2;
static unsigned char data a[8];

sbit RS = P3^1;   //H=data; L="command";
sbit RW = P3^4;   //H=read; L="write";
sbit  E = P3^5;   //input enable;
sbit PSB= P1^3;   //H=并口; L="串口";
sbit RST= P3^0;   //Reset Signal 低电平有效

sbit busy=P2^7;   //lcd busy bit

void wr_lcd (uchar dat_comm,uchar content);
void chk_busy (void);
void delay (uint us);


uchar code tab1[]=
{
"  北京理工大学  "       //0x80
"  学生毕业设计  "       //0x90
"  应用物理系    "       //0x88
"  测试程序      "       //0x98
};
uchar code tab2[]=
{
"  交流电桥平衡  "       //0x80
"                "       //0x90
"  指示仪的设计  "       //0x88
"    二零零八    "       //0x98
};

uchar code tab3[]=
{
"频率  :0.000 kHz"       //0x80
"幅值1 :  0.00  V"       //0x90
"相位差: 00.00   "       //0x88
"幅值2 :  0.00  V"       //0x98
};

uchar code pinlv[]=   {"频率  :kHz"};
static unsigned char data p[3];

uchar code xiangwei[]={"相位差:"};
static unsigned char data x[3];

uchar code fudu1[]=   {"幅值1 :V"};
static unsigned char data f1[2];

uchar code fudu2[]=   {"幅值2 :V"};
static unsigned char data f2[4];

/******************************************************************************************
* 函数名称    :ADC转换子程序
* 功能描述    : 
* 修改说明    :
*****************************************************************************************/
unsigned char adc_change(void)
{
  unsigned char change_over;
   XBYTE[ADC]=0;
   do flag=P1;
   while(change_over==1);

   a[1]=XBYTE[ADC];

}

/******************************************************************************************
* 函数名称    :脉冲宽度测量
* 功能描述    : 
* 修改说明    :
*****************************************************************************************/



/******************************************************************************************
* 函数名称    :初始化液晶屏
* 功能描述    : 
* 修改说明    :
******************************************************************************************/
void init_lcd (void)
{
   RST = 1;
   PSB = 1;
   wr_lcd(comm,0x30);  /*30---基本指令动作*/   
   wr_lcd(comm,0x01);  /*清屏,地址指针指向00H*/
   wr_lcd(comm,0x06);  /*光标的移动方向*/
   wr_lcd(comm,0x0c);  /*开显示,关游标*/
}

/******************************************************************************************
* 函数名称    :chn_disp
* 功能描述    : 显示汉字或字符
* 修改说明    :
******************************************************************************************/
void chn_disp(uchar code *chn)
{
   uchar i,j;
   wr_lcd(comm,0x30);
   wr_lcd(comm,0x80);
   for(j=0;j<4;j++)
   {
     for(i=0;i<16;i++)
     wr_lcd(dat,chn[j*16+i]);
   }
}


/******************************************************************************************
* 函数名称    :clrram
* 功能描述    : 清DDRAM
* 修改说明    :
******************************************************************************************/
void clrram(void)
{
   wr_lcd(comm,0x30);
   wr_lcd(comm,0x01);
}

/******************************************************************************************
* 函数名称    :wr_lcd
* 功能描述    :通过dat和comm位判断写入指令还是数据 
* 修改说明    :
******************************************************************************************/
void wr_lcd(uchar dat_comm,uchar content)
{
   chk_busy ();
   if(dat_comm)
    {
     RS = 1;   //data
     RW = 0;   //write
    }
   else 
    {
     RS = 0;   //command
     RW = 0;   //write
    }
   P2=content;   //output data or comm
   E = 1;
   ;
   E = 0;
}
/******************************************************************************************
* 函数名称    :chk_busy
* 功能描述    :判忙
* 修改说明    :
******************************************************************************************/
void chk_busy(void)
{
   P2 = 0xff;
   RS = 0;
   RW = 1;
   E = 1;
   while(busy==1);
   E = 0;
}
/******************************************************************************************
* 函数名称    :
* 功能描述    : 
* 修改说明    :
******************************************************************************************/
void delay(uint us)   //delay time
{
   while(us--);
}


void delay2(unsigned char cnt)
 {
  unsigned char i;
  while(cnt--!=0)
  for(i=10;i!=0;i--);
 }




/******************************************************************************************
* 函数名称    :
* 功能描述    : 
* 修改说明    :
******************************************************************************************/
void delay1(uint ms)
{
   uint i,j;
   for(i=0;i<ms;i++)
   for(j=0;j<15;j++)
   delay(1);
}



/******************************************************************************************
* 函数名称    :
* 功能描述    : 
* 修改说明    :
******************************************************************************************/
void main()
{
   SP=0x5f;
   init_lcd();
  
    
     
	 chn_disp(tab1);
     delay1(5000);
     clrram();
     
     chn_disp(tab2);
     delay1(2000);
     clrram();
 
     chn_disp(tab3);
	 delay1(2000);
     clrram();

	wr_lcd(comm,0x34);
    delay(2);
    wr_lcd(comm,0x02);
    delay(2);
    wr_lcd(comm,0x30);
    wr_lcd(comm,0x01);


  
  
  p[0]=0x31;
  p[1]=0x32;
  p[2]=0x33;
  p[3]=0x34;


  x[0]=0x31;
  x[1]=0x32;
  x[2]=0x33;
  x[3]=0x34;

  f1[0]=0x31;
  f1[1]=0x32;
  f1[2]=0x33;

  f2[0]=0x31;
  f2[1]=0x32;
  f2[2]=0x33;
  
  for(;;)

 {int i;
 
  
  
  wr_lcd(comm,0x80);//第一行显示频率
  for(i=0;i<7;i++)
  {
  wr_lcd(dat,pinlv[i]);
  }
   wr_lcd(dat,p[3]);
   wr_lcd(dat,0x2E);//小数点
   wr_lcd(dat,p[2]);
   wr_lcd(dat,p[1]);
   wr_lcd(dat,p[0]);
   wr_lcd(dat,0x20);//空白
   wr_lcd(dat,pinlv[7]);
   wr_lcd(dat,pinlv[8]);
   wr_lcd(dat,pinlv[9]);//kHz
  
   
   wr_lcd(comm,0x90);//第二行显示相位
  for(i=0;i<7;i++)
  {
  wr_lcd(dat,xiangwei[i]);
  }
   wr_lcd(dat,0x20);
   wr_lcd(dat,x[3]);
   wr_lcd(dat,x[2]);
   wr_lcd(dat,0x2E);//小数点
   wr_lcd(dat,x[1]);
   wr_lcd(dat,x[0]);
  wr_lcd(dat,0x20);//空白
  wr_lcd(dat,0x20);//空白
  wr_lcd(dat,0x20);//空白

  wr_lcd(comm,0x88);//第三行显示幅度
  for(i=0;i<7;i++)
  {
  wr_lcd(dat,fudu1[i]);
  }
  wr_lcd(dat,0x20);
  wr_lcd(dat,0x20);
  wr_lcd(dat,f1[2]);
  wr_lcd(dat,0x2E);//小数点
  wr_lcd(dat,f1[1]);
  wr_lcd(dat,f1[0]);
  wr_lcd(dat,0x20);
  wr_lcd(dat,0x20);

  wr_lcd(dat,fudu1[7]);


  wr_lcd(comm,0x98);//同上
   for(i=0;i<7;i++)
  {
  wr_lcd(dat,fudu2[i]);
  }
  wr_lcd(dat,0x20);
  wr_lcd(dat,0x20);
  wr_lcd(dat,f2[2]);
  wr_lcd(dat,0x2E);//小数点
  wr_lcd(dat,f2[1]);
  wr_lcd(dat,f2[0]);
  wr_lcd(dat,0x20);
  wr_lcd(dat,0x20);

  wr_lcd(dat,fudu2[7]);
  
  }
  
  
  
 
  

  

   
}




⌨️ 快捷键说明

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