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

📄 lcd.txt

📁 用sopc技术实现对128*64的lcd液晶显示。这里是它的程序。
💻 TXT
字号:
#include <string.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include "sys/alt_alarm.h"
#include "io.h"
#include "stdio.h"
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#define uint       unsigned int
#define uchar      unsigned char
#define disp_off   0x3e //关显示
#define disp_on    0x3f //开显示
#define disp_x     0xb8  //设置页地址
#define disp_z     0xc0   //设置显示起始行
#define disp_y     0x40   //设置列地址
#define comm       0    //指令
#define dat        1    //数据
char di;
char rw;
char e;
char cs1;
char cs2;
char data_ora;
uchar hz31[]={
/*--  文字:  W  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0xF8,0x00,0xC0,0x38,0xC0,0x00,0xF8,0x00,0x03,0x3C,0x03,0x00,0x03,0x3C,0x03,0x00};
//写数据或命令到LCD 
void wr_lcd (uchar dat_comm,uchar content)
{di=dat_comm;
IOWR_ALTERA_AVALON_PIO_DATA(RS_BASE,di);
  rw=0;
IOWR_ALTERA_AVALON_PIO_DATA(RW_BASE,rw);
  data_ora=content;
IOWR_ALTERA_AVALON_PIO_DATA(DB_BASE,data_ora);
  e=1;
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,e);
  e=0;
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,e);
}
//写点阵 
void lat_disp (uchar data1,uchar data2)
{uchar i,j;
 cs1=1;cs2=1;
 wr_lcd (comm,disp_on);
 for(j=0;j<8;j++)
  {wr_lcd (comm,disp_x+j);
   wr_lcd (comm,disp_z);
   wr_lcd (comm,disp_y);
    for(i=0;i<32;i++)
    {wr_lcd (dat,data1);
     wr_lcd (dat,data2);
    }
  }
}
//指定位置(x,y)显示row_xl行(每行row_yl个)汉字(大小8xl*yl) 
void chn_disp (uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,uchar  *chn)                                                                                                        
{uchar i,j,k,l,a;                                                                        
 wr_lcd (comm,disp_on);                                                                 
 for(l=0;l<row_xl;l++)                                                                  
  {
    for(k=0;k<row_yl;k++)
    {
      for(j=0;j<xl;j++)
      {
        wr_lcd (comm,disp_x+x+l*xl+j);
        wr_lcd (comm,disp_z);
        wr_lcd (comm,disp_y+y+k*yl);
        a=l*xl*yl*row_yl+k*xl*yl+j*yl;
        for(i=0;i<yl;i++)
          wr_lcd (dat,chn[a+i]);
      }
    }
  }
}
//初始化 
void init_lcd (void)
{ cs1=1;cs2=1;
IOWR_ALTERA_AVALON_PIO_DATA(CS1_BASE,cs1);
IOWR_ALTERA_AVALON_PIO_DATA(CS2_BASE,cs2);
  wr_lcd (comm,disp_off);
  wr_lcd (comm,disp_on);
}
//显示主程序 
void disp1 (void)
{ lat_disp(0x00,0x00);
  cs1=1;cs2=0;
IOWR_ALTERA_AVALON_PIO_DATA(CS1_BASE,cs1);
IOWR_ALTERA_AVALON_PIO_DATA(CS2_BASE,cs2);
  chn_disp (4,0,2,8,2,8,hz31);
}
//主程序
int alt_main ()
{
  init_lcd ();
  while(1)
  {disp1 ();
  }
}

⌨️ 快捷键说明

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