零知开源快速入门16-数码管显示(4位)

一、工具原料

电脑,windows系统
零知开发板
micro-usb线
4位数码管一个(共阴)
220Ω 电阻8个
面包板一个+若干跳线

二、硬件连接

1、硬件连接原理图

2、实际连线

三、方法步骤

1、打开零知实验室软件开发工具,然后新建项目,输入以下代码:

2、按照之前的方式先【编译】,然后【上传】到开发板中。

3、特别说明:数码管分共阳和共阴两种,如下代码对应的是共阴数码管。


							

	/**
	*    文件: 数码管-4位.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
	*    -- 零知开源,让电子制作变得更简单! --
	*    时间: 2018/06/26 19:23
	*    说明: 4位数码管显示
	**/
	 
	//设置阴极接口,用于显示数字
	int a = 13;
	int b = 3;
	int c = 6;
	int d = 10;
	int e = 11;
	int f = 0;
	int g = 5;
	int h = 9;
	//设置阳极接口,用于控制4位数码管第几位进行显示数字
	int d4 = 4;
	int d3 = 2;
	int d2 = 1;
	int d1 = 12;
	//设置变量
	long n = 1230;
	int x = 100;
	int del = 55;  //此处数值对时钟进行微调
	 
	void Display(unsigned char x, unsigned char Number);//显示功能函数
	 
	void setup() {
	          pinMode(d1, OUTPUT);
	          pinMode(d2, OUTPUT);
	          pinMode(d3, OUTPUT);
	          pinMode(d4, OUTPUT);
	          pinMode(a,  OUTPUT);
	          pinMode(b,  OUTPUT);
	          pinMode(c,  OUTPUT);
	          pinMode(d,  OUTPUT);
	          pinMode(e,  OUTPUT);
	          pinMode(f,  OUTPUT);
	          pinMode(g,  OUTPUT);
	          pinMode(h,  OUTPUT);
	}
	 
	void loop() {
		 Display(1,5);
		 Display(2,2);
		 Display(3,0);
		 Display(4,2);
	     
	}
	void WeiXuan(unsigned char n)    //此处函数用于控制数码管的第几位进行显示
	{
	    switch(n)
	     {
	        case 1: 
	          digitalWrite(d1, LOW);
			  digitalWrite(d2, HIGH);
	          digitalWrite(d3, HIGH);
	          digitalWrite(d4, HIGH);   
	         break;
	         case 2: 
	          digitalWrite(d1, HIGH);
			  digitalWrite(d2, LOW);
	          digitalWrite(d3, HIGH);
	          digitalWrite(d4, HIGH); 
	            break;
	          case 3: 
	          digitalWrite(d1, HIGH);
			  digitalWrite(d2, HIGH);
	          digitalWrite(d3, LOW);
	          digitalWrite(d4, HIGH);  
	            break;
	          case 4: 
			  digitalWrite(d1, HIGH);
			  digitalWrite(d2, HIGH);
	          digitalWrite(d3, HIGH);
	          digitalWrite(d4, LOW);  
	            break;
	        default :
	           digitalWrite(d1, HIGH);
	           digitalWrite(d2, HIGH);
	           digitalWrite(d3, HIGH);
	           digitalWrite(d4, HIGH);
	        break;
	          }
	}
	void Num_0()    //显示数字0
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, HIGH);
	  digitalWrite(e, HIGH);
	  digitalWrite(f, HIGH);
	  digitalWrite(g, LOW);
	  digitalWrite(h, HIGH);
	}
	void Num_1()    //显示数字1
	{
	  digitalWrite(a, LOW);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, LOW);
	  digitalWrite(e, LOW);
	  digitalWrite(f, LOW);
	  digitalWrite(g, LOW);
	  digitalWrite(h, HIGH);
	}
	void Num_2()    //显示数字2
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, LOW);
	  digitalWrite(d, HIGH);
	  digitalWrite(e, HIGH);
	  digitalWrite(f, LOW);
	  digitalWrite(g, HIGH);
	  digitalWrite(h, HIGH);
	}
	void Num_3()    //显示数字3
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, HIGH);
	  digitalWrite(e, LOW);
	  digitalWrite(f, LOW);
	  digitalWrite(g, HIGH);
	  digitalWrite(h, HIGH);
	}
	void Num_4()    //显示数字4
	{
	  digitalWrite(a, LOW);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, LOW);
	  digitalWrite(e, LOW);
	  digitalWrite(f, HIGH);
	  digitalWrite(g, HIGH);
	  digitalWrite(h, HIGH);
	}
	void Num_5()    //显示数字5
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, LOW);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, HIGH);
	  digitalWrite(e, LOW);
	  digitalWrite(f, HIGH);
	  digitalWrite(g, HIGH);
	  digitalWrite(h, HIGH);
	}
	void Num_6()    //显示数字6
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, LOW);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, HIGH);
	  digitalWrite(e, HIGH);
	  digitalWrite(f, HIGH);
	  digitalWrite(g, HIGH);
	  digitalWrite(h, HIGH);
	}
	void Num_7()    //显示数字7
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, LOW);
	  digitalWrite(e, LOW);
	  digitalWrite(f, LOW);
	  digitalWrite(g, LOW);
	  digitalWrite(h, HIGH);
	}
	void Num_8()    //显示数字8
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, HIGH);
	  digitalWrite(e, HIGH);
	  digitalWrite(f, HIGH);
	  digitalWrite(g, HIGH);
	  digitalWrite(h, HIGH);
	}
	void Num_9()    //显示数字9
	{
	  digitalWrite(a, HIGH);
	  digitalWrite(b, HIGH);
	  digitalWrite(c, HIGH);
	  digitalWrite(d, HIGH);
	  digitalWrite(e, LOW);
	  digitalWrite(f, HIGH);
	  digitalWrite(g, HIGH);
	  digitalWrite(h, HIGH);
	}
	void Clear()  //清屏
	{
	  digitalWrite(a, LOW);
	  digitalWrite(b, LOW);
	  digitalWrite(c, LOW);
	  digitalWrite(d, LOW);
	  digitalWrite(e, LOW);
	  digitalWrite(f, LOW);
	  digitalWrite(g, LOW);
	  digitalWrite(h, LOW);
	}
	void pickNumber(unsigned char n)    //判断应该显示哪个数字,并调用相关的数字显示函数进行显示
	{
	  switch(n)
	  {
	   case 0:Num_0();
	   break;
	   case 1:Num_1();
	   break;
	   case 2:Num_2();
	   break;
	   case 3:Num_3();
	   break;
	   case 4:Num_4();
	   break;
	   case 5:Num_5();
	   break;
	   case 6:Num_6();
	   break;
	   case 7:Num_7();
	   break;
	   case 8:Num_8();
	   break;
	   case 9:Num_9();
	   break;
	   default:Clear();
	   break; 
	  }
	}
	void Display(unsigned char x, unsigned char Number)
	{
	        WeiXuan(x);
	        pickNumber(Number);
            delay(1);    
		                   /*此处若不设置的延时,将会马上执行clear()函数清屏,导致无法正常显示数字。另由于4位数码管是由函数控
	                       制其逐位显示的若延时设置稍大,例如10,将明显看到数码管闪烁,有兴趣可以设置不同延时查看效果 */
	        Clear() ; 
	}										
																	
							
							
						

四、成果展示

上面步骤成功完成后,我们就可以看到预期的结果了,可以看到显示“5202”数字,如下: