历史上的今天
返回首页

历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2020年08月27日 | 数码管动态扫描显示01234567显示

2020-08-27 来源:51hei

原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。


相关原理:

数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为A,B,C,D,E,F,G,H。

搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。也就是把B,E,H(小数点)不亮,其余全亮。根据硬件的接法我们编出以下程序。当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。


LOOP:
CLR P2.7 ;选中最后的数码管
SETB P0.7 ;B段不亮
SETB P0.5 ;小数点不亮
SETB P0.1 ;C段不亮
CLR P0.2 ;其他都亮
CLR P0.3
CLR P0.4
CLR P0.6
CLR P0.0
JMP LOOP ;跳转到开始重新进行
END
把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。
也许你会说:显示1个2字就要10多行程序,太麻烦了。
显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮为1(高电平)是灭。从高往低排列,(p0.7_p0.0)写成二进制为01111110, 把他转化为16进制则为A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格, 以后直接调用就行了。

有了这个表格上面显示一个2的程序则可简化为:
LOOP:
CLR P2.7 ;选中左边的数码管
MOV P0,#0A2H ;送数字2的代码到P0口
JMP LOOP ;跳转到开始重新进行
END

原理图中把所有数码管的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,由8个PNP的三极管,来控制这8位哪一位工作,例如上面的例子中我们选中的是P2.7.就是最后的一位亮了. 同样的如果要第一位亮, 只需要把程序CLR P2.7改为CLR P2.0即可。

在这里就有了一个矛盾, 所有数码管的8个笔划段a-h同名端连在一起, 那么在一个屏幕上如何显示0,1,2,3,4,5这样不同的数字呢? 的确, 在这样的接法中,同一个瞬间所有的数码管显示都是相同的, 不能显示不同的数字。在单片机里,首先显示一个数, 然后关掉.然后显示第二个数,又关掉, 那么将看到连续的数字显示,轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。


例如数码管显示01234567这么8个数,在单片机中实际的工作流程如下:先打开P2.0,送0, 然后关掉P2.0,打开P2.1送1, 再关掉P2.1,打开P2.2 送2 , 依次向下,由于速度足够快, 那么我们将连续的看到01234567这8个数。
程序运行照片:

1、接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51.
2、接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52.

程序流程图:

汇编语言参考程序:

ORG 0000H
AJMP MAIN
ORG 0080H
MAIN:
CLR P2.0 ;选中第一个数码管
MOV P0,#28H ;显示0
LCALL DELAY ; 调用延时
MOV P0,#0FFH ;关显示
SETB P2.0
CLR P2.1 ;选中第二个数码管
MOV P0,#7EH ;显示1
LCALL DELAY
MOV P0,#0FFH
SETB P2.1
CLR P2.2 ;选中第三个数码管
MOV P0,#0A2H ;显示2
LCALL DELAY
MOV P0,#0FFH
SETB P2.2
CLR P2.3 ;选中第四个数码管
MOV P0,#62H ;显示3
LCALL DELAY
MOV P0,#0FFH
SETB P2.3
CLR P2.4 ;选中第五个数码管
MOV P0,#74H ;显示4
LCALL DELAY
MOV P0,#0FFH
SETB P2.4
CLR P2.5 ;选中第六个数码管
MOV P0,#61H ; 显示5
LCALL DELAY
MOV P0,#0FFH
SETB P2.5
CLR P2.6 ;选中第七个数码管
MOV P0,#21H ; 显示6
LCALL DELAY
MOV P0,#0FFH
SETB P2.6
CLR P2.7 ;选中第八个数码管
MOV P0,#7AH ; 显示7
LCALL DELAY
SETB P2.7
MOV P0,#0FFH
AJMP MAIN ;重新开始
DELAY: ;延时子程序
MOV R7,#2
D1: MOV R6,#25
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END


c语言参考程序:

