数码管显示

动态数码管显示

  • 前言
  • 一、什么是动态数码管?
    • 1.静态数码管
    • 2.动态数码管
  • 二、编程实现步骤
    • 1.基本步骤
    • 2.写程序
    • 3.仿真实现
      • 修改延时可行吗?
      • 使用不修改延时的方法
    • 4.硬件实现
  • 总结


前言

动态数码管显示,程序步骤,
1.了解动态数码管显示原理
2.编程实现


一、什么是动态数码管?

1.静态数码管

数码管显示_第1张图片
给对应的段码就能显示相应的数字…

2.动态数码管

数码管显示_第2张图片

二、编程实现步骤

原理图:

数码管显示_第3张图片

1.基本步骤

  • 1.给段码
  • 2.给位选

2.写程序

代码如下(示例):

在这里插入代码片
P0=0XF9; //1的共阳级段码
P2=0X01;//第一位数码管的位选  0000 0001     除了第一个数码管别的都是灭的

3.仿真实现

新建工程
数码管显示_第4张图片

数码管显示_第5张图片
数码管显示_第6张图片

数码管显示_第7张图片
数码管显示_第8张图片

在这里插入代码片
#include 

void delay(unsigned int ms)// 0-65535
{
	while(ms--);
}

unsigned char leddata[]={ 
 
                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  //"F"
                0x89,  //"H"
                0xC7,  //"L"
                0xC8,  //"n"
                0xC1,  //"u"
                0x8C,  //"P"
                0xA3,  //"o"
                0xBF,  //"-"
                0xFF,  //熄灭
                0xFF  //自定义
 
                         };

void main()
{

	char i=0;
	while(1)
	{
		
		for(i=0;i<8;i++)
		{
			P0=leddata[i+1];
			P2=0X01<<i;
			delay(10000);
		}
	
	
	}
}

显示有问题:效果不是8个一起亮
数码管显示_第9张图片

修改延时可行吗?

自己测

使用不修改延时的方法

数码管显示_第10张图片
数码管显示_第11张图片

解释:

数码管显示_第12张图片

4.硬件实现

数码管显示_第13张图片
数码管显示_第14张图片
数码管显示_第15张图片

数码管显示_第16张图片

在这里插入代码片
#include 

void delay(unsigned int ms)// 0-65535
{
	while(ms--);
}

//unsigned char leddata[]={ 
// 
//                0xC0,  //"0"
//                0xF9,  //"1"
//                0xA4,  //"2"
//                0xB0,  //"3"
//                0x99,  //"4"
//                0x92,  //"5"
//                0x82,  //"6"
//                0xF8,  //"7"
//                0x80,  //"8"
//                0x90,  //"9"
//                0x88,  //"A"
//                0x83,  //"B"
//                0xC6,  //"C"
//                0xA1,  //"D"
//                0x86,  //"E"
//                0x8E,  //"F"
//                0x89,  //"H"
//                0xC7,  //"L"
//                0xC8,  //"n"
//                0xC1,  //"u"
//                0x8C,  //"P"
//                0xA3,  //"o"
//                0xBF,  //"-"
//                0xFF,  //熄灭
//                0xFF  //自定义
// 
//                         };

unsigned char leddata[]={ 
 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义
 
                         };


void main()
{

	char i=0;
	while(1)
	{
		
		for(i=0;i<8;i++)
		{
			P0=leddata[i+1];//段码  1  2 
//			P2=0X01<
			P2=i<<2;        //思考
			delay(100);   //延时
			
			
			P0=0x00;        //全灭
			
		}
	
	
	}
}

效果完美

总结

讲解了数码管静态显示和动态显示的原理,并代码实现

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