- #define BOARD_SLCD_COM0_PIN 35u /* COM0 -> L35. */
- #define BOARD_SLCD_COM1_PIN 40u /* COM1 -> L40. */
- #define BOARD_SLCD_COM2_PIN 0u /* COM2 -> L0. */
- #define BOARD_SLCD_COM3_PIN 1u /* COM3 -> L1. */
- #define BOARD_SLCD_SEG0_PIN 3u /* Segment 0 -> L3. */
- #define BOARD_SLCD_SEG1_PIN 7u /* Segment 1 -> L7. */
- #define BOARD_SLCD_SEG2_PIN 6u /* Segment 2 -> L6. */
- #define BOARD_SLCD_SEG3_PIN 5u /* Segment 3 -> L5. */
- #define BOARD_SLCD_SEG4_PIN 4u /* Segment 4 -> L4. */
- #define BOARD_SLCD_SEG5_PIN 58u /* Segment 5 -> L58. */
- #define BOARD_SLCD_SEG6_PIN 26u /* Segment 6 -> L26. */
- #define BOARD_SLCD_SEG7_PIN 27u /* Segment 7 -> L27. */
- #define BOARD_SLCD_SEG8_PIN 30u /* Segment 8 -> L30. */
- #define BOARD_SLCD_SEG15_PIN 8u /* Segment 15 -> L8. */
- #define BOARD_SLCD_SEG16_PIN 9u /* Segment 16 -> L9. */
- #define BOARD_SLCD_SEG17_PIN 10u /* Segment 17 -> L10. */
- #define BOARD_SLCD_SEG18_PIN 11u /* Segment 18 -> L11. */
- #define BOARD_SLCD_SEG19_PIN 15u /* Segment 19 -> L15. */
- #define BOARD_SLCD_SEG20_PIN 16u /* Segment 20 -> L16. */
- #define BOARD_SLCD_SEG21_PIN 17u /* Segment 21 -> L17. */
- #define BOARD_SLCD_SEG23_PIN 20u /* Segment 23 -> L20. */
- #define BOARD_SLCD_SEG24_PIN 19u /* Segment 24 -> L19. */
- #define BOARD_SLCD_SEG25_PIN 22u /* Segment 25 -> L22. */
- #define BOARD_SLCD_SEG26_PIN 21u /* Segment 26 -> L21. */
- #define BOARD_SLCD_SEG27_PIN 28u /* Segment 27 -> L28. */
- #define BOARD_SLCD_SEG28_PIN 29u /* Segment 28 -> L29. */
其中
Segment 0 ~Segment 28 以及COM0~COM3对应LCD屏上的1到29针脚,分布如下图所示,所以12到15针脚这里要配置成COM0到COM3,即下图中对应的COM1到COM4,这里主意编号的起始号。
另外观察上屏PIN1:PIN2如果移动2位就刚好对应3和4映射到第二个八段数码管,以此类推,我们可以定义出第一个的字码表,通过移位操作即可实现其他的八段数码管控制,前提是L0到L63也是按顺序与LCD屏幕的针脚连接的。因此如果自己设计原理图的话,可以注意一下这里的细节,目前开发板上并未按顺序连接。
于是我对照手册与头文件中已经定义好的编码做了如下定义,实现编号为1的数码管上显示0到F,以及“.”点的显示,共计17个字符,由于4个COM端口对应四组寄存器
所以定义为如下17行4列数组。
- uint32_t TAB1[17][4]={
- {(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),(1<<BOARD_SLCD_SEG1_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))},//0
- {0,(1<<BOARD_SLCD_SEG1_PIN),(1<<BOARD_SLCD_SEG1_PIN),0}, //1
- {(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),(1<<BOARD_SLCD_SEG1_PIN)}, //2
- {(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG1_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),(1<<BOARD_SLCD_SEG1_PIN)}, //3
- {0,(1<<BOARD_SLCD_SEG1_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),(1<<BOARD_SLCD_SEG0_PIN)}, //4
- {(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG1_PIN),(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))}, //5
- {(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))},//6
- {0,(1<<BOARD_SLCD_SEG1_PIN),(1<<BOARD_SLCD_SEG1_PIN),(1<<BOARD_SLCD_SEG1_PIN)}, //7
- {(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))},//8
- {(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG1_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))},//9
- {0,((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))},//A
- {(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG0_PIN)}, //b
- {(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG0_PIN),0,((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))}, //C
- {(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN)),0}, //d
- {(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))}, //E
- {0,(1<<BOARD_SLCD_SEG0_PIN),(1<<BOARD_SLCD_SEG0_PIN),((1<<BOARD_SLCD_SEG0_PIN)|(1<<BOARD_SLCD_SEG1_PIN))}, //F
- {(1<<BOARD_SLCD_SEG1_PIN),0,0,0} //.
- };
然后我们编写测试程序
- int main(void)
- {
- int i=0;
- BOARD_Init();
- app_slcd_init();
- // app_slcd_display();
- while (1)
- {
- for(i=0;i<17;i++)
- {
- // COM0
- BOARD_SLCD_PORT->DR0 =TAB1[i][0];
- // COM1
- BOARD_SLCD_PORT->DR2 =TAB1[i][1];
- // COM2
- BOARD_SLCD_PORT->DR4 =TAB1[i][2];
- // COM3
- BOARD_SLCD_PORT->DR6 =TAB1[i][3];
- app_delay(100u);
- }
-
- }
- }
运行效果