[求助] nios 中lcd的寄存器读写问题

eeleader   2010-8-2 10:02 楼主
请问一下,我的LCD有四个寄存器,如何对着四个寄存器读和写???
为什么我的程序调试出来的结果:是只能够显示出对应的颜色,无法出现在程序指定的地方。同一个程序运行两次,颜色没变,但是出现的位置好像是随机的。期待回答!!!!!!!!!!
这是我写的程序:
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "unistd.h"
#include "alt_types.h"

void X_ADDR(unsigned char x);
void Y_ADDR(unsigned char y);
void CMD(unsigned char cmd);
void DATA(unsigned char data);


int main()
{
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,1);
    IOWR_ALTERA_AVALON_PIO_DIRECTION(LCD_DATA_BASE,0xff);
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_RD_BASE,1);//RD始终在写的过程中置高
    unsigned char i, j;
    CMD(0x00);
    for(j=10;j<=50;j++)
    {
        X_ADDR(10);
        X_ADDR(0);
        Y_ADDR(j);
        for(i=10;i<=50;i++)
        DATA(0xe3);
    }
    while(1);
    return 0;   
}

/*****************对寄存器x的操作************************/
void X_ADDR(unsigned char x)
{
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_A1A0_BASE,0);  
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,0);      
     IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,0);     
     IOWR_ALTERA_AVALON_PIO_DATA(LCD_DATA_BASE, x);
     IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,1);
     IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,1);
     
}
/****************对寄存器y的操作******************************/
void Y_ADDR(unsigned char y)
{
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_A1A0_BASE,1);  
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,0);   
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,0);     
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_DATA_BASE, y);
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,1);
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,1);
}
/*******************对寄存器cmd的操作******************************/
void CMD(unsigned char cmd)
{
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_A1A0_BASE,2);   
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,0);
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,0);   
     IOWR_ALTERA_AVALON_PIO_DATA(LCD_DATA_BASE, cmd);
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,1);
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,1);
}
/*******************对寄存器data的操作*****************************/
void DATA(unsigned char data)
{
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_A1A0_BASE,3);   
    IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,0);  
      IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,0);     
      IOWR_ALTERA_AVALON_PIO_DATA(LCD_DATA_BASE,data);
      IOWR_ALTERA_AVALON_PIO_DATA(LCD_WR_BASE,1);
      IOWR_ALTERA_AVALON_PIO_DATA(LCD_CS_BASE,1);
}
一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!

回复评论 (1)

需要的太具体了,你需要把你需要驱动的LCD 给我们看看,让我们仔细了解一下你的使用背景。

点赞  2010-8-2 10:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复