多语言展示
当前在线:1645今日阅读:23今日分享:25

如何点亮段式液晶在STM8L152C6T6中

想必每个初出茅庐的程序小菜鸟们都很头疼这个那个芯片的功能,不同类型的液晶有自己的驱动方式,每每碰到这种情况,感觉脑袋都变大了好几倍!不要着急,慢慢来,毕竟身为菜鸟的我们还是得一步一步的学习,成为大神的路是要一步一步脚踏实地的走下去!下面,就让本菜鸟给大家分析一下我点亮的段式液晶吧!
方法/步骤
1

段式液晶虽然跟数码管有所不同,但也有相同的地方,其七段分别为a,b,c,d,e,f,g  想要显示数据,就必须点亮相应的段。下面将通用的0~9的设置值为大家解释一下const uint16_t NumberMap[10]=    {      /***         *显示0                 com1  com2 com3 com4         *seg3 [ 1d,   1e,  1f,  1a]         *seg4 [ 1c,   1g  ,1b , P5]         *seg3 [ 1,   1,  1,  1]         *seg4 [ 1,   0  ,1 , 1]         *      **/        /* 0      1      2      3      4      5      6      7      8      9  */        0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};

2

通过图中的这张表,就可以清楚的明白,0~9是如何得到的!这个是通用的,只要大家静下心来好好想想,就会明白,为什么上面代码会是那样的!(大神请静静地飘过吧,让菜鸟们普及一下基础知识!谁让本菜鸟就这么菜呢!)

3

对于每一个LCD段式液晶屏,都有属于自己的一张表,它会告诉你com与seg之间的对应关系(虽然刚开始看到这幅图的我,根本无法理解,这究竟是何方神圣、、因为它看起来可以没有规律,看起来也挺有规律,但究竟是没看懂,后来的某个瞬间,突然发现,原来so easy!)先来看看我用的这个吧!

4

为了方便大家理解,我分几部分解释!① 看到图的第一眼,大家当然可以知道总共有8个7段数码管(貌似不是这么叫,大家将就一下)。② 有13组汉字词语,其上还有相应的标号:P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12P 13,想必这些词组的显示设置就需要这些相应的标号来设置了。③ 中间有2条横杠,还有个标号X,估计同理如上

5

下面我就教大家,如何利用上面的这张表,来写出相应的段式液晶寄存器缓存地址表!首先看看LCD缓冲寄存器,只要把你要显示的数据写入寄存器就OK了。首先,当然是要找到pin脚对应的seg标号,然后对应到STM8L152C6T6中找到相对应的seg标号。

6

例如:pin4 pin5 对应的STM8L152C6T6中的seg标号为seg3,seg4,则如图所示,就可以得到对应的a~g的缓冲地址位置!1a>s3[seg3]1b>s2[seg4]、、、、、、同理可得到其余的结果。

7

接下里就可以把地址写进去了!接下来就是写代码了:LCD->RAM[LCD_RAMRegister_10] &= (~0x80); LCD->RAM[LCD_RAMRegister_10] |=((NumberMap[user_num/10]) &0x80);// 1A     LCD->RAM[LCD_RAMRegister_7] &= (~0x10); LCD->RAM[LCD_RAMRegister_7] |=((NumberMap[user_num/10]>>2)&0x10);// 1BLCD->RAM[LCD_RAMRegister_0] &= (~0x10); LCD->RAM[LCD_RAMRegister_0] |=((NumberMap[user_num/10>>2])&0x10);// 1C       LCD->RAM[LCD_RAMRegister_0] &= (~0x08); LCD->RAM[LCD_RAMRegister_0] |=((NumberMap[user_num/10]>>1)&0x08);// 1D     LCD->RAM[LCD_RAMRegister_3] &= (~0x80); LCD->RAM[LCD_RAMRegister_3] |=((NumberMap[user_num/10]<<4)&0x80);// 1E     LCD->RAM[LCD_RAMRegister_7] &= (~0x08); LCD->RAM[LCD_RAMRegister_7]|=((NumberMap[user_num/10]<<1)&0x08); // 1F     LCD->RAM[LCD_RAMRegister_4] &=(~0x01); LCD->RAM[LCD_RAMRegister_4]|=((NumberMap[user_num/10]>>1)& 0x01);// 1G

注意事项

本次举例都是以第一个数码管为例!其余方法一样。

推荐信息