[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】+ HT1621显示

[复制链接]
932|0
 楼主| 比神乐 发表于 2021-1-4 12:30 | 显示全部楼层 |阅读模式
今天捣鼓了一下HT1621显示
代码:
  1. #include "pin_manager.h"

  2. void PIN_MANAGER_Initialize(void)
  3. {
  4.     // LATx registers
  5.     LATA = 0x00;
  6.     LATB = 0x00;
  7.     LATC = 0x00;

  8.     // TRISx registers
  9.     TRISA = 0x3B;
  10.     TRISB = 0xD0;
  11.     TRISC = 0xF3;

  12.     // ANSELx registers
  13.     ANSELC = 0xF3;
  14.     ANSELB = 0xD0;
  15.     ANSELA = 0x33;

  16.     // WPUx registers
  17.     WPUB = 0x00;
  18.     WPUA = 0x00;
  19.     WPUC = 0x00;

  20.     // ODx registers
  21.     ODCONA = 0x04;
  22.     ODCONB = 0x00;
  23.     ODCONC = 0x00;

  24.     // SLRCONx registers
  25.     SLRCONA = 0x37;
  26.     SLRCONB = 0xD0;
  27.     SLRCONC = 0xF3;

  28.     // INLVLx registers
  29.     INLVLA = 0x3F;
  30.     INLVLB = 0xD0;
  31.     INLVLC = 0xF3;   
  32. }
  1. #include "mcc_generated_files/mcc.h"

  2. #define Smg_a    0x80
  3. #define Smg_b    0x40
  4. #define Smg_c    0x20
  5. #define Smg_d    0x01
  6. #define Smg_e    0x02
  7. #define Smg_f    0x08
  8. #define Smg_g    0x04
  9. #define Smg_dp   0x10

  10. #define Bmp0Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f
  11. #define Bmp1Map          Smg_b | Smg_c
  12. #define Bmp2Map          Smg_a | Smg_b | Smg_d | Smg_e | Smg_g
  13. #define Bmp3Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_g
  14. #define Bmp4Map          Smg_b | Smg_c | Smg_f | Smg_g
  15. #define Bmp5Map          Smg_a | Smg_c | Smg_d | Smg_f | Smg_g
  16. #define Bmp6Map          Smg_a | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  17. #define Bmp8Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  18. #define Bmp9Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_f | Smg_g
  19. #define Bmp7Map          Smg_a | Smg_b | Smg_c
  20. #define BmpAMap          Smg_a | Smg_b | Smg_c | Smg_e | Smg_f | Smg_g
  21. #define BmpBMap          Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
  22. #define BmpCMap          Smg_a | Smg_d | Smg_e | Smg_f
  23. #define BmpDMap          Smg_b | Smg_c | Smg_d | Smg_e | Smg_g
  24. #define BmpEMap          Smg_a | Smg_d | Smg_e | Smg_f | Smg_g
  25. #define BmpFMap          Smg_a | Smg_e | Smg_f | Smg_g

  26. #define CS_0           PORTBbits.RB5=0
  27. #define CS_1           PORTBbits.RB5=1
  28. #define WR_0           PORTCbits.RC2=0
  29. #define WR_1           PORTCbits.RC2=1
  30. #define DA_0           PORTCbits.RC3=0
  31. #define DA_1           PORTCbits.RC3=1

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

  34. unsigned int i;
  35. void COMMAND_HT1621(unsigned char comm)
  36. {
  37.         unsigned char i;
  38.         CS_0;
  39.        
  40.         WR_0;
  41.         for(i=0;i<3;i++)        //写命令
  42.         {
  43.                 if((0x04<<i)&0x04)  DA_1;    //100
  44.                 else                DA_0;
  45.                 WR_0;
  46.                 WR_1;
  47.         }
  48.         for(i=0;i<9;i++)        //写命令数据
  49.         {
  50.                 if((comm<<i)&0x80)  DA_1;    //100
  51.                 else                DA_0;
  52.                 WR_0;
  53.                 WR_1;
  54.         }
  55.         CS_1;
  56.        
  57. }

  58. void HT1621_Display(void)
  59. {
  60.         unsigned char i;
  61.         CS_0;                        //片选CS
  62.         WR_0;
  63.         for(i=0;i<3;i++)                   //写命令
  64.         {
  65.                 if((0x05<<i)&0x04)  DA_1;
  66.                 else                DA_0;
  67.                 WR_0;
  68.                 WR_1;
  69.         }
  70.         for(i=0;i<6;i++)                   //写地址
  71.         {
  72.                 if((20<<i)&0x20)    DA_1;  //20对应 SEG地址
  73.                   else                DA_0;
  74.                 WR_0;
  75.                 WR_1;
  76.         }
  77.         for(i=0;i<8;i++)                   //写数据
  78.         {
  79.                 if((DpyNum[5]<<i)&0x80)   DA_1;
  80.                 else                      DA_0;
  81.                 WR_0;
  82.                 WR_1;
  83.         }
  84.         for(i=0;i<8;i++)                   //写数据
  85.         {
  86.                 if((DpyNum[4]<<i)&0x80)   DA_1;
  87.                 else                      DA_0;
  88.                 WR_0;
  89.                 WR_1;
  90.         }
  91.         for(i=0;i<8;i++)                   //写数据
  92.         {
  93.                 if((DpyNum[3]<<i)&0x80)   DA_1;
  94.                 else                      DA_0;
  95.                 WR_0;
  96.                 WR_1;
  97.         }
  98.         for(i=0;i<8;i++)                   //写数据
  99.         {
  100.                 if((DpyNum[2]<<i)&0x80)   DA_1;
  101.                 else                      DA_0;
  102.                 WR_0;
  103.                 WR_1;
  104.         }
  105.         for(i=0;i<8;i++)                   //写数据
  106.         {
  107.                 if((DpyNum[1]<<i)&0x80)   DA_1;
  108.                 else                      DA_0;
  109.                 WR_0;
  110.                 WR_1;
  111.         }
  112.         for(i=0;i<8;i++)                   //写数据
  113.         {
  114.                 if((DpyNum[0]<<i)&0x80)   DA_1;
  115.                 else                      DA_0;
  116.                 WR_0;
  117.                 WR_1;
  118.         }
  119.         CS_1;                          //释放CS
  120. }

  121. void LCD_Init(void)
  122. {
  123.         COMMAND_HT1621(0x01);         //SYS EN
  124.         COMMAND_HT1621(0x03);         //LCD ON
  125.         COMMAND_HT1621(0x29);         //4 COM  1/3 BIAS
  126.         HT1621_Display();             //clear screen
  127. }

  128. void main(void)
  129. {
  130.     SYSTEM_Initialize();                                                        // Initialize the device
  131.     LCD_Init();
  132.                 DpyNum[0] = Smg_a|Smg_d|Smg_g;              //"三"
  133.                 DpyNum[1] = SegCode[1];
  134.                 DpyNum[2] = SegCode[3];
  135.                 DpyNum[3] = SegCode[5];
  136.                 DpyNum[4] = SegCode[7];
  137.                 DpyNum[5] = SegCode[9];

  138.                 HT1621_Display();               //刷新LCD
  139.     while (1)
  140.     {
  141.         LED0_SetDigitalInput();                                                 // Turn LED OFF
  142.         __delay_ms(1000);                                                       // One second delay
  143.         LED0_SetDigitalOutput();                                                // Turn LED ON                                               
  144.         __delay_ms(1000);                                                       // One second delay

  145.         
  146.       }
  147. }
效果图:

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

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