对于这个问题,首先你要了解一下硬件,比如下图数码管的原理,其实就是7个LED,分共阴和共阳数码管。共阴数码管就是七个数码管共用一个接地引脚,七个LED显示七个段,所以,点亮七个LED也叫段选,这里共阴的数码管在段选a-g分别接高电位,公用引脚接低电位,这样就可以点亮选定的LED显示数字,例如,b、c接高电位,COM接低电位,就显示数字1,以此类推。(共阳数码管电位是相反的,另外所说七段是没有显示小数点的情况,有些数码管直接把DP和公共引脚连在一起是无法显示的)
所谓的位选,就是提供给公共的引脚以相应的电压,比如上图的共阴数码管,位选就是给在一起的几个数码管其中的某一位提供对应的电位,比如下边的1、2、3、4就是位选,a-g是段选。
明白了这个数码管的用法之后,那么来说下普中开发板教程里所写的那几行,因为普中开发板的教程从开始写第一个点亮一个LED程序的时候就为后边使用74LS138译码器做准备,所以第一个例程就开始用LSA LSB LSC这样的语句,其实开始并没有用。74LS138译码器是用三个引脚通过不同的电平组合来输出8个引脚的电平变化。这样可以利用单片机的三个IO口来解决需要8个IO口的解决法案。
如果直接使用单片机的IO口来驱动数码管,那么首先需要7-8个引脚来驱动段(8段包括小数点)。然后有几位就需要几个IO口来控制位,只有位和段同时有电位差的时候数码管的该段才被点亮,这就是数码管的动态显示原理。
单片机驱动的时候,从低位至高位依次接入数码管的段,假如用P0口,那么P0.0 - P0.3 P0.4 - P0.7分成两组,分别为8 4 2 1,8 4 2 1 ,他们全部点亮的时候就是共阴数码管的话输出全部为高电平,也就是P0.0 - P0.7(小数点也点亮)全部为高电平,那么值就是8+4+2+1,8+4+2+1,就是16,16。16进制就是FF,写成C语音就是P0 = 0xFF; 其他的自己研究吧,共阳数码管相反,就是数码管一个8字加小数点全部点亮C语言写的程序就是:
P0 = 0x00;
如果使用LSA LSB LSC的方式编码按上边38译码器的真值表来确定0-F这16个数字的码表来写上边的程序就可以了,这个你就自己去思考吧。
|