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

📄 main.c

📁 使用AVR单片机OCMJ4X8C液晶驱动
💻 C
字号:
/*************************************8M晶振******************/
#include <iom16v.h>
#include <macros.h>
//#include <slavr.h>

#define uint  unsigned int
#define uchar unsigned char
#define x1    0x80                    //DDRAM上半屏起始地址
#define x2    0x88                    //DDRAM下半屏起始地址
#define y     0x80
#define comm  0                 
#define dat   1

#define clr_cs   asm("cbi 0x18,4")    //嵌入汇编,定义PB口的第四位输出低电平
#define sbi_cs   asm("sbi 0x18,4")    //嵌入汇编,定义PB口的第四位输出高电平
#define clr_std  asm("cbi 0x18,5")
#define sbi_std  asm("sbi 0x18,5")
#define clr_sclk asm("cbi 0x18,6")
#define sbi_sclk asm("sbi 0x18,6")
                
void wr_lcd (uchar dat_comm,uchar content);  //调用函数声明
void delay (uint us);
uchar tab1[]={
"本系列中文模块内"
"任意位置反白显示"
"置二级字库,可在"
"使用更方便更灵活"
};

uchar tab31[]={
"金鹏科技有限公司"
"Golden Palm TECH"
}; 
/*********************定义图像数据*************************/ 
uchar  tab32[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03,0xFE,0x00,
0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F,0xFF,0xC0,
0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C,0x01,0xE0,
0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF,0xFC,0x60,
0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE,0x0F,0x30,
0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF,0xF1,0x90,
0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF,0xFC,0x90,
0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF,0xFC,0xD0,
0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF,0xFE,0x50,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF,0xFE,0x90,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF,0xFE,0x80,
0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF,0xBA,0x00,
0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF,0xB8,0x00,
0x00,0xC1,0xC0,0x3F,0xFC,0x00,0x01,0x01,0xE0,0x40,0x00,0xFF,0xFF,0xDF,0xB0,0x00,
0x00,0x81,0xC0,0x3F,0xCE,0x00,0x00,0x81,0xE0,0x80,0x00,0x7F,0xFF,0xDF,0xA0,0x00,
0x00,0x81,0x80,0x1D,0xCF,0x00,0x00,0x41,0xE1,0x00,0x00,0x3F,0xFF,0x9B,0x00,0x00,
0x01,0x83,0x80,0x1F,0xC7,0x80,0x00,0x21,0xE2,0x00,0x00,0x1F,0xFD,0xB6,0x00,0x00,
0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20,0x00,0x00,
0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00,0x00,0x00,
0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00,0x00,0x00,
0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,
0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00,0x00,0x00,
0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x38,0x00,0x00,0x77,0x76,0x47,0x54,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

void init_lcd (void)
  {
  //sbi_rst;
  //clr_psb;             //psb置高为串行数据传输方式
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  delay (100);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
  }
/*---------------显示汉字或字符----------------*/
void chn_disp (uchar *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]);
    }
  }
/*-----------上半屏显示汉字或字符------------*/
void chn_disp1 (uchar *chn)
  {
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  j=0;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
  wr_lcd (comm,0x90);
  j=1;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
  }
/*-------------下半屏显示图形--------------*/
void img_disp1 (uchar *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 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,y+j*2);
        wr_lcd (comm,x+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,y+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);
  }
/*-----------------------------------------------*/
//当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);
  }
/*--------------清DDRAM------------------*/
void clrram (void)
  {
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
  delay (1500);      //串行通信设1500的延时
  }


/*----------------写数据到DDRAM-------------------*/
void wr_lcd (uchar dat_comm,uchar content)
  {
  uchar a,i,j;
  a=content;
  sbi_cs;
  clr_sclk;
  sbi_std; 
  for(i=0;i<5;i++)
    {
    sbi_sclk; 
    clr_sclk;
    }
  clr_std;
  sbi_sclk;
  clr_sclk; 
  if(dat_comm)
    sbi_std; 
  else
    clr_std;    
  sbi_sclk;  
  clr_sclk;
  clr_std;
  sbi_sclk;
  clr_sclk; 
  for(j=0;j<2;j++)
    {
    for(i=0;i<4;i++)
      {
	  if(a&0x80) sbi_std;
	    else clr_std;
	  a<<=1;
      sbi_sclk;
      clr_sclk;
      }
    clr_std;
    for(i=0;i<4;i++)
      {
      sbi_sclk;
      clr_sclk;
      }
    }
  }
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 main ()
  {
  DDRB=0xff;             //PB口定义为输出
  delay1 (8000);
  init_lcd ();           //初始化LCD
  delay1 (8000);
  while (1)
  {
    lat_disp (0x00,0x00);  //写点阵
    chn_disp (tab1);       //写汉字
	delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);
    con_disp (0xff,0xff,0x8c,0x80,2,16);    //显示反白
    delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);
    clrram();              //清屏
    lat_disp (0xcc,0xcc);  //写点阵
    delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);
    lat_disp (0x00,0x00);  //写点阵
    chn_disp1 (tab31);     //写汉字
    img_disp1 (tab32);     //写图行
    delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);
    clrram();
    lat_disp (0xff,0x00);
    delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);delay1 (8000);
    }
  }

⌨️ 快捷键说明

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