2016年6月2日星期四

单片机编码表 unsigned char code table[] 的理解

 code的作用是告诉单片机,定义的数据要放在ROM(程序存储区)里面,其实是相当于汇编里面的寻址MOVX,因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。

unsigned char code table[] 用 code 表示代码编译完了,数据会放到程序存储区(ROM)当中.如果不用,数据会放到随机储存器单中(RAM)(寄存器).

一个单片机的随机存储器是有限制的。51单片机的RAM是128个字节。你每定义一个char的变量,它占用的就是RAM中的一个字节。用unint占用的是两个字节。
一个芯片内部的RAM非常宝贵。

51单片机中的ROM有4kb(4千个字节),远远大于RAM中的128b.所以把这个固定的编码数据放在ROM中可以节约宝贵的RAM空间。

数码管静态和动态显示

动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
静态显示通常只有一个数码管的情况下用,直接把段码送到数码管就可以了。阴极直接接地。如果数码管较多一般是不用的,因为IO口不够。动态显示,对于共阴极数码管,把所有数码管的阳极并联后接到单片机IO口上作为段码。把所有阴极顺次接到单片机IO口上作为位码。通过控制位码实现控制单一数码管显示,通过控制段码来控制显示内容。然后通过循环点亮的形式依次点亮各个数码管,并保留一小段时间,只要时间合适就可以让人的视觉看起来都是亮的。


四位数码管引脚图(共阳极)