完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言
在这里我将简单介绍数码管的点亮原理及基本编程(点个赞吧求求了) 提示:以下是本篇文章正文内容,下面案例可供参考 一、点亮数码管 学会如何静态点亮一排数码管,并学会动态点亮。 1.静态点亮 (1)静态点亮原理: 单个数码管是由八个发光二极管连接而成,通过控制不同led点亮,可以使之显示不同的数字。 数码管通常有两种不同的接法,共阴极和共阳极,共阴极顾名思义就是讲八个二极管的阴极连接在一起,这样根据二极管导通原理,通过控制不同二极管阳极电平就可以控制数码管显示不同的数字。 控制多个数码管要控制两点 一、选择亮那个数码管。 二、亮的数码管亮什么数字。 选择数码管操作称为位选,根据自己的开发板原理图找到位选对应的管脚,以共阴极为例。要在编程时执行选中操作,只要给对应管脚低电平即可。段选同样。 我使用的开发板是不同数码管的段选管脚是串联的 如果每个单独连接占用管脚太多,很浪费硬件资源,所以采用多位串联控制。 注意区分两个概念即段选和位选;位选指数码管对应的位,例如图共有八个数码管,位选就是选中哪一个数码管操作,段选则是控制数码管显示什么数字。 静态显示为了缩短代码长度,一般都是采用总线式编程,显示数字共阴共阳互为反。 (2)总线控制各个数字显示代码 uchar code smgduan[16]={0x3f,0x06,0x6b,0x4f,0x66,0x6d,0x7d,0x07,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 这里采用定义数组方式,smgduan[n]对应相应显示的数字 2、动态数码管点亮 (1)点亮原理 静态数码管点亮原理十分简单,编程在这里省去。如果想要控制多个数码管显示不同的数字,需要进行动态点亮。 例如上图中八位数码管,我们可以看到,如果进行操作使八个数码管同时点亮,由于这八个数码管段选段是串联在一起的,所以同一时刻这些数码管只能显示同样的数字。 而动态显示,就是利用减少段选线,分开位选线,利用位选线不同时选择通断,改变段选数据来实现的。比如在第一次选中第一位数码管时,给段选数据 0,下一次位选中第二位数码管时显示 1。 为了在显示 1 的时候,0 不会消失( 当然实际上是消失了),必须在人肉眼观察不到的时间里再次点亮第一次点亮的 0。 而这时就需要记住,人的肉眼正常情况下只能分辨变化超过 24ms 间隔的运动。 也就是说,在下一次点亮 0 这个数字的时间差不得大于 24ms。这时就会发现,数 码管点亮是在向右或者向左一位一位点亮, 形成了动态效果。 如果把间隔时间 改长就能直接展现这现象。 (2)点亮硬件基础 上面两图是此次编程所需用到的芯片。 (3)代码实现 #include "reg52.h" //此文件中定义了单片机的一些特殊功能 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显 示0~F 的值 /**************************************************************** *************** * 函 数 名 : delay * 函数功能 : 延时函数,i=1 时,大约延时 10us ***************************************************************** **************/ void delay(u16 i) { while(i--); } /**************************************************************** *************** * 函 数 名 : DigDisplay * 函数功能 : 数码管动态扫描函数,循环扫描 8 个数码管显示 ***************************************************************** **************/ void DigDisplay() { u8 i; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=1;LSB=1;LSC=1; break;//显示第 0 位 case(1): LSA=0;LSB=1;LSC=1; break;//显示第 1 位 case(2): LSA=1;LSB=0;LSC=1; break;//显示第 2 位 case(3):普中 51 单片机开发攻略 www.prechin.cn 104 LSA=0;LSB=0;LSC=1; break;//显示第 3 位 case(4): LSA=1;LSB=1;LSC=0; break;//显示第 4 位 case(5): LSA=0;LSB=1;LSC=0; break;//显示第 5 位 case(6): LSA=1;LSB=0;LSC=0; break;//显示第 6 位 case(7): LSA=0;LSB=0;LSC=0; break;//显示第 7 位 } P0=smgduan;//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } } /**************************************************************** *************** * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 ***************************************************************** **************/ void main(){ while(1){ DigDisplay(); //数码管显示函数 } } |
|
|
|
只有小组成员才能发言,加入小组>>
2629 浏览 0 评论
834浏览 1评论
293浏览 1评论
609浏览 0评论
335浏览 0评论
555浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-23 23:27 , Processed in 1.180897 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191