[PIC32/SAM] ATSAMD51 EVK评估板评测7HT1621

[复制链接]
1054|10
 楼主| 比神乐 发表于 2022-12-6 16:58 | 显示全部楼层 |阅读模式
今天真背,PWM没搞好,触摸按键没搞好,只好搞一个段式液晶HT1621了。
代码:
  1. #include <stddef.h>                     // Defines NULL
  2. #include <stdbool.h>                    // Defines true
  3. #include <stdlib.h>                     // Defines EXIT_FAILURE
  4. #include "definitions.h"                // SYS function prototypes


  5. // *****************************************************************************
  6. // *****************************************************************************
  7. // Section: Main Entry Point
  8. #define Smg_a    0x80
  9. #define Smg_b    0x40
  10. #define Smg_c    0x20
  11. #define Smg_d    0x01
  12. #define Smg_e    0x02
  13. #define Smg_f    0x08
  14. #define Smg_g    0x04
  15. #define Smg_dp   0x10

  16. #define Bmp0Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f
  17. #define Bmp1Map          Smg_b | Smg_c
  18. #define Bmp2Map          Smg_a | Smg_b | Smg_d | Smg_e | Smg_g
  19. #define Bmp3Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_g
  20. #define Bmp4Map          Smg_b | Smg_c | Smg_f | Smg_g
  21. #define Bmp5Map          Smg_a | Smg_c | Smg_d | Smg_f | Smg_g
  22. #define Bmp6Map          Smg_a | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  23. #define Bmp8Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  24. #define Bmp9Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_f | Smg_g
  25. #define Bmp7Map          Smg_a | Smg_b | Smg_c
  26. #define BmpAMap          Smg_a | Smg_b | Smg_c | Smg_e | Smg_f | Smg_g
  27. #define BmpBMap          Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  28. #define BmpCMap          Smg_a | Smg_d | Smg_e | Smg_f
  29. #define BmpDMap          Smg_b | Smg_c | Smg_d | Smg_e | Smg_g
  30. #define BmpEMap          Smg_a | Smg_d | Smg_e | Smg_f | Smg_g
  31. #define BmpFMap          Smg_a | Smg_e | Smg_f | Smg_g

  32. #define CS_0           GPIO_PA06_Clear()
  33. #define CS_1           GPIO_PA06_Set()
  34. #define WR_0           GPIO_PB05_Clear()
  35. #define WR_1           GPIO_PB05_Set()
  36. #define DA_0           GPIO_PB04_Clear()
  37. #define DA_1           GPIO_PB04_Set()

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

  40. unsigned int i;

  41. void delay(void)
  42. {
  43.     for(i=0;i<10;i++);
  44. }
  45. void COMMAND_HT1621(unsigned char comm)
  46. {
  47.         unsigned char i;
  48.         CS_0;
  49.         delay();
  50.         WR_0;
  51.     delay();
  52.         for(i=0;i<3;i++)        //写命令
  53.         {
  54.                 if((0x04<<i)&0x04)  DA_1;    //100
  55.                 else                DA_0;
  56.         delay();
  57.                 WR_0;
  58.         delay();
  59.                 WR_1;
  60.         delay();
  61.         }
  62.         for(i=0;i<9;i++)        //写命令数据
  63.         {
  64.                 if((comm<<i)&0x80)  DA_1;    //100
  65.                 else                DA_0;
  66.         delay();
  67.                 WR_0;
  68.         delay();
  69.                 WR_1;
  70.         delay();
  71.         }
  72.         CS_1;
  73.        
  74. }

  75. void HT1621_Display(void)
  76. {
  77.         unsigned char i;
  78.         CS_0;                        //片选CS
  79.     delay();
  80.         WR_0;
  81.     delay();
  82.         for(i=0;i<3;i++)                   //写命令
  83.         {
  84.                 if((0x05<<i)&0x04)  DA_1;
  85.                 else                DA_0;
  86.         delay();
  87.                 WR_0;
  88.         delay();
  89.                 WR_1;
  90.         delay();
  91.         }
  92.         for(i=0;i<6;i++)                   //写地址
  93.         {
  94.                 if((20<<i)&0x20)    DA_1;  //20对应 SEG地址
  95.                   else                DA_0;
  96.         delay();
  97.                 WR_0;
  98.         delay();
  99.                 WR_1;
  100.         delay();
  101.         }
  102.         for(i=0;i<8;i++)                   //写数据
  103.         {
  104.                 if((DpyNum[5]<<i)&0x80)   DA_1;
  105.                 else                      DA_0;
  106.         delay();
  107.                 WR_0;
  108.         delay();
  109.                 WR_1;
  110.         delay();
  111.         }
  112.         for(i=0;i<8;i++)                   //写数据
  113.         {
  114.                 if((DpyNum[4]<<i)&0x80)   DA_1;
  115.                 else                      DA_0;
  116.         delay();
  117.                 WR_0;
  118.         delay();
  119.                 WR_1;
  120.         delay();
  121.         }
  122.         for(i=0;i<8;i++)                   //写数据
  123.         {
  124.                 if((DpyNum[3]<<i)&0x80)   DA_1;
  125.                 else                      DA_0;
  126.         delay();
  127.                 WR_0;
  128.         delay();
  129.                 WR_1;
  130.         delay();
  131.         }
  132.         for(i=0;i<8;i++)                   //写数据
  133.         {
  134.                 if((DpyNum[2]<<i)&0x80)   DA_1;
  135.                 else                      DA_0;
  136.         delay();
  137.                 WR_0;
  138.         delay();
  139.                 WR_1;
  140.         delay();
  141.         }
  142.         for(i=0;i<8;i++)                   //写数据
  143.         {
  144.                 if((DpyNum[1]<<i)&0x80)   DA_1;
  145.                 else                      DA_0;
  146.         delay();
  147.                 WR_0;
  148.         delay();
  149.                 WR_1;
  150.         delay();
  151.         }
  152.         for(i=0;i<8;i++)                   //写数据
  153.         {
  154.                 if((DpyNum[0]<<i)&0x80)   DA_1;
  155.                 else                      DA_0;
  156.         delay();
  157.                 WR_0;
  158.         delay();
  159.                 WR_1;
  160.         delay();
  161.         }
  162.         CS_1;                          //释放CS
  163. }

  164. void LCD_Init(void)
  165. {
  166.         COMMAND_HT1621(0x01);         //SYS EN
  167.         COMMAND_HT1621(0x03);         //LCD ON
  168.         COMMAND_HT1621(0x29);         //4 COM  1/3 BIAS
  169.         HT1621_Display();             //clear screen
  170. }
  171. // *****************************************************************************
  172. // *****************************************************************************

  173. int main ( void )
  174. {
  175.     /* Initialize all modules */
  176.     SYS_Initialize ( NULL );
  177.     LCD_Init();
  178.     DpyNum[0] = Smg_a|Smg_d|Smg_g;              //"三"
  179.     DpyNum[1] = SegCode[1];
  180.     DpyNum[2] = SegCode[3];
  181.     DpyNum[3] = SegCode[5];
  182.     DpyNum[4] = SegCode[7];
  183.     DpyNum[5] = SegCode[9];

  184.     HT1621_Display();   
  185.     while ( true )
  186.     {
  187.         /* Maintain state machines of all polled MPLAB Harmony modules. */
  188.         SYS_Tasks ( );
  189.     }

  190.     /* Execution should not come here during normal operation */

  191.     return ( EXIT_FAILURE );
  192. }


  193. /*******************************************************************************
  194. End of File
  195. */

