单片机 数码管0~F显示

本文介绍了一段使用51单片机控制LED数码管显示的程序代码,通过位选和段选实现了16位数字的滚动显示,并详细展示了延迟函数和显示函数的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <reg51.h>
#define GPIO_DIG   P0	//段选
#define GPIO_PLACE P1	//位选
#define uint unsigned int

unsigned char code DIG_PLACE[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选
unsigned char code DIG_CODE[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F
unsigned char DisplayData[16];

void delay(uint z)      //delay 1ms
{
	uint x,y;
	for(x=z;x>0;x--)
	{
		for(y=124;y>0;y--); 
	}
}

void DigDisplay()
{
	unsigned char i;
	unsigned int j;

	for(i=0; i<16; i++)
	{
		GPIO_PLACE = DIG_PLACE[i];	
		GPIO_DIG = DisplayData[i]; 
		delay(500);			
		j = 10;			      //扫描时间			
		while(j--);	
		
		GPIO_DIG = 0x00;  //清残影
		
	}
}


void main(void)
{
	unsigned char i;

	for(i=0; i<16; i++)
	{
		   DisplayData[i] = DIG_CODE[i];	
	}	

	while(1)
	{
		   DigDisplay();
		   
	}				
}

在C51单片机中,要实现数码管0到9的显示,通常会使用7段LED数码管,它有7个发光二极管组成,可以组合表示0-9这十个数字。以下是基本步骤: 1. **配置IO口**:首先需要将数码管的数据线连接到单片机的IO口中,如P0、P1等,并设置为输出模式。 2. **初始化**:编写程序初始化数码管,包括清零、置位控制字以及动态显示码段的选择。 3. **码段选择**:对于七段数码管,每个数字对应一种特定的段选信号,比如A-G代表每个二极管的状态。通过改变IO口的值来选择相应的段。 4. **编码显示**:每个数字都有对应的编码,例如0-9分别对应0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F 和 0x6F。将数字转换成对应的8位二进制数,然后按顺序点亮相应的二极管。 5. **动态扫描**:为了减少闪烁,通常采用动态扫描的方式,即一次只点亮一个数码管的某一位置,快速交替变化显示数码管,让人眼感觉是一直亮着。 以下是一个简化的示例代码片段: ```c #include <reg52.h> sbit D0 = P0^4; //假设P0.4为数码管的第一段 ... //其他段定义类似 void display(int num) { if (num >= 0 && num <= 9) { switch (num) { case 0: D0 = 1; ... G7 = 1; break; ... // 其他9个数字的对应段设置 } // 扫描线延时,这里省略 } } void main() { while(1) { display(0); // 显示数字0 delay_ms(50); // 等待一段时间再切换到下一个数字 ... // 循环显示其他数字 } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值