单片机P0端口驱动数码管0-9循环显示(Proteus仿真+C语言程序)

P0端口驱动共阳极数码管循环显示0-9

  • 1.实验效果
  • 2.数码管
  • 3.Proteus仿真
  • 4. 源代码

1.实验效果

单片机P0端口驱动数码管0-9循环显示(Proteus仿真+C语言程序)_第1张图片

2.数码管

单片机P0端口驱动数码管0-9循环显示(Proteus仿真+C语言程序)_第2张图片
单片机P0端口驱动数码管0-9循环显示(Proteus仿真+C语言程序)_第3张图片

一个数码管包含七段发光二极管,通过控制每段二极管的亮灭,继而显示出不同的数字。数码管分为共阴极数码管和共阳极数码管,共阴极就是7个发光二极管的阴极连在一起,阳极为高电平时点亮,共阳极数码管是阳极连在一起,另一端的电平控制各段二极管的亮、熄。

3.Proteus仿真

单片机P0端口驱动数码管0-9循环显示(Proteus仿真+C语言程序)_第4张图片
数码管从上至下分别连接P0_1-P0_7,因此想要显示数字1,P0口需要输入二进制数据11110010注意没有连P0_0端口

数字 二进制 十六进制
0 10000000 0x80
1 11110010 0xf2
2 01001000 0x48
3 01100000 0x60
4 00110010 0x32
5 00100100 0x24
6 00000100 0x04
7 11110000 0xf0
8 00000000 0x00
9 00100000 0x20

4. 源代码

单片机P0端口驱动数码管0-9循环显示(Proteus仿真+C语言程序)_第5张图片

# include 
# include 
unsigned char display_table[] ={ 0x80, 0xf2, 0x48, 0x60, 0x32, 0x24, 0x04, 0xf0, 0x00, 0x20 }; // 	 共阳极数码管显示编码16进制
unsigned int i;
// 0:10000000 1:11110010 2:01001000	3:01100000 4:00110010 5:00100100 6:00000100 7:11110000 8:00000000 9:00100000
void delay(void)   // 延时程序1s
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  
}

void main()		   // 主程序
{
	while(1)
	{
		P0 = 0xff;
		for(i = 0; i < 10; i++)
		{
			if (i == 10	)	 // 当i=10时,将0清零。就是当数码管显示9后,再从0开始
			{
				i = 0;
			}
			P0 = display_table[i];
			delay();
		}
	}
}

你可能感兴趣的:(单片机,单片机)