初始化代码:
  1. void SYS_Initialize ( void* data )
  2. {
  3.     /* MISRAC 2012 deviation block start */
  4.     /* MISRA C-2012 Rule 2.2 deviated in this file.  Deviation record ID -  H3_MISRAC_2012_R_2_2_DR_1 */

  5.     NVMCTRL_Initialize( );

  6.   
  7.     PORT_Initialize();

  8.     CLOCK_Initialize();




  9.     EVSYS_Initialize();





  10.     NVIC_Initialize();

  11.     /* MISRAC 2012 deviation block end */
  12. }

  13. void PORT_Initialize(void)
  14. {
  15.    /************************** GROUP 0 Initialization *************************/
  16.    PORT_REGS->GROUP[0].PORT_DIR = 0x40U;
  17.    PORT_REGS->GROUP[0].PORT_PINCFG[6] = 0x0U;

  18.    PORT_REGS->GROUP[0].PORT_PMUX[3] = 0x0U;

  19.    /************************** GROUP 1 Initialization *************************/
  20.    PORT_REGS->GROUP[1].PORT_DIR = 0x30U;
  21.    PORT_REGS->GROUP[1].PORT_PINCFG[4] = 0x0U;
  22.    PORT_REGS->GROUP[1].PORT_PINCFG[5] = 0x0U;

  23.    PORT_REGS->GROUP[1].PORT_PMUX[2] = 0x0U;

  24.    /************************** GROUP 2 Initialization *************************/


  25.    /************************** GROUP 3 Initialization *************************/



  26. }
效果图:

本帖子中包含更多资源

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

×
lzmm 发表于 2023-1-5 12:30 | 显示全部楼层
ATSAMD51 EVK评估板真是小巧玲珑的。
claretttt 发表于 2023-1-5 16:57 | 显示全部楼层
感觉好复杂的代码,需要自己写这么多寄存器的。
lzbf 发表于 2023-1-6 14:42 | 显示全部楼层
HT1621这个是驱动模块的吗?
jonas222 发表于 2023-1-6 15:14 | 显示全部楼层
这个段式液晶需要自己定制的 吗?
 楼主| 比神乐 发表于 2023-1-6 16:07 | 显示全部楼层
lzbf 发表于 2023-1-6 14:42
HT1621这个是驱动模块的吗?

我自己买的,根据例程改的。
 楼主| 比神乐 发表于 2023-1-6 16:07 | 显示全部楼层
jonas222 发表于 2023-1-6 15:14
这个段式液晶需要自己定制的 吗?

我淘宝上买的。
uiint 发表于 2023-1-7 13:12 | 显示全部楼层
HT1621是自带的设备的吗?              
 楼主| 比神乐 发表于 2023-1-7 13:27 | 显示全部楼层
uiint 发表于 2023-1-7 13:12
HT1621是自带的设备的吗?

不是
uytyu 发表于 2023-1-10 21:38 | 显示全部楼层
怎么才能让液晶显示汉字?              
 楼主| 比神乐 发表于 2023-1-11 10:57 | 显示全部楼层
这种段式液晶显示不了汉字
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

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