数码管的段选和位选

打个比方吧,比如你要控制8个数码管,依次是1、2…… 8。你要选择控制哪个数码管(比如第1个),这就是位选,有选择位置的意思。
然后呢,你要让第1个数码管显示“1”。你就要控制第一个数码管的“a、b……g”也就是让b、c=0,a、d、e、f、g=1(或者b、c=1,a、d、e、f、g=0),这就是段选,即选择数码管的哪一笔段。

单片机实现数码管段选是单片机控制数码管显示的关键步骤。数码管通常有七段(或八段,包括小数点)小数点,每一段通过一个引脚控制则是择哪一个数码管显示。 ### 段选 段选是指择哪一段亮起。数码管的每一段通常用字母A到G表示,小数点用DP表示。每个段对应一个引脚,通过控制这些引脚的电压高低来控制相应段是否亮起。 例如,使用共阴极数码管时: - 当某一段的引脚为高电平时,该段亮起。 - 当某一段的引脚为低电平时,该段熄灭。 ### 是指择哪一个数码管显示。多个数码管可以通过引脚来择哪一个数码管显示。引脚通常连接到单片机的其他引脚,通过控制这些引脚的电压高低来择哪一个数码管显示。 例如,使用共阴极数码管时: - 当某一的引脚为低电平时,该数码管中。 - 当某一的引脚为高电平时,该数码管不显示。 ### 实现方法 1. **硬件连接**:将数码管的段引脚连接到单片机的I/O口,将引脚也连接到单片机的I/O口。 2. **软件编程**:编写程序控制段选的引脚电平。 ```c #include <reg51.h> #define uint unsigned int #define uchar unsigned char sbit a = P2^0; sbit b = P2^1; sbit c = P2^2; sbit d = P2^3; sbit e = P2^4; sbit f = P2^5; sbit g = P2^6; sbit dp = P2^7; sbit d1 = P1^0; sbit d2 = P1^1; sbit d3 = P1^2; sbit d4 = P1^3; void delay(uint ms) { uint i, j; for(i = ms; i > 0; i--) for(j = 110; j > 0; j--); } void display(uchar num) { switch(num) { case 0: a = 0; b = 0; c = 0; d = 0; e = 0; f = 0; g = 1; break; case 1: a = 1; b = 0; c = 0; d = 1; e = 1; f = 1; g = 1; break; case 2: a = 0; b = 0; c = 1; d = 0; e = 0; f = 1; g = 0; break; case 3: a = 0; b = 0; c = 0; d = 0; e = 1; f = 1; g = 0; break; case 4: a = 1; b = 0; c = 0; d = 1; e = 1; f = 0; g = 0; break; case 5: a = 0; b = 1; c = 0; d = 0; e = 1; f = 0; g = 0; break; case 6: a = 0; b = 1; c = 0; d = 0; e = 0; f = 0; g = 0; break; case 7: a = 0; b = 0; c = 0; d = 1; e = 1; f = 1; g = 1; break; case 8: a = 0; b = 0; c = 0; d = 0; e = 0; f = 0; g = 0; break; case 9: a = 0; b = 0; c = 0; d = 0; e = 1; f = 0; g = 0; break; default: a = 1; b = 1; c = 1; d = 1; e = 1; f = 1; g = 1; break; } } void main() { while(1) { d1 = 0; d2 = 1; d3 = 1; d4 = 1; display(1); delay(5); d1 = 1; d2 = 0; d3 = 1; d4 = 1; display(2); delay(5); d1 = 1; d2 = 1; d3 = 0; d4 = 1; display(3); delay(5); d1 = 1; d2 = 1; d3 = 1; d4 = 0; display(4); delay(5); } } ``` ### 总结 通过段选控制,单片机可以驱动多个数码管显示不同的数字。段选控制具体显示的数字,择具体显示的数码管
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值