[通用8051核FLASH系列] 【芯圣电子HC89S105A测评报告】+HT1621

[复制链接]
1719|0
 楼主| 比神乐 发表于 2023-5-16 17:15 | 显示全部楼层 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-25 11:00 编辑

今天搞了一下HT1621段式液晶
DA接P3.6,WR接P3.4,CS接P3.2
代码:
  1. #define ALLOCATE_EXTERN
  2. #include "HC89S105AC8.h"

  3. #define uchar unsigned char  
  4. #define uint unsigned int
  5. /** @addtogroup 425_GPIO_led_toggle GPIO_led_toggle
  6.   * @{
  7.   */


  8. #define DA_1 P3_6=1
  9. #define DA_0 P3_6=0
  10. #define WR_1 P3_4=1
  11. #define WR_0 P3_4=0
  12. #define CS_1 P3_2=1
  13. #define CS_0 P3_2=0

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

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




  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 COMMAND_HT1621(unsigned char comm)
  42. {
  43.     //unsigned char i;
  44.     CS_0;

  45.     WR_0;
  46.     for(i=0;i<3;i++)        //写命令
  47.     {
  48.         if((0x04<<i)&0x04)  DA_1;    //100
  49.         else                DA_0;
  50.         WR_0;
  51.         WR_1;
  52.     }
  53.     for(i=0;i<9;i++)        //写命令数据
  54.     {
  55.         if((comm<<i)&0x80)  DA_1;    //100
  56.         else                DA_0;
  57.         WR_0;
  58.         WR_1;
  59.     }
  60.     CS_1;

  61. }

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

  125. void LCD_Init(void)
  126. {
  127.     COMMAND_HT1621(0x01);         //SYS EN
  128.     COMMAND_HT1621(0x03);         //LCD ON
  129.     COMMAND_HT1621(0x29);         //4 COM  1/3 BIAS
  130.     HT1621_Display();             //clear screen
  131. }
  132. /***************************************************************************************
  133.   * @实现效果        设置各个IO口的工作状态
  134. ***************************************************************************************/
  135. void main(void)        
  136. {        
  137. /********************************系统初始化*******************************************/               
  138.         WDTCCR = 0x00;                           //关闭看门狗
  139.                                                            //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
  140.         CLKCON = 0x02;                           //选择内部高频RC为系统时钟, Fosc=32MHz
  141.         CLKDIV = 0x02;                           //Fosc 2分频得到Fcpu,Fcpu=16MHz
  142.         
  143. /***********************************设置IO口模式***************************************/
  144.         
  145.         P3M1 = 0xF8;                                 //P32设置为带上拉开漏输出
  146.         P3M2 = 0xF8;                             //P34设置为推挽输出
  147.         P3M3 = 0xF8;                             //P34设置为推挽输出
  148.         LCD_Init();
  149.     DpyNum[0] = Smg_a|Smg_d|Smg_g;              //"三"
  150.     DpyNum[1] = SegCode[2];
  151.     DpyNum[2] = SegCode[4];
  152.     DpyNum[3] = SegCode[6];
  153.     DpyNum[4] = SegCode[8];
  154.     DpyNum[5] = SegCode[0];

  155.     HT1621_Display();      
  156.         while(1)
  157.         {
  158.                
  159.         }
  160. }

效果图:
3.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

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