搜索
bottom↓
回复: 12

使用nios中lcd1602 驱动器 搞定1602

[复制链接]

出0入0汤圆

发表于 2009-5-31 23:26:31 | 显示全部楼层 |阅读模式
使用sopc里面免费的LCD1602 驱动IP可以直接驱动LCD1602;
    使用标准的输入输出设备 printf()函数可向LCD显示屏打印字符!使用非常简单,但是代码的容量也是比较大的!

值得注意的是,LCD_DATA[7..0] 是双向口,需要使用bidir类型的管脚, 我就由于疏忽了管脚类型,导致一直调试不出来!





  1. #include  "alt_types.h"
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include  "system.h"
  5. #include "sys/alt_irq.h"
  6. #include  "altera_avalon_pio_regs.h"

  7. #include  "priv/alt_busy_sleep.h"



  8. int  main(void)
  9. {   

  10.     int i=0;

  11.       
  12.       FILE *fp_LCD;


  13.     fp_LCD = fopen(LCD_1602_NAME,"w");   // open LCD for write

  14.       if(fp_LCD==0)
  15.       {
  16.         printf("\nError Opening \n\n");
  17.       }
  18.       else
  19.       {   
  20.         
  21.         printf("\nLCD opened, ready for access\n");
  22.         fprintf(fp_LCD,"SOPC-EP1C6\n");
  23.         fprintf(fp_LCD," QQ:520283769\n");
  24.         alt_busy_sleep(2000000);
  25.         fclose(fp_LCD);
  26.       }
  27.       
  28.    
  29.       
  30.     while(1)  
  31.     {  
  32.             /* 输出LED显示数据 */
  33.             IOWR_AlterA_AVALON_PIO_DATA(LED_PIO_BASE,i++);   
  34.             alt_busy_sleep (1500000);   // 延时150ms
  35.         
  36.     }
  37.    
  38.     return(0);
  39. }
复制代码



其实 还有一种更简单的方法,直接在设置里面将stdout设置为LCD_1602 即可,这样子 不用涉及到file文件的操作!



  1. #include <stdio.h>

  2. int main()
  3. {
  4.   printf("Hello from Nios II!\n");

  5.   return 0;
  6. }
复制代码


阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-6-1 08:39:54 | 显示全部楼层
请教楼上,那是什么软件,是不是使用这个软件,可以直接用PC点亮LCD1602

出0入0汤圆

发表于 2009-6-1 08:41:02 | 显示全部楼层
在问一句,楼上的板子在那儿买的,是不是STM32的板子

出0入137汤圆

发表于 2009-6-1 08:43:43 | 显示全部楼层
1,2楼,这个板子是altera的fpga,跑得软核mcu niosII,跟stm32毫无关系

出0入0汤圆

 楼主| 发表于 2009-6-1 08:49:03 | 显示全部楼层
那软件是 Quartus II + nios II
是在fpga 上实现一个软核!
那板子是我自己做的,上面也有stm32芯片

出0入0汤圆

发表于 2009-7-20 23:08:16 | 显示全部楼层
sopc里面免费的LCD1602   是指的   Optrex 16207 LCD Controller ?
       我在系统中添加了它去控制 1602

出0入0汤圆

发表于 2009-7-20 23:11:32 | 显示全部楼层
只能看到 1602 的第一排鬼影消失了(像是初始化成功) 但未出现应该见着的字符 ?

       程序如下:

#include <stdio.h>
#include "system.h"

int main()
{
FILE *fp_LCD=0;

printf("Hello from Nios II!\n");     
     
fp_LCD = fopen("/dev/lcd_16207_0","w");   // open LCD for write

if(fp_LCD==0)
   printf("\nError Opening %s\n\n");
else
   {
   printf("LCD opened, ready for access\n");
   fprintf(fp_LCD,"This message should scroll across the screen... ");
   }

return 0;
}

LZ 请教了··

出0入0汤圆

发表于 2009-8-6 20:04:35 | 显示全部楼层
ding!

出0入0汤圆

发表于 2009-8-28 10:08:27 | 显示全部楼层
你在里面加个 while ,不然肯定鬼影了

