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

📄 main.c

📁 通过实例实践LCD 驱动显示(以128DI0 为例)
💻 C
字号:
#include "reg51.h"
/*****************************************************************************
* 文件说明
******************************************************************************
创 建 人:杨宏伟
修 改 人:杨宏伟
创建日期:2003-10-19
最后更新:2004-01-01
描    述:FOR 128DI0,EM65565,8080,并行
*****************************************************************************/
#define  DELAY_TIME  1000   // 定义每幅显示画面切换的时间常数,可根据需要更改


/*****************************************************************************
* 接口定义
******************************************************************************/
sbit  CS1 = P3^5;         // SELECT CHIP
sbit  RES = P3^4;
sbit  DC1 = P3^3;
sbit  WR1 = P3^1;         // 8080:/WR;  6800:R/W 
sbit  RD1 = P3^0;         // 8080:/RD;  6800:E
sbit  MI =  P3^7;         // SELECT 8080 OR 6800


/******************************************************************************
* 函数声明及实现
*******************************************************************************/
void delay(unsigned int n)             
{
  unsigned int i,j;

  for (i=0;i<n;i++)
    for (j=0;j<350;j++)

    {;}
}

void data_out(unsigned char i)
{
    //8080 interface

    CS1  = 0;
    WR1 = 0;
	DC1   = 1;
	P1  = i;
	WR1 = 1;
	CS1 = 1;

}
void comm_out(unsigned char i)
{

    //8080 interface

    CS1  = 0;
	DC1 =0;
    WR1 = 0;
	P1  = i;
	WR1 = 1;
	CS1 = 1;

}


void selectSeries(unsigned char i)
{

   switch(i)
   {
      case 0:
            MI   = 0;//SELECT  8080
            RD1  = 1;
            WR1  = 1;
            break;
      case 1:
            MI   = 1;  //SELECT  6800
            RD1  = 0;
            WR1  = 0;
            break;
      default:
            ;

   }
}

void reset(void)
{

    RES  = 0;
    delay(100);
    RES  = 1;
    delay(100);

}



void ini_lcd(void)
{
    comm_out(0xA0);// ADC select
    comm_out(0xA6);// Sets the LCD display normal/reverse
    comm_out(0xA2);// Sets the LCD drive voltage bias ratio  1/9
    comm_out(0x2F);// Power control set
    comm_out(0x24);// V0 Voltage Regulator Internal Resistor Ratio Set  
    comm_out(0x81);// Electronic volume mode set
    comm_out(0x29);// 3F
    comm_out(0xAF);// display on
}




void setPageAddress(unsigned char i)
{
    comm_out(0xb0+i);
}


void setColAddress(unsigned char i)
{


    if(i<=16)
    {
         comm_out(0x00+i);
         comm_out(0x10);
    }
    else
    {
         comm_out(0x00+i%16);
         comm_out(0x10+i/16);
    }

}


void dispData(unsigned char s_page,e_page,s_col,e_col,unsigned char dispdata,unsigned char dly)
{
 	unsigned char  i,j,page_num,col_num;
 	page_num = e_page - s_page+1;
 	col_num  = e_col  - s_col+1;
	
	for (i=s_page;i<(s_page+page_num);i++ )
	{
            setPageAddress(i);
            setColAddress(s_col);

	        for(j=0;j<col_num;j++)
            {
 	            data_out(dispdata);
		        delay(dly);
            }
 	}

}



/*******************************************************************************
* 主程序
*******************************************************************************/
void main(void)
{


	  selectSeries(0);   // 选择8080时序
	  reset();          

	  CS1   = 0;         // 片选有效
	
	  ini_lcd();	    
	  while(1)
	  {

		
		  
		   dispData(0,8,0,127,0xff,0);  //全显
		   delay(DELAY_TIME);
		
		   dispData(0,7,0,127,0xaa,0);  //隔行
		   delay(DELAY_TIME);

		   dispData(0,8,0,127,0x00,0);  //清屏
		   delay(DELAY_TIME);

		
	  }

}



/******************************************************************************
**                            文件结束
*******************************************************************************/

⌨️ 快捷键说明

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