SOPC配置为经济型nios ii core,4k片上rom(放程序),4k片上ram(放数据),一个8位的输出io:lcd_d,3个一位的输出io,分别为e,rs,rw。
代码已在硬件平台上测试通过。
nios ii源码如下:
/********************************************************
* project name:lcd1602_nios
* designer:kang
* date:2010-10-19
* version:v1.00
* ******************************************************/
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
//延时函数
void delay_ms(alt_u8 ms)
{
alt_u16 i;
while(ms--)
for(i=0;i<1000;i++);
}
//lcd写指令函数
void lcd_wcmd(unsigned char cmd)
{
alt_u16 i;
IOWR_ALTERA_AVALON_PIO_DATA(RS_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(RW_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_D_BASE,cmd);
for(i=0;i<20;i++);
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,1);
for(i=0;i<20;i++);
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,0);
}
//lcd写地址函数
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos|0x80);
}
//lcd写数据函数
void lcd_wdat(unsigned char dat)
{
alt_u16 i;
IOWR_ALTERA_AVALON_PIO_DATA(RS_BASE,1);
IOWR_ALTERA_AVALON_PIO_DATA(RW_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(LCD_D_BASE,dat);
for(i=0;i<20;i++);
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,1);
for(i=0;i<20;i++);
IOWR_ALTERA_AVALON_PIO_DATA(E_BASE,0);
}
//lcd显示函数
//入口:字符串和字符数量
void lcd_disp(alt_u8 a[],alt_u8 i)
{alt_u8 j;
for (j=0;j<i;j++)
{lcd_wdat(a[j]);
delay_ms(1);
}
}
//lcd初始化函数
void lcd_init()
{
lcd_wcmd(0x38);
delay_ms(15);
lcd_wcmd(0x0c);
delay_ms(1);
lcd_wcmd(0x06);
delay_ms(1);
lcd_wcmd(0x01);
delay_ms(15);
}
//主函数
int alt_main(void)
{
lcd_init();
lcd_pos(0x80);
lcd_disp("lcd1602 test!!",14);
lcd_pos(0xc0);
lcd_disp("made by kang",12);
while(1)
{
;
}
}
文章评论(0条评论)
登录后参与讨论