nios2lcd.txt

来自「这是niosⅡ环境下用来控制lcd的程序代码」· 文本 代码 · 共 107 行

TXT
107
字号
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
#include "lcd_display.h"

#define char8 unsigned char
#define int16 unsigned int
#define int32 unsigned long 


/****************************/
//     delay                    
/****************************/
void delay(int32 i)
{
   while(i!=0)
     i--;  
}

/****************************/
//     delay 3s                    
/****************************/
void delay_3s()
{
   char8 i=0;
   while(i<100)
   {
    delay(50000);
    i++;
   }      
}

/****************************/
/*    read lcd status       */
/****************************/
char8 read_status(void)
{
   char8 i;
   IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DATA_BASE, 0);    //pio set to input
   IOWR_ALTERA_AVALON_PIO_DATA(LCD_DIR_BASE,0);           //LCD_DIR=0,b to a
   delay(10);
   IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);            //LCD_CD=1
   delay(10);
   IOWR_ALTERA_AVALON_PIO_DATA(LCD_RD_N_BASE,0);          //LCD_RD_N=0
   delay(10);
   i=IORD_ALTERA_AVALON_PIO_DATA(LCD_DATA_BASE);          //status byte
   delay(10);
   IOWR_ALTERA_AVALON_PIO_DATA(LCD_RD_N_BASE,1);          //LCD_RD_N=0
 
   return(i);  
}

/****************************/
/*    read lcd status0 1       */
/****************************/
void st01(void)
{
   while((read_status()&0x03)!=0x03)
   ;  
}

/****************************/
/*    read lcd status3      */
/****************************/
void st3(void)
{
   while((read_status()&0x08)!=0x08)
   ;  
}

/****************************/
//     write data to lcd      
/****************************/
void wr_data(char8 i)
{
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_DIR_BASE,1);
  IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DATA_BASE, 0xff);  //pio set to output
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,0);             //LCD_CD=0
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_DATA_BASE,i);           //write data
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_N_BASE,0);           //LCD_WE=0
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_N_BASE,1);           //LCD_WE=1
}

/****************************/
//     write command to lcd      
/****************************/
void wr_cmd(char8 i)
{
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_DIR_BASE,1);
  IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DATA_BASE, 0xff);  //pio set to output
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_CD_BASE,1);             //LCD_CD=0
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_DATA_BASE,i);           //write data
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_N_BASE,0);           //LCD_WE=0
  delay(10);
  IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_N_BASE,1);           //LCD_WE=1
}

⌨️ 快捷键说明

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