出0入0汤圆

发表于 2009-11-15 14:15:42 | 显示全部楼层
Altera DE2 例程

test.c
-----------------------------------------------------------------------------------------
#include "LCD.h"  // LCD1602
//----------------------------------------------------------
int main(void)
{

  //             -> ---------------- <-  // 16bits
  char Line1[16] = "LCD1602 Test";
  char Line2[16] = "by yf.c";
  LCD_Test(Line1, Line2);

  return 0;
}
//----------------------------------------------------------
-----------------------------------------------------------------------------------------

LCD.h
-----------------------------------------------------------------------------------------
#ifndef   __LCD_H__
#define   __LCD_H__

//  LCD Module 16*2
#define lcd_write_cmd(data)     IOWR(LCD1602_BASE, 0, data)
#define lcd_read_cmd()          IORD(LCD1602_BASE, 1)
#define lcd_write_data(data)    IOWR(LCD1602_BASE, 2, data)
#define lcd_read_data()         IORD(LCD1602_BASE, 3)
//----------------------------------------------------------
void  LCD_Init();
void  LCD_Show_Text(char* Text);
void  LCD_Line2();
void  LCD_Test(char* Text1, char* Text2);
//----------------------------------------------------------

#endif
-----------------------------------------------------------------------------------------

LCD.c
-----------------------------------------------------------------------------------------
#include <unistd.h>
#include <string.h>
#include <io.h>
#include "system.h"
#include "LCD.h"
//----------------------------------------------------------
void LCD_Init()
{
  lcd_write_cmd(0x38);  usleep(5000);   // Display Mode
  lcd_write_cmd(0x0C);  usleep(5000);   // Cursor Glint Mode
  lcd_write_cmd(0x01);  usleep(5000);   // Clear Display
  lcd_write_cmd(0x06);  usleep(5000);   // Cursor Move Forward Mode
  lcd_write_cmd(0x80);  usleep(5000);   // Point to the Initial Address
}
//----------------------------------------------------------
void LCD_Show_Text(char* Text)
{
  int i;
  for(i=0;i<strlen(Text);i++)
  {
    lcd_write_data(Text);  usleep(5000);
  }
}
//----------------------------------------------------------
void LCD_Line2()
{
  lcd_write_cmd(0xC0);  usleep(5000);
}
//----------------------------------------------------------
void LCD_Test(char* Text1, char* Text2)
{
  LCD_Init();           //  Initial LCD
  LCD_Show_Text(Text1); //  Show Text of Line1 to LCD  
  LCD_Line2();          //  Change Line2  
  LCD_Show_Text(Text2); //  Show Text of Line2 to LCD
}
//----------------------------------------------------------

出0入0汤圆

发表于 2009-11-17 16:20:35 | 显示全部楼层
好,回去我也试试

出0入0汤圆

发表于 2010-8-24 21:30:52 | 显示全部楼层
楼主的2个方法,我都没有试出来

but 9楼“tear086 .COM 缺氧” 的方法倒是可以的
除了调用io.h下的IOWR(LCD1602_BASE, 0, data)等函数,
还可以用altera_avalon_lcd_16207_regs.h下的IOWR_ALTERA_AVALON_LCD_16207_COMMAND(LCD_BASE, 0x38)等函数
都可以显示

不过还是有几个问题:
1 用fopen,fprintf,不能显示,何解?
2.sdtout设置成“lcd”,同样不能在lcd1602上看到任何东西
以上2个,在main中,都添加了while(1),以避免函数运行结束,指针乱飞
3.虽然用调用IOWR(LCD1602_BASE, 0, data)等函数,显示成功,但用示波器查看LCD_RS、LCD_RW管脚上的信号,发现有周期为几十ns的“方波”,因为方波的上跳与下降沿不理想,也可以看做是正弦波,这又是为什么?

出0入0汤圆

发表于 2014-5-15 19:23:27 | 显示全部楼层
想请教一下您“使用nios中lcd1602 驱动器 搞定1602 “是怎么实现的,我添加了1602的核,也用了bidir,可依旧不行,在IDE中的程序有什么需要注意的么?还是添加核的时候命名有什么要求?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表