#include<regx52.h>
//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//共阴极数码管显示0~F的段码数据
//u8 gsmg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
// 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff};
//unsigned char code led[]={0x5b,0x5b,0x3f,0x4f,0x06,0x07,0x06,0x6d};
unsigned char code led[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x5b,0x5b,0x3f,0x4f,0x06,0x07,0x06,0x6d,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void delay_10us(unsigned int ten_us)
{
while(ten_us--);
}
void smg_display(void)
{
unsigned char i,j,num;
for(num=0;num<17;num++) //一共显示17屏
for(j=0;j<110;j++) //一屏幕扫110次
for(i=0;i<8;i++)
{
switch(7-i)//位选
{
case 0: LSC=1;LSB=1;LSA=1;break;
case 1: LSC=1;LSB=1;LSA=0;break;
case 2: LSC=1;LSB=0;LSA=1;break;
case 3: LSC=1;LSB=0;LSA=0;break;
case 4: LSC=0;LSB=1;LSA=1;break;
case 5: LSC=0;LSB=1;LSA=0;break;
case 6: LSC=0;LSB=0;LSA=1;break;
case 7: LSC=0;LSB=0;LSA=0;break;
}
P1=led[num+i];//传送段选数据
delay_10us(100);//延时一段时间,等待显示稳定
P1=0x00;//共阴消影
}
}
void main()
{
while(1)
{
smg_display();
}
}