c51单片机学习笔记-动态数码管实验(un)

目的:控制动态数码管从左至右显示数字 0-7

编译软件:keil5

过程

(1)首先将 51 单片机的头文件包含进来, 然后定义 38 译码器的控制引脚,并将共阴数码管 0-F 断码数据使用数组定义好

#define SMG_A_DP_PORT	P0	//使用宏定义数码管段码口
//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

//定义一个全局数组变量 gsmg_code (开头的“g”表示全局)存放共阴数码管 0-F 段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

(2)主函数功能,直接进入 while 循环,在循环体内执行 smg_display()数 码管动态显示函数。该函数是根据动态数码管显示原理所编写,即选中所要显示的那位数码管,然后发送在该位数码管上所要显示的段码数据,延时一定时间后 在将段选口清零即消隐(消除之前的显示),如此循环 8 次即可实现 8 位数码管显示。

void smg_display(void)
{
	u8 i=0;

	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;
		}
		SMG_A_DP_PORT=gsmg_code[i];
		delay_10us(100);
		SMG_A_DP_PORT=0x00;

(3)编译整体代码烧录观察实验现象

c51单片机学习笔记-动态数码管实验(un)_第1张图片

 c51单片机学习笔记-动态数码管实验(un)_第2张图片

 c51单片机学习笔记-动态数码管实验(un)_第3张图片

 

你可能感兴趣的:(单片机,c语言,stm32)