数码管驱动方式:
单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间
专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可
动态数码管的显示与静态数码管显示原理相同,但需要对数码管进行 消影
为什么要消影?
因为程序的运行时,位选 段选 位选 段选 位选 段选
因为单片机运行速度很快当下一个位选发生时,上一刻的段选就会发生串位问题到下一个的段选。因此必须要进行消影。
解决的办法:
位选 段选 延时 清零 位选 段选 延时 清零 位选 段选 延时 清零
#includeunsigned char shumatable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void Delay(unsigned char xms) //@12.000MHz { unsigned char i, j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } } void Shuma(unsigned char Location,Number) { switch(Location) { case 1:P2_4=1;P2_3=1;P2_2=1;break; case 2:P2_4=1;P2_3=1;P2_2=0;break; case 3:P2_4=1;P2_3=0;P2_2=1;break; case 4:P2_4=1;P2_3=0;P2_2=0;break; case 5:P2_4=0;P2_3=1;P2_2=1;break; case 6:P2_4=0;P2_3=1;P2_2=0;break; case 7:P2_4=0;P2_3=0;P2_2=1;break; case 8:P2_4=0;P2_3=0;P2_2=0;break; } P0=shumatable[Number]; Delay(1); P0=0x00;// 消影 } void main() { while(1) { Shuma(1,1); // Delay(20); Shuma(2,2); // Delay(20); Shuma(3,3); // Delay(20); } }



