[活动专区] 【AT-START-F407测评】+ HT1621

[复制链接]
 楼主| 比神乐 发表于 2021-1-25 13:12 | 显示全部楼层 |阅读模式
本帖最后由 比神乐 于 2021-1-25 13:18 编辑

今天捣鼓了一下HT1621
硬件接线
CS:PD8
WR:PB14
DA:PB12
代码:
  1. #include <stdio.h>
  2. #include "at32f4xx.h"
  3. #include "at32_board.h"

  4. /** @addtogroup AT32F407_StdPeriph_Examples
  5.   * @{
  6.   */

  7. /** @addtogroup GPIO_LEDToggle
  8.   * @{
  9.   */

  10. /* Private typedef -----------------------------------------------------------*/
  11. /* Private define ------------------------------------------------------------*/
  12. /* Private macro -------------------------------------------------------------*/
  13. /* Private variables ---------------------------------------------------------*/
  14. /* Private function prototypes -----------------------------------------------*/
  15. /* Private functions ---------------------------------------------------------*/
  16. #define Smg_a    0x80
  17. #define Smg_b    0x40
  18. #define Smg_c    0x20
  19. #define Smg_d    0x01
  20. #define Smg_e    0x02
  21. #define Smg_f    0x08
  22. #define Smg_g    0x04
  23. #define Smg_dp   0x10

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

  40. #define CS_0           CS_GPIO->BRE = CS_PIN
  41. #define CS_1           CS_GPIO->BSRE = CS_PIN
  42. #define WR_0           WR_GPIO->BRE = WR_PIN
  43. #define WR_1           WR_GPIO->BSRE = WR_PIN
  44. #define DA_0           DA_GPIO->BRE = DA_PIN
  45. #define DA_1           DA_GPIO->BSRE = DA_PIN

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

  48. unsigned int i;

  49. void delay(unsigned int x)
  50. {
  51.         unsigned int i,j;
  52.         for(i=0;i<x;i++)
  53.                 for(j=0;j<5;j++);
  54. }
  55. void COMMAND_HT1621(unsigned char comm)
  56. {
  57.         unsigned char i;
  58.         CS_0;
  59.         delay(2);
  60.         WR_0;
  61.         delay(2);
  62.         for(i=0;i<3;i++)        //写命令
  63.         {
  64.                 if((0x04<<i)&0x04)  DA_1;    //100
  65.                 else                DA_0;
  66.                 delay(2);
  67.                 WR_0;
  68.                 delay(2);
  69.                 WR_1;
  70.                 delay(2);
  71.         }
  72.         for(i=0;i<9;i++)        //写命令数据
  73.         {
  74.                 if((comm<<i)&0x80)  DA_1;    //100
  75.                 else                DA_0;
  76.                 delay(2);
  77.                 WR_0;
  78.                 delay(2);
  79.                 WR_1;
  80.                 delay(2);
  81.         }
  82.         CS_1;
  83.         delay(2);
  84. }

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

  175. void LCD_Init(void)
  176. {
  177.         COMMAND_HT1621(0x01);         //SYS EN
  178.         COMMAND_HT1621(0x03);         //LCD ON
  179.         COMMAND_HT1621(0x29);         //4 COM  1/3 BIAS
  180.         HT1621_Display();             //clear screen
  181. }

  182. void AT32_HT1621_Init(void)
  183. {
  184.   GPIO_InitType GPIO_InitStructure;
  185.   /*Enable the LED Clock*/

  186.   RCC_APB2PeriphClockCmd(CS_GPIO_RCC_CLK|WR_GPIO_RCC_CLK|DA_GPIO_RCC_CLK, ENABLE);


  187.   /*Configure the LED pin as ouput push-pull*/
  188.   GPIO_StructInit(&GPIO_InitStructure);
  189.   GPIO_InitStructure.GPIO_Pins = CS_PIN;                                 

  190.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;

  191.   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;        
  192.   GPIO_Init(CS_GPIO, &GPIO_InitStructure);
  193.         
  194.         GPIO_InitStructure.GPIO_Pins = WR_PIN;                                 

  195.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;

  196.   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;        
  197.   GPIO_Init(WR_GPIO, &GPIO_InitStructure);
  198.         
  199.         GPIO_InitStructure.GPIO_Pins = DA_PIN;                                 

  200.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;

  201.   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;        
  202.   GPIO_Init(DA_GPIO, &GPIO_InitStructure);
  203. }
  204. /**
  205.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Main Function.
  206.   * @param  None
  207.   * @retval None
  208.   */
  209. int main(void)
  210. {
  211.   AT32_Board_Init();
  212.         AT32_HT1621_Init();
  213.         LCD_Init();
  214.         DpyNum[0] = Smg_a|Smg_d|Smg_g;              //"三"
  215.         DpyNum[1] = SegCode[1];
  216.         DpyNum[2] = SegCode[3];
  217.         DpyNum[3] = SegCode[5];
  218.         DpyNum[4] = SegCode[7];
  219.         DpyNum[5] = SegCode[9];

  220.         HT1621_Display();               //刷新LCD
  221.   for(;;)
  222.   {
  223.     AT32_LEDn_Toggle(LED2);
  224.     Delay_ms(1000);
  225.    
  226.   }
  227. }

  228. #ifdef  USE_FULL_ASSERT
  229. /**
  230.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Reports the name of the source file and the source line number
  231.   *         where the assert_param error has occurred.
  232.   * @param  file: pointer to the source file name
  233.   * @param  line: assert_param error line source number
  234.   * @retval None
  235.   */
  236. void assert_failed(uint8_t* file, uint32_t line)
  237. {
  238.   /* User can add his own implementation to report the file name and line number,
  239.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  240.   /* Infinite loop */
  241.   while (1)
  242.   {}
  243. }
  244. #endif


  245. /**
  246.   * @}
  247.   */

  248. /**
  249.   * @}
  250.   */

效果图:
1.jpg

阴天,图片不是很清楚,隐隐约约可以看到。


caizhiwei 发表于 2021-1-25 22:39 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

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