#include //头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define DIGI P0 //宏定义,将P1口定义为数码管
#define SELECT P2 //宏定义,将P2定义为数码管选择口
uchar digivalue[]={0x28,0x7e,0x0a2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
//显示的数字数组,依次为0,1,..,9
uchar select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //选择数码管数组,依次选择1,2,..,8
void delay() //延迟函数,决定数码管跳变的间隔时间
{
uchar ii=200; //若发现数码管闪烁,调节这里即可
while(ii--);
}
char code SST516[3] _at_ 0x003b; //仿真器插入代码
main() //主函数
{
uchar i=0;
while(1)
{
for(i=0;i<8;i++) //8个数码管轮流显示
{
SELECT=select[ i]; //选择第i个数码管
DIGI=digivalue[ i]; //显示i
delay();
}
}
}


推荐阅读

史海拾趣

德丰(DEFOND)公司的发展小趣事

德丰影业股份有限公司(简称“德丰影业”)成立于2013年,由李纪丰担任董事长兼总经理。公司自成立以来,一直致力于打造高品质的影视文化产品,涵盖了电影、电视剧、网剧等多个领域。德丰影业凭借对市场的敏锐洞察力和对影视艺术的执着追求,成功投资并制作了一系列备受观众喜爱的影视作品。公司的发展壮大不仅为观众带来了丰富的视觉盛宴,也为中国影视产业的繁荣发展做出了积极贡献。

FINDER公司的发展小趣事

德丰金属材料有限公司(简称“德丰金属”)是一家专业从事铝合金建筑型材加工的企业。随着市场竞争的加剧和环保要求的提高,公司意识到必须加快转型升级的步伐。为此,德丰金属加大了研发投入和技术改造力度,成功开发出了一系列符合绿色环保标准的新型铝合金型材产品。同时,公司还积极拓展国际市场,与多家国外知名企业建立了长期稳定的合作关系。通过不断的努力和创新,德丰金属成功实现了从传统制造业向绿色环保型制造业的转型升级。

ETI Systems公司的发展小趣事

随着公司业务的不断发展壮大,ETI Systems开始将目光投向国际市场。公司积极参加国际电子产品展览和技术交流活动,与来自世界各地的客户和合作伙伴建立了紧密的联系。同时,ETI Systems也加大了在海外市场的投入力度,通过设立分公司和办事处等方式,进一步拓宽了国际市场渠道。这种国际化战略的实施,为ETI Systems的持续发展注入了新的活力。

DYMO公司的发展小趣事

为了扩大市场份额,DYMO公司积极寻求与各大零售商和办公用品供应商的合作。通过与这些合作伙伴建立紧密的合作关系,DYMO公司的产品得以更广泛地进入市场,并被更多的消费者所熟知。此外,DYMO公司还积极开拓国际市场,将其产品销往全球各地。

Altmustech公司的发展小趣事

创新是Altmustech公司发展的核心动力。公司不断投入研发资金,引进优秀人才,推动技术创新和产品升级。从最初的半导体芯片到后来的智能设备、物联网解决方案,Altmustech始终站在技术前沿,引领行业发展趋势。这种持续的创新精神使得公司在激烈的市场竞争中始终保持领先地位。

Gang Song Electronics Co Ltd公司的发展小趣事

GainSpan公司成立于行业技术日新月异的时代,专注于超低功耗WiFi系统芯片和模块的设计、开发和制造。其创始团队凭借对物联网(IoT)市场的敏锐洞察,认为低功耗技术将是未来智能家居、可穿戴设备和工业物联网等领域的关键。通过不断的技术研发,GainSpan逐渐在行业内建立了自己的技术优势,为后来的并购奠定了基础。

问答坊 | AI 解惑

关于手机射频

电波需要发射出去,必须频率高到一定程度才行,如现在GSM的900MHZ和1800MHZ。声音的频率很低,只有20HZ-20KHZ,这种频率的信是无法直接发射的,必须将其调制到高频上也是就是射频上才能发射,这就是射频的意思。 为了达到手机和基站的良好通迅,要 ...…

查看全部问答>

串行口应用编程实例

串行口应用编程实例 1. 串口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就可以扩展一个并行口。 例:用8051串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发 ...…

查看全部问答>

是不是我的开发板mic坏了,还是有什么问题我没注意到。。。请大家提醒我一下

如题,想写个基于wince的语音方面的程序,但是我发现开发板自带的录音程序都录不进声音,请问是我的MIC坏了,还是wince设置有问题???…

查看全部问答>

有需要上海上网专线的企业不?企业宽带

上海电信上网专线内部价*企业宽带。 本人在上海电信设计院上班,现推出企业光纤专线上网电信内部价。 电话:15900845324,QQ:9331631,MSN:qq9331631@hotmail.com 电信光纤专线价格    4个IP地址1个可用:(年付9折) 专线带宽&n ...…

查看全部问答>

有懂USB固件开发的大大吗?求教一个问题

我有一个DSP芯片,包含USB2.0控制器,可以通过编程实现USB的功能 现在有一个问题,当USB线与主机相连时,设备端可以收到中断,从而知道USB接入,然后,我想编程实现把USB作为设备或者单纯供电,我实现的思路是当中断来时,通过按键选择是作为设备 ...…

查看全部问答>

像51一样操作STM32的IO

方法应该有人发过,我只是总结一下 //----------------------------------------------------------------------------------------------------- //别名区    ADDRESS=0x4200 0000 + (0x0001 100C*0x20) + (bitx*4) ;bitx:第x位 ...…

查看全部问答>

STVisualDevelop编译程序问题!!请教各位!!!

使用STM8S105S6芯片,在ST Visual Develop Version 4.1.2 软件下编写程序,遇到一个问题请教各位。 在工程中,有个函数没有被调用,当把这个函数删除,或者把这个函数内的程序代码部分或全部屏蔽时,报错如下: Running Linkerclnk -lD:\ ...…

查看全部问答>

求助:读取flash问题

我用的单片机是MSP430F149,我想把保存在flash中的数据读取出来,请问有什么办法?谢谢…

查看全部问答>

关于串口的重映射

GPIO_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus;USART_InitTypeDef  USART_InitStructure;    //定义一个结构体NVIC_InitTypeDef NVIC_InitStructure;/* Private function prototypes ------------------- ...…

查看全部问答>