[FPGA] 我用QUARTUS里的eclipse编程的问题

[复制链接]
 楼主| 比神乐 发表于 2023-7-2 09:57 | 显示全部楼层 |阅读模式
现在学QUARTUS里的eclipse编程,指示灯,按键都没问题。
于是我想写一个HT1621的程序。
完全仿照单片机。
代码如下:
  1. #include  <stdio.h>                                        //标准的输入输出头文件
  2. #include  "system.h"                                //系统头文件
  3. #include  "altera_avalon_pio_regs.h"//pio寄存器头文件
  4. #include  "alt_types.h"                                //数据类型头文件
  5. #include  "sys/alt_irq.h"                        //中断头文件
  6. #include  "io.h"
  7. #include "stdlib.h"

  8. alt_u8  LED_Toggle = 0;                                //LED状态切换全局变量
  9. alt_u32 i=0;

  10. alt_u8 DA;
  11. alt_u8 WR;
  12. alt_u8 CS;

  13. #define Smg_a    0x80
  14. #define Smg_b    0x40
  15. #define Smg_c    0x20
  16. #define Smg_d    0x01
  17. #define Smg_e    0x02
  18. #define Smg_f    0x08
  19. #define Smg_g    0x04
  20. #define Smg_dp   0x10

  21. #define Bmp0Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f
  22. #define Bmp1Map          Smg_b | Smg_c
  23. #define Bmp2Map          Smg_a | Smg_b | Smg_d | Smg_e | Smg_g
  24. #define Bmp3Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_g
  25. #define Bmp4Map          Smg_b | Smg_c | Smg_f | Smg_g
  26. #define Bmp5Map          Smg_a | Smg_c | Smg_d | Smg_f | Smg_g
  27. #define Bmp6Map          Smg_a | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  28. #define Bmp8Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  29. #define Bmp9Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_f | Smg_g
  30. #define Bmp7Map          Smg_a | Smg_b | Smg_c
  31. #define BmpAMap          Smg_a | Smg_b | Smg_c | Smg_e | Smg_f | Smg_g
  32. #define BmpBMap          Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  33. #define BmpCMap          Smg_a | Smg_d | Smg_e | Smg_f
  34. #define BmpDMap          Smg_b | Smg_c | Smg_d | Smg_e | Smg_g
  35. #define BmpEMap          Smg_a | Smg_d | Smg_e | Smg_f | Smg_g
  36. #define BmpFMap          Smg_a | Smg_e | Smg_f | Smg_g




  37. const unsigned char SegCode[] = {Bmp0Map,Bmp1Map,Bmp2Map,Bmp3Map,Bmp4Map,Bmp5Map,Bmp6Map,Bmp7Map,Bmp8Map,Bmp9Map,BmpAMap,BmpBMap,BmpCMap,BmpDMap,BmpEMap,BmpFMap};
  38. unsigned char DpyNum[6] = {Smg_g,Smg_g,Smg_g,Smg_g,Smg_g,Smg_g}; //显示缓冲区



  39. void delay(void)
  40. {
  41.         volatile alt_u16 i;
  42.         for(i=0;i<20;i++);
  43. }
  44. void COMMAND_HT1621(unsigned char comm)
  45. {
  46.     //unsigned char i;
  47.     CS=0;
  48.     IOWR_ALTERA_AVALON_PIO_DATA(PIO_CS_BASE, CS);
  49.     delay();
  50.     WR=0;
  51.     IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  52.     delay();
  53.     for(i=0;i<3;i++)        //写命令
  54.     {
  55.         if((0x04<<i)&0x04)

  56.                         DA=1;    //100


  57.         else
  58.                 DA=0;
  59.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  60.         delay();
  61.         WR=0;
  62.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  63.         delay();
  64.         WR=1;
  65.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  66.         delay();
  67.     }
  68.     for(i=0;i<9;i++)        //写命令数据
  69.     {
  70.         if((comm<<i)&0x80)  DA=1;    //100
  71.         else                DA=0;
  72.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  73.         delay();
  74.         WR=0;
  75.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  76.         delay();
  77.         WR=1;
  78.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  79.         delay();
  80.     }
  81.     CS=1;
  82.     IOWR_ALTERA_AVALON_PIO_DATA(PIO_CS_BASE, CS);
  83.     delay();
  84. }

  85. void HT1621_Display(void)
  86. {
  87.     //unsigned char i;
  88.     CS=0;                        //片选CS
  89.     IOWR_ALTERA_AVALON_PIO_DATA(PIO_CS_BASE, CS);
  90.     delay();
  91.     WR=0;
  92.     IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  93.     delay();
  94.     for(i=0;i<3;i++)                   //写命令
  95.     {
  96.         if((0x05<<i)&0x04)  DA=1;
  97.         else                DA=0;
  98.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  99.         delay();
  100.         WR=0;
  101.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  102.         delay();
  103.         WR=1;
  104.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  105.         delay();
  106.     }
  107.     for(i=0;i<6;i++)                   //写地址
  108.     {
  109.         if((20<<i)&0x20)    DA=1;
  110.         else                DA=0;
  111.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  112.         delay();
  113.         WR=0;
  114.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  115.         delay();
  116.                 WR=1;
  117.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  118.                 delay();
  119.     }
  120.     for(i=0;i<8;i++)                   //写数据
  121.     {
  122.         if((DpyNum[5]<<i)&0x80)   DA=1;
  123.         else                      DA=0;
  124.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  125.         delay();
  126.                 WR=0;
  127.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  128.                 delay();
  129.                 WR=1;
  130.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  131.                 delay();
  132.     }
  133.     for(i=0;i<8;i++)                   //写数据
  134.     {
  135.         if((DpyNum[4]<<i)&0x80)   DA=1;
  136.         else                      DA=0;
  137.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  138.         delay();
  139.                 WR=0;
  140.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  141.                 delay();
  142.                 WR=1;
  143.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  144.                 delay();
  145.     }
  146.     for(i=0;i<8;i++)                   //写数据
  147.     {
  148.         if((DpyNum[3]<<i)&0x80)   DA=1;
  149.         else                      DA=0;
  150.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  151.         delay();
  152.                 WR=0;
  153.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  154.                 delay();
  155.                 WR=1;
  156.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  157.                 delay();
  158.     }
  159.     for(i=0;i<8;i++)                   //写数据
  160.     {
  161.         if((DpyNum[2]<<i)&0x80)   DA=1;
  162.         else                      DA=0;
  163.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  164.         delay();
  165.                 WR=0;
  166.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  167.                 delay();
  168.                 WR=1;
  169.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  170.                 delay();
  171.     }
  172.     for(i=0;i<8;i++)                   //写数据
  173.     {
  174.         if((DpyNum[1]<<i)&0x80)   DA=1;
  175.         else                      DA=0;
  176.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  177.         delay();
  178.                 WR=0;
  179.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  180.                 delay();
  181.                 WR=1;
  182.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  183.                 delay();
  184.     }
  185.     for(i=0;i<8;i++)                   //写数据
  186.     {
  187.         if((DpyNum[0]<<i)&0x80)   DA=1;
  188.         else                      DA=0;
  189.         IOWR_ALTERA_AVALON_PIO_DATA(PIO_DA_BASE, DA);
  190.         delay();
  191.                 WR=0;
  192.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  193.                 delay();
  194.                 WR=1;
  195.                 IOWR_ALTERA_AVALON_PIO_DATA(PIO_WR_BASE, WR);
  196.                 delay();
  197.     }
  198.     CS=1;                          //释放CS
  199.     IOWR_ALTERA_AVALON_PIO_SET_BITS(PIO_CS_BASE,CS);
  200.     delay();
  201. }

  202. void LCD_Init(void)
  203. {
  204.     COMMAND_HT1621(0x01);         //SYS EN
  205.     COMMAND_HT1621(0x03);         //LCD ON
  206.     COMMAND_HT1621(0x29);         //4 COM  1/3 BIAS
  207.     HT1621_Display();             //clear screen
  208. }

  209. //---------------------------------------------------------------------------
  210. //-- 名称                :        main()
  211. //-- 功能                :        程序入口
  212. //-- 输入参数        :        无
  213. //-- 输出参数        :        无
  214. //---------------------------------------------------------------------------
  215. int  main(void)
  216. {
  217.         /*FILE *fp=fopen("ccb.txt","a+");

  218.         for(i=0;i<8;i++)
  219.         {
  220.                 Data[i]=i;
  221.                 fprintf(fp,"%d\n",Data[i]);
  222.         }
  223.         for(i=0;i<8;i++)
  224.         {

  225.                 fscanf(fp,"%d\n",&Data1[i]);
  226.                 printf("Data=%d\n0",Data1[i]);
  227.         }*/
  228.         printf("Code Running...");
  229.         //Init_Interrupt();
  230.         IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_DA_BASE, 1);
  231.         IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_WR_BASE, 1);
  232.         IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_CS_BASE, 1);
  233.         LCD_Init();
  234.         DpyNum[0] = Smg_a|Smg_d|Smg_g;              //"三"
  235.         DpyNum[1] = SegCode[1];
  236.         DpyNum[2] = SegCode[3];
  237.         DpyNum[3] = SegCode[5];
  238.         DpyNum[4] = SegCode[7];
  239.         DpyNum[5] = SegCode[9];

  240.         HT1621_Display();               //刷新LCD


  241.         while(1)
  242.         {

  243.                 //LED_Toggle = ~LED_Toggle;
  244.                 //IOWR_ALTERA_AVALON_PIO_DATA(PIO_CS_BASE, LED_Toggle);
  245.                 /*IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(PIO_CS_BASE,0);
  246.                 for(i=0;i<1000000;i++);
  247.                 IOWR_ALTERA_AVALON_PIO_SET_BITS(PIO_CS_BASE,1);
  248.                 for(i=0;i<1000000;i++);*/
  249.                 /*DpyNum[0] = Smg_a|Smg_d|Smg_g;              //"三"
  250.                 DpyNum[1] = SegCode[1];
  251.                 DpyNum[2] = SegCode[3];
  252.                 DpyNum[3] = SegCode[5];
  253.                 DpyNum[4] = SegCode[7];
  254.                 DpyNum[5] = SegCode[9];

  255.                 HT1621_Display();*/
  256.         }

  257.         return(0);
  258. }
结果显示错误,如图:

请问高手,可能哪儿出现了问题呢?谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 比神乐 发表于 2023-7-4 10:06 | 显示全部楼层
用逻辑分析仪抓包一个函数和单片机正常显示的数据一样。
真奇怪。
叫我阿SU 发表于 2023-7-27 13:26 来自手机 | 显示全部楼层
楼主需要采购HT1621B  HOLTEK SSOP-48这个芯片吗
 楼主| 比神乐 发表于 2023-7-28 08:57 | 显示全部楼层
不需要
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部