1、程序
#include "reg52.h"typedef unsigned int uint16;
//对系统默认数据类型进行重定义
typedef unsigned char uint8;
#define SMG_A_DP_PORTP0//使用宏定义数码管段码口//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//共阴极数码管显示0~F的段码数据
uint8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay_10us(uint16 i)
{
while(i--);
}void smg_display(void)
{
uint8 i=0;
for(i=0;
i<8;
i++)
{
switch(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;
}
SMG_A_DP_PORT=gsmg_code[i];
//传送段选数据
delay_10us(100);
//延时一段时间,等待显示稳定
SMG_A_DP_PORT=0x00;
//消音
}
}void main()
{
while(1)
{
smg_display();
}
}
2、结果 【自学51单片机 - 动态数码管实验】
![自学51单片机 - 动态数码管实验](https://img.it610.com/image/info9/275e7afffb8c40049200b2515e8ea5fe.jpg)
文章图片
![自学51单片机 - 动态数码管实验](https://img.it610.com/image/info9/f683a961ead64ad883c642634dcef199.jpg)
文章图片