lcd_test.c

来自「c8051f020模块.rar」· C语言 代码 · 共 233 行

C
233
字号
#include "C8051F020.h"


#define uint  unsigned int
#define uchar unsigned char
#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1
/*
sbit cs   = P3^0;
sbit std  = P3^1;
sbit sclk = P3^2;
*/


sbit cs   = P0^0;
sbit std  = P0^1;
sbit sclk = P0^2;  
sbit rst=P3^5;


uchar code tab5[]={0x02,0x01,0x05,0x01,0x05,0x01,0x05,0x03,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x80,0x40,0x00,0x20,0x00,0x40,0x00
};

void delay (uint us)   //延时
{
  while(us--);
}

void delay1 (uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<15;j++)
  delay(1);
}

void wr_lcd(uchar dat_comm,uchar content)//定义读、写数据和操作方式
{
  uchar a,i,j;
  delay(600);
  a=content;
  cs=1;
  sclk=0;
  std=1;
  for(i=0;i<5;i++)
  {
    sclk=1;
    sclk=0;
  }
  std=0;
  sclk=1;
  sclk=0;
  if(dat_comm)
    std=1;   //data
  else
    std=0;   //command
  sclk=1;
  sclk=0;
  std=0;
  sclk=1;
  sclk=0;
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
      a=a<<1;
      std=CY;
      sclk=1;
      sclk=0;
    }
    std=0;
    for(i=0;i<4;i++)
    {
      sclk=1;
      sclk=0;
    }
  }
}


void Init_Clock(void)//配置系统时钟
{
	int n = 0;
	OSCXCN = 0x67;
	for (n = 0; n < 255; n++) ;
	while ( (OSCXCN & 0x80) == 0 );
	OSCICN = 0x0C;
	
}

void Init_lcd(void)//液晶初始化
{
   rst=1;
//  psb=0;
  wr_lcd(comm,0x30);  //30---基本指令动作   
  wr_lcd(comm,0x01);  //清屏,地址指针指向00H
  delay (100);
  wr_lcd(comm,0x06);  //光标的移动方向
  wr_lcd(comm,0x0b);  //开显示,关游标
}


void Init_Port(void)//端口配置
{
   //交叉开关配置
	XBR0 = 0x00;
	XBR1 = 0x00;
	XBR2 = 0x40;

	P0MDOUT = 0xff;

}


/*-----------------------------------------------*/
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
  uchar i,j;
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y0+j);
      wr_lcd (comm,x0+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,data1);
      wr_lcd (dat,data2);
    }
  }
  wr_lcd (comm,0x36);
}



void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
  delay (180);
}


/*--------------显示点阵----------------*/
void lat_disp (uchar data1,uchar data2)
{
  uchar i,j,k,x;
  x=x1;
  for(k=0;k<2;k++)
  {
    for(j=0;j<16;j++)
    {
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,0x80+j*2);
        wr_lcd (comm,0x80+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data1);
        wr_lcd (dat,data1);
      }
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,0x80+j*2+1);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data2);
        wr_lcd (dat,data2);
      }
    }
    x=x2;
  }
  wr_lcd (comm,0x36);
}

/*-------------下半屏显示图形--------------*/
void img_disp1 (uchar code *img)
{
  uchar i,j;
  for(j=0;j<32;j++)
  {
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j);
      wr_lcd (comm,x2+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,img[j*16+i*2]);
      wr_lcd (dat,img[j*16+i*2+1]);
    }
  }
  wr_lcd (comm,0x36);
}



void main(void)
{
  WDTCN = 0xDE;   // 关闭 WDT
  WDTCN = 0xAD;
  Init_Clock();
  Init_Port();
  Init_lcd();

  while(1)
  {	 
    //clrram();
  	//wr_lcd(comm,0x34);
  	//wr_lcd(comm,0x80+31);
  	//wr_lcd(comm,0x80+10);
	wr_lcd(comm,0x30);
	wr_lcd(comm,0x80);
	wr_lcd(comm,0x89);
  	wr_lcd(dat,0x18);
	wr_lcd(dat,0x18);
   // wr_lcd(comm,0x36);
	//con_disp(0xff,0xff,0x80,0x80,1,1);
	// 
	//lat_disp(0xff,0xff);
	//img_disp1(tab5);
	delay1(1000);
  }


} 

⌨️ 快捷键说明

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