基于sopc的LCD1602液晶显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于sopc的LCD1602液晶显示
液晶是常用的显示输出设备,种类繁多。我们常用的比较容易的液晶是LCD1602液晶,下文给了一个基于sopc的LCD1602液晶的驱动程序。
SOPC Builder中自带LCD1602液晶软核,设计时可以直接添加,十分方便。
打开Quartus II软件,在sopc builder里建立如下硬件
在nios II软件里写如下程序:
#include
#include
#include
#include
#include
#include
#include
#define LCD1602 0x9000
alt_u8 lcd_srting1[]="baidu";
alt_u8 lcd_string2[]="2016/4/10";
void check_busy()
{
alt_u8 status;
do
{
status = IORD_ALTERA_AVALON_LCD_16207_STATUS(LCD1602_BASE);
}while(status&0x80);
}
void lcd_init()
{
IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD1602_BASE,0x38);
check_busy();
IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD1602_BASE,0x01);
check_busy();
IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD1602_BASE,0x06);
check_busy();
IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD1602_BASE,0x0C);
}
void lcd_prints(alt_u8 *string)
{
while(*string !='\0')
{
check_busy();
IOWR_ALTERA_AVALON_LCD_16207_DATA(LCD1602_BASE,*string);
string++;
}
}
void select_xy(alt_u8 x,alt_u8 y)
{
check_busy();
if(x%2==0)
{
I OWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD1602_BASE,0x80+y); }
else
{
I OWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD1602_BASE,0xC0+y); }
}
int main()
{
lcd_init();
select_xy(0,0);
lcd_prints(lcd_string1);
select_xy(1,7);
lcd_prints(lcd_string2);
return 0;
}