Board logo

标题: [讨论]lcd.c 程序的问题 [打印本页]

作者: yichangwen    时间: 2006-7-19 13:39     标题: [讨论]lcd.c 程序的问题

#include <unistd.h>
#include <string.h>
#include <io.h>
#include "system.h"
#include "LCD.h"
//-------------------------------------------------------------------------
void LCD_Init()
{
  lcd_write_cmd(LCD_16207_0_BASE,0x38);
  usleep(2000);
  lcd_write_cmd(LCD_16207_0_BASE,0x0C);
  usleep(2000);
  lcd_write_cmd(LCD_16207_0_BASE,0x01);
  usleep(2000);
  lcd_write_cmd(LCD_16207_0_BASE,0x06);
  usleep(2000);
  lcd_write_cmd(LCD_16207_0_BASE,0x80);
  usleep(2000);
}
//-------------------------------------------------------------------------
void LCD_Show_Text(char* Text)
{
  int i;
  for(i=0;i<strlen(Text);i++)
  {
    lcd_write_data(LCD_16207_0_BASE,Text);
    usleep(2000);
  }
}
//-------------------------------------------------------------------------
void LCD_Line2()
{
  lcd_write_cmd(LCD_16207_0_BASE,0xC0);
  usleep(2000);
}
//-------------------------------------------------------------------------
void LCD_Test()
{
  char Text1[16] = "<NIOS II on UP4>";
  char Text2[16] = "Nice to See You!";
  //  Initial LCD
  LCD_Init();
  //  Show Text to LCD
  LCD_Show_Text(Text1);
  //  Change Line2
  LCD_Line2();
  //  Show Text to LCD
  LCD_Show_Text(Text2);
}
//-------------------------------------------------------------------------


这是de2板子上自带的例子程序,我可以把它下载到板子上去,而且正常显示,但是,当我把


  char Text1[16] = "<NIOS II on UP4>";
  char Text2[16] = "Nice to See You!";中的内容改掉后(比如该为nice)就显示不正常,好象是Text中的内容必须是16个字符,但是我想自显示几个字符,怎么办?难道一定要用空格符补充到16个字符吗?再有NIOS2中的C函数库是怎么调用的,谁有着方面的资料,能共享一下吗?


望各位高手赐教!!!



 


 


作者: kzw    时间: 2006-7-19 15:08

这个我没有用过,如果一定需要是16个字符的话,可以用空格代替。
你所谓的c的库函数是nios2的hal还是真正的c的库函数。
作者: yichangwen    时间: 2006-7-19 21:15

谢谢版主的答复,我想问的是nios的hal,比如这个程序里的system.h,是在你做nios系统编译的时候系统自动生成的,LCD.H是要自己写的,而unistd.h,string.h,io.h好象是系统自带的(我的理解),但是我想问的是在自己写LCD.H的时候为什么这么写:
#define lcd_write_cmd(base, data) IOWR(base, 0, data)
#define lcd_read_cmd(base) IORD(base, 1)
#define lcd_write_data(base, data) IOWR(base, 2, data)
#define lcd_read_data(base) IORD(base, 3)
以上的定义是DE2例子中的写法,IOWR(),IORD()这些内部函数是怎么定义的,我找了一下,在
io.h中IOWR()是这样定义的,
#define IOWR(BASE, REGNUM, DATA) \
__builtin_stwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)), (DATA))
但是这也是把一个函数定义为另一个函数,我还是不知道函数的作用,难道IOWR(base, 0, data)的作用就是给液晶写命令吗?而IOWR(base, 2, data)就是写数据吗?如果我控制的不是液晶,也能用上面的这些函数进行控制吗?
作者: huangyou    时间: 2006-7-20 11:42

IORD和IOWR是altera提供的端口读写操作,
只要有端口的地方都可以使用它
更广泛的讲他们应该是地址读写操作,
端口反映出来的也是一个具体的地址,寄存器也是,memory空间也是
所有的跟地址相关的读写操作都可以用
作者: yichangwen    时间: 2006-7-20 17:19

谢谢高手答复,不过ALTERA提供的函数还真不少,我要把他们都弄懂,还真的得下翻工夫了.
作者: reservior    时间: 2006-7-21 00:32

有那为高手能帮我解释一下有关LCD液晶显示的关键函数吗????[em12]
作者: yichangwen    时间: 2006-7-22 17:05

刚有些突破,有遇到问题了,上面的IOWR(base, 0, data)这些函数里的0,1,2,3,也就是寄存器的偏移地址是怎么确定的,为什么在写的时候用0,读的时候用1呢?我试着自己改也一下头文件,在给七段数码管写数据的时候只能用0这个偏移地址,不然数据就不能在数码管上显示?
但是LED,SEVEN_SEG,BUTTONS,LCD这些IO口的寄存器是怎么分配的,比如要同时显示不同的数据到LCD,LED,SEVEN_SEG,偏移地址怎么选,我自己编的程序显示同时显示时有冲突<好象是寄存器不对>.




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0