其他分享
首页 > 其他分享> > 51单片机:单个数码管动态显示

51单片机:单个数码管动态显示

作者:互联网

单个数码管动态显示

仿真电路(软件为Proteus)

所用元件目录

1、AT89C51RC2:单片机
2、BUTTON:按键
3、CAP:电容
4、CRYSTAL:晶振
5、RES:电阻
6、7SEG-MPX1-CC(红色,共阴极数码管)

注:
1.在Proteus里数码管名称后CC表示共阴极,CA表示共阳极,在选择的时候需要注意跟你写的程序是否匹配。

步骤

对Proteus软件操作步骤:

  1. 新建工程;
  2. 添加元件;
  3. 添加电源:(正:POWER;负:GROUND);
  4. 放置元件,按电路图连接(因单个数码管引脚较近,连接时需得注意,如果不行可换个一端连接);

插入电路图

请添加图片描述
上图就是用仿真软件制作的线路原理图,此时是仿真状态截的图。

插入一段漂亮的代码片(软件为Keil)

下面展示高亮的 代码片.

#include"reg51.h"

unsigned char m[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
                 //硬件图上我们是正极连接单片机,所以输出1才能点亮数码管
				 //0,1,2,3,4,5,6,7,8,9,这是共阴极数码管0-9的段码

void delay1ms(unsigned char c)  //c=1时,大约为1ms
{  
	unsigned char a,b;  
	for(c ;c>0;c--)  
		for(b=142;b>0;b--)  
			for(a=2;a>0;a--);  
}

void main()
{
	unsigned char i; //设定两个变量
	P2=0x00;  //在开始点亮前,初始化;
	delay1ms(100); //大约延时100ms	
	while(1)
	{										  	
		for(i=0;i<10;i++)	    //把0移到最右边需要10次
		{
			P2=m[i];   //P2口的8个引脚输出轮流输出m数组中的段码
			delay1ms(100000); 	  //延时函数有最大值,因此我设置了三个,
			delay1ms(100000); 	  //这样可以明显看到数码管的数值在滚动显示
			delay1ms(100000);	  //如果要精确的按秒显示,还是得用单片机内的定时器,这个后续会写
		}									
	}		
}

段码

显示0~9的值
共阴极数码管
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 

共阳极数码管
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

标签:动态显示,数码管,unsigned,delay1ms,char,单片机,Proteus
来源: https://blog.csdn.net/void_much/article/details/119082579