#define SMG_W P2 //将数码管 位端口 P0 转义位 SMG_W, 便于以后移植
#define SMG_D P0 //将数码管 段端口 转义为 SMG_D
void SMG_DISPLAY(long num) //数码管显示整数函数
{
/****数码管位*******/
/* 0,1,2,3,4,5,6,7 */
unsigned char code SMG_WEI[]={
0xff,0xfb,0xf7,0xf3,0xef,0xeb,0xe7,0xe3}; //用于数码管 位的选择
//用于数码管 位的选择,这样写不好,相当于对P2的8个管脚都进行了控制,实际上我们只给数码管分配了3个管脚,需要重写数码管显示函数
/****无小数点数字******/
/* 0,1,2,3,4,5,6,7,
8,9,A,B,C,D,E,F,
,-,., */
unsigned char code SMG[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0x00,0x40,0x80};
/****有小数点数字*******/
/* 0.,1.,2.,3.,4.,5.,6.,7.,
8.,9., */
unsigned char code SMG_POINT[]={
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
0xff,0xef,};
unsigned char array[8]={0,0,0,0,0,0,0,0},array_len=0,i=0;
/*将数的各位存在数组里面,得到数组array[]*/
while(num!=0)
{
array[array_len]=num%10; //将末位存进数组
num=num/10; //将数减一位
array_len++;
}
/*遍历数组array并显示*/
while(1)
{
for(i=0;i<array_len;i++)
{
SMG_W=SMG_WEI[array_len-1-i]; //先位后段
SMG_D=SMG[array[i]];
delay(1); //延时时间小于24帧/s, ~21ms人眼就分辨不了
SMG_D=0x00; //消影
}
}
}