原创 nios2 用ip核开发1602液晶驱动

2009-7-15 13:07 4984 2 4 分类: FPGA/CPLD

本文主要讲述如何使用sopc_builder中的ip核开发驱动,一大大减小代码长度。如果你的实验板上没有sdram,而只能只用片上ram,这将是一个比较好的解决方案


010da38e-1eb7-499c-beb5-f0666b128a40.jpg


程序代码如下:


#include<system.h>
#include<altera_avalon_lcd_16207_regs.h>
#include<alt_types.h>


alt_u8 lcd_string1[] = "HB_XFU__ELC__LAB";
alt_u8 lcd_string2[] = "2009 xk";


void check_busy()                                             //读液晶的忙标志位并检测
{
    alt_u8 status;
    do
    {
        status="IORD"_ALTERA_AVALON_LCD_16207_STATUS(LCD_BASE);
    }while(status&0x80);
}


void lcd_init()                                                 //液晶1602初始化
{
    IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD_BASE, 0x38);       //功能设置
    check_busy();
    IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD_BASE, 0x01);       //清屏
    check_busy();
    IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD_BASE, 0x06);       //Y地址自动加1模式
    check_busy();
    IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD_BASE, 0x0c);       //显示开,不显示光标
}
      
void lcd_prints(alt_u8 *string)                                 //打印字符串
{
    while(*string!='\0')
    {     
        check_busy();   
        IOWR_ALTERA_AVALON_LCD_16207_DATA(LCD_BASE, *string);      
        string++;          
    }
}


void select_xy(alt_u8 x,alt_u8 y)                               //选择屏幕坐标,x=0为第1行,x=1为第2行
{                                                               //y=0~15,分别对应第1列到第16列
    check_busy();
    if(x%2==0)
    {   
        IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD_BASE, 0x80+y);  
    }
    else
    {  
        IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD_BASE, 0xc0+y);
    }
}


  
int main (void) __attribute__ ((weak, alias ("alt_main")));     //将程序的入口改为alt_main(),可以使
                                                                //很多驱动不会加载,可以大大减小代码长度
void alt_main()                                                
{
    lcd_init();                            
   
    select_xy(0,0);
    lcd_prints(lcd_string1);
       
    select_xy(1,7);
    lcd_prints(lcd_string2);
}


编译器将做如下设置,以优化代码:


选中工程的properties,将c/c++build中的tool settings选项卡下的nios2 complier中的general里的optimizition levels改为最后一个(-0s),工程syslib的properties也做相同设置。使生成的代码最小。


将系统库属性做如下设置:


da33fb4a-3b15-470c-acaa-24bf27a8dcf2.JPG

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户155854 2009-7-28 13:32

ip核在安装的时候已经安装上了,在这个路径下\altera\ip\altera\sopc_builder_ip。不知道你用的开发工具是哪个版本的。建议安装目录最好放在磁盘的根目录下,不要用中文命名文件夹和磁盘盘符。工程文件夹最好也放在根目录下,同样不要使用中文名字。另外,在用sopcbuilder时,要注意一些小的细节。希望我的回答对你有帮助。还有什么问题可以加我的qq,我会尽量帮你解决的。 qq:394899023

用户211861 2009-7-21 09:44

你好,我想问下,我在生成硬件系统时出现"no install.ptf"的错误提示,是什么原因?是不是还需要装IP Library?谢谢啦,期待回复。
相关推荐阅读
用户155854 2009-06-28 10:34
基于DS12887的万年历设计
说明:该万年历用DS12887计时,12864液晶显示,按键调时。程序主体架构采用状态机设计,分为三个状态:检测设置按键,检测调时按键,和显示万年历界面。由于DS12887设置时间时允许错误设置,比如...
用户155854 2009-06-08 21:07
NIOS外部中断测试程序
程序说明:测试外部中断。现象:每当触发中断的按键按下,led灯所显示的数值加一。该程序只用于初学者做硬件测试,由于按键抖动没有做相应的处理,可能会引起错误的检测。时间:2009年6月8日。  作者:x...
我要评论
2
2
关闭 站长推荐上一条 /3 下一条