s51.c

来自「基于51单片机的12232液晶显示源程序」· C语言 代码 · 共 183 行

C
183
字号
/*******************************************************************
          compiler:	 keil c51
          controller:AT89S51/52    11.0592M晶振
程序功能:122*32点阵式LCD显示 测试实验
版权所有:www.mcudriver.cn
********************************************************************/
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <REG51.H>

/*************************液晶显示地址定义*************************/
sbit LCD_Reset=P1^1;

sbit LCD_RS=P1^3;
sbit LCD_RW=P1^4;
sbit LCD_E1=P1^0;
sbit LCD_E2=P2^2;

unsigned char character[8]={0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00};//"2"

void pause(void)
{
  unsigned char ptime;
  for(ptime=0;ptime<8;ptime++);
}

void delay(unsigned char tt)
{
  unsigned char tlime;
  unsigned int ptime;
  for(tlime=0;tlime<tt;tlime++)
  {
    for(ptime=0;ptime<1200;ptime++);
  }
}

//左半屏,送命令字函数
void send_dat_left(unsigned char d) 
{
  	LCD_RW=0;//R/W=0
  	LCD_RS=0;//D/I=0

    //LCD_E1=0;
	pause();pause();
  	LCD_E1=1;
  	P3=d;
	pause();pause();pause();pause();
  	LCD_E1=0;pause();
	LCD_E1=1;

}

//左半屏,送数显示函数
void send_dat_disp_left(unsigned char d)
{
  	LCD_RW=0;
  	LCD_RS=1;

  	//LCD_E1=0;
	pause();pause();
  	LCD_E1=1;
    P3=d;
	pause();pause();
	LCD_E1=0; pause();
	LCD_E1=1;
}

//右半屏,送命令字函数
void send_dat_right(unsigned char d)
{
  	LCD_RW=0;//R/W=0
  	LCD_RS=0;//D/I=0

  	LCD_E2=0;
	pause();pause();pause();pause();
  	LCD_E2=1;
  	P3=d;
	pause();pause();pause();pause();
  	LCD_E2=0;pause();pause();pause();LCD_E2=1;

}

//右半屏,送数显示函数
void send_dat_disp_right(unsigned char d)
{
  	LCD_RW=0;
  	LCD_RS=1;

  	LCD_E2=0;
	pause();pause();pause();pause();
  	LCD_E2=1;
    P3=d;
	pause();pause();pause();pause();
	LCD_E2=0;pause();pause();pause();LCD_E2=1;
}


unsigned char CMDCODE,DAT;
void sed1520_init(void)
{
	CMDCODE=0xE2;send_dat_left(CMDCODE);send_dat_right(CMDCODE); //RESET
	// CMDCODE=0xA4;printmcmd();printscmd(); //NORMAL DRIVE
	CMDCODE=0xA9;send_dat_left(CMDCODE);send_dat_right(CMDCODE); // DUTY=1/32
	// CMDCODE=0xA0;printmcmd();printscmd(CMDCODE); //select ADC
	CMDCODE=0xD0;send_dat_left(CMDCODE);send_dat_right(CMDCODE); //START LINE
	CMDCODE=0xAF;send_dat_left(CMDCODE);send_dat_right(CMDCODE); //DISP ON
}


void led_disptl(unsigned char *p)
{ 
    unsigned char i;
  	unsigned char ch;
    for(i=0;i<8;i++) {
       ch=*p; 
       p++;
       send_dat_disp_left(ch);
	   send_dat_disp_right(ch);
	}
}


//122*32液晶屏测试函数:
void lcd122x32test(void)
{
	unsigned int i,j;
	pause();pause();pause();
	
	//满屏幕显示,左半屏显示点,右半屏显示横杠
	for(i=0;i<4;i++)
	{
	  CMDCODE=0xB8|i;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  CMDCODE=0x00;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  for(j=0;j<122;j++) {CMDCODE=j;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  DAT=0x55;  send_dat_disp_left(DAT);send_dat_disp_right(DAT);}
	}
	
	for(i=0;i<4;i++)
	{
	  CMDCODE=0xB8|i;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  CMDCODE=0x00;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  for(j=0;j<61;j=j+2) {CMDCODE=j;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  DAT=0xff;  send_dat_disp_left(DAT);send_dat_disp_right(DAT);
	  DAT=0x00;  send_dat_disp_left(DAT);send_dat_disp_right(DAT);}
	}
		
	for(i=0;i<4;i++)
	{
	  CMDCODE=0xB8|i;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  CMDCODE=0x00;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  for(j=0;j<61;j=j+2) {CMDCODE=j;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
	  DAT=0x55;  send_dat_disp_left(DAT);send_dat_disp_right(DAT);
	  DAT=0xaa;  send_dat_disp_left(DAT);send_dat_disp_right(DAT);}
	}
		
	//显示4个字符2:
	CMDCODE=0xB8|2;send_dat_left(CMDCODE);
    CMDCODE=0x00;send_dat_left(CMDCODE);  	
    led_disptl(character);  led_disptl(character);
    led_disptl(character);  led_disptl(character);
}

void main(void)
{  
  delay(10); 
  LCD_Reset=0;
  delay(40);    
  LCD_Reset=1;   delay(20); 

  sed1520_init();
  delay(10);
  lcd122x32test();

  while(1)
  {

  }
   

}

⌨️ 快捷键说明

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