0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

跑马灯程序控制发光二极管设计方案

454398 来源:博客园 作者:Christal_R 2020-10-20 14:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. I/O 口的结构及特点

Atmega8 有23 个I/O 引脚,分成3 个8 位的端口B、C 和D,其中C 口只有7 位

Atmega8 采用3个8位寄存器来控制I/O端口,它们分别是:方向寄存器DDRx、数据寄存器PORTx、输入引脚寄存器PINx

x为B或C 或D,分别代表B口、C口或D 口;

n为0~7,代表寄存器中的位置;

其中DDRx 和PORTx 是可读写寄存器,而PINx 为只读寄存器;

每个I/O引脚内部都有独立的上拉电阻电路,可通过程序设置内部上拉电阻是否有效。

方向寄存器DDRx中的每个位用于控制I/O口一个引脚的输入输出方向,即控制I/O口的工作模式为输出模式还是输入模式。

当DDRxn=1 时,I/O 的Pxn 引脚处于输出模式。此时

若PORTxn=1时,I/O引脚呈高电平,同时可提供输出20mA 的电流

若PORTxn=0时,I/O引脚呈低电平,同时可吸收20mA 的电流。

当 DDRxn=0 时,I/O 的Pxn 引脚处于输入模式。此时

引脚寄存器PINxn 中的数据就是外部引脚的实际电平;

此时可通过PORTxn 的设置可控制内部的上拉电阻使用或不使用。

注意事项:

使用AVR的I/O 口,首先应正确设置其工作模式(输入模式还是输出模式),设置DDRx;

当I/O工作在输入模式(DDRxn=0)时,读取引脚上的电平应取PINxn的值,而不是PORTxn的值;

当I/O口工作在输入模式(DDRxn=0)时,应根据实际情况设置内部上拉电阻,利用内部上拉电阻可以节省外部上拉电阻;

将I/O空工作模式由输出模式设置为输入模式后,必须等待一个时钟周期后才能正确的读到外部引脚的值

2. 跑马灯程序控制发光二极管

我们选择用PD0~PD7来控制8个发光二极管循环点亮,从而实现“跑马灯”

所以电路图如图所示:

问:如果改变 delay_ms 的时间会变的怎样呢?

=> 跑马灯的变换速度改变。

问:如果直接让 PORTD = ( 1<

=>PORTD = ~( 1<

=>PORTD = ( 1<

问:能不能添加或修改程序,改变灯亮的顺序和时间呢?

=> 改变循环条件就可以改变亮灯的顺序,如把i++改为i+=2,即可实现隔一盏灯亮一个;

=> 亮灯时间改变延迟时间delay_ms()的传入参数即可。

3. 单个LED数码管练习

数码管的a、b、c、d、e、f、g七个发光二极管加不同的电平,二极管显示不同亮暗的组合就可以显示不同的字形;

以1为高电平,0为低电平,给出字形码表:

即0x3F表示的就是字型‘0’,0x06表示的就是字型‘1’......;

所以直接把这种对应关系存到一个Char型数组里(一个Char型是8位);

想要对应的a、b、c、d、e、f、g七个发光二极管展示亮与暗,我们选用PD0~7这8位来控制;

如:想要展示字型‘0’=>‘0’对应字形码是0x3F=>其中发光二极管的a~f均为亮状态=>PD0~5均为低电平(低电平亮灯)。

我们用一个LED数码管显示数字0~9,仍然使用PD口控制,循环显示数字

电路图如图所示:

了解理论知识后便可以开始编程:(延时函数与上面相同)

单个LED数码管

问:想显示A~F 怎么办呢?

=> num[] 数组再添加多几个元素,分别是A~F对应的字形码。

问:能不能显示像H,L 一类的字母呢?

=> 能,想要显示字母H,只需要二极管的b、c、e、f、g亮即可;

=> 想要显示字母L,只需要二极管的d、e、f亮即可。

问:改变了delay_ms 函数的延时时间会怎样呢?

=> 数字之间的显示间隔边长。

问:要显示小数点我们应该怎么办呢?

=> 在字形码表中可以看出,最高位h是没有作用的,所以可以用h位来控制小数点,当最高位为1时小数点亮,为0时不亮;

=> 如0x5B表示‘2’,那么0x5B + 0x80表示‘2.’。

4.多个LED数码管实验

静态显示:3小节的内容便是静态展示

动态显示:采用各数码管循环轮流的显示的方法,当循环频率较高时,利用人眼的暂留特性,感觉不到数码管的闪烁,就像看到数码管在同时发光一样,类似电影的原理。

两者对比:动态显示比静态显示占用资源少,耗电少;但是稳定性却差,程序设计也更为复杂,MCU负担重。

动态显示需要一个接口完成字形码的输出,另外一个接口完成各数码管的轮流显示;

我们要实现从“000.0”到“999.9”的数字变化显示过程;

用PB口做字形码的输出口,用PC0~PC3控制数码管的轮转流显示;

从左数起,其中PC0表示第0个数,PC1表示第1个数,PC2表示第3个数(该数显示小数点),PC3表示第4个数;所以只有第三个数是特殊的;

参考原理图如下:

编程实现代码

1 void main()
2 {
3 //PB口做字形码的输出口,PC0~PC3控制数码管的轮流显示
4 unsigned char i,j;
5 static unsigned char LedNum[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
6 //显示小数点要加0x80
7 unsigned char CountNum[4] = {0,0,0,0}; //计数的百、十、个位和十分位
8 DDRB = 0xFF; //设置B口为输出模式
9 PORTB = 0xFF; //置高电平
10 DDRC = 0x0F;
11 PORTC = 0xFF;
12
13 while(1)
14 {
15 i=0; //用于PC0~PC3的轮转
16 for(j=0;j<10;j++) //依次显示4S"000.0"
17 {
18 i = ++i%4;
19 PORTC&=~(1<
20 if(2==i) //如果是第三个数字则加个小数点显示
21 PORTB = LedNum[0] + 0x80;
22 else //其余情况都没有小数点显示
23 PORTB = LedNum[0];
24 delay_ms(10);
25 PORTC|= 0xFF;//复位,切换到下一个输出口
26 }
27 CountNum[0] = CountNum[1] = CountNum[2] = CountNum[3] = 0; //用于实现4位数的加一变化
28 while(1)
29 {
30 //计数加1,满9进位、后置0
31 if(CountNum[3]++==9)
32 {
33 CountNum[3] = 0;
34 if(9 == CountNum[2]++)
35 {
36 CountNum[2] = 0;
37 if(9 == CountNum[1]++)
38 {
39 CountNum[1] = 0;
40 CountNum[0]++;
41 }
42 }
43 }
44 //显示计数值
45 for(i=0;i<4;i++)
46 {
47 PORTC&=~(1<
48 if(2 == i)
49 PORTB = LedNum[CountNum[i]] + 0x80;
50 else
51 PORTB = LedNum[CountNum[i]];
52 delay_ms(10);
53 PORTC|=0xFF;
54 }
55 //999.9的时候退出
56 if(CountNum[0]==9 && CountNum[1]==9 && CountNum[2]==9 && CountNum[3]==9)
57 break;
58 }
59 }
60 }
多个LED数码管


编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 发光二极管
    +关注

    关注

    14

    文章

    1250

    浏览量

    69401
  • led数码管
    +关注

    关注

    2

    文章

    73

    浏览量

    23735
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    理想二极管是什么二极管?深度解析内部实现逻辑

      大家好啊,想必大家一定见过下图的这个经典的电路图,这个图在树莓派3B的电路板上有使用,从原理图的注释也很容易猜到,这是电路是分立器件搭建的一个理想二极管电路,它实现的功能是单向导通,即防止电路板
    的头像 发表于 03-24 07:36 2w次阅读
    理想<b class='flag-5'>二极管</b>是什么<b class='flag-5'>二极管</b>?深度解析内部实现逻辑

    发光二极管(LED)为什么要串联电阻?

    发光二极管(LED)为什么要串联电阻? 我们在电路里接LED时,必须串联一个小电阻,这是保护LED不被烧坏的关键,绝不能省略。 LED属于非线性器件,它的导通电压固定(红光约1.8V,白光约3.2V
    发表于 03-11 22:43

    激光二极管的特性与LIV测试挑战

    激光二极管概述 激光二极管(Laser Diode,LD)是一种基于半导体PN结的发光器件,其通过载流子复合过程中的受激辐射产生激光。 在谐振腔的光学放大作用下,激光二极管可输出单色性
    的头像 发表于 03-11 14:11 546次阅读
    激光<b class='flag-5'>二极管</b>的特性与LIV测试挑战

    二极管的原理

    怎么工作?二极管最主要的一个能力就是可以控制电路中电流流动的能力,也就是单向导通性。与通过抵抗或存储的无源器件不同,二极管在电流流经设备时主动地深入了解电流的涨落。下面有两种方法可以展示二极管
    发表于 12-22 13:15

    ESD静电二极管的基本工作原理

    重要。ESD静电二极管是一种广为人知的静电防护解决方案。下面介绍ESD静电二极管的工作原理。ESD静电二极管利用pn结二极管的齐纳击穿*。如
    的头像 发表于 12-14 22:02 1276次阅读
    ESD静电<b class='flag-5'>二极管</b>的基本工作原理

    二极管的妙用

    “向我们通常忽视的元件致敬。”二极管的妙用在今天的电子学课程中,二极管可能是最被忽视的元件。关于电阻、电容和电感的原理已有连篇累牍的著述;但二极管的内容却不多见。二极管既没有线性电路那
    的头像 发表于 11-26 07:35 1654次阅读
    <b class='flag-5'>二极管</b>的妙用

    Vishay VSMA1094750X02大功率红外发光二极管技术解析

    Vishay VSMA1094750X02大功率红外发光二极管是星形产品组合的一部分,设有波长为940nm的红外发光二极管。Vishay VSMA1094750X02设计采用双堆叠发射器芯片。该器件
    的头像 发表于 11-13 14:52 895次阅读

    VSMA1085750X02大功率红外发光二极管技术解析与应用指南

    Vishay VSMA1085750X02大功率红外发光二极管属于星形产品组合的一部分。 Vishay VSMA1085750X02是一款850nm红外发光二极管,具有双堆叠发射器芯片,可实现最大辐射功率。该器件采用42毫米芯片尺寸,可在1.5A DC下工作,并可承受高
    的头像 发表于 11-13 14:43 906次阅读

    #夜光漂 #鱼漂灯 #发光二极管 深圳瑞沃微半导体夜光漂 新型鱼漂灯丝

    发光二极管
    深圳瑞沃微半导体
    发布于 :2025年10月20日 10:35:33

    肖特基二极管怎么用+原理

    肖特基二极管与普通硅二极管(PN结二极管)最核心的结构差异,就在于它没有P+外延层(或P型半导体层),取而代之的是金属-半导体结(肖特基结)。 图表1 肖特基二极管的结构差异 1.更低
    的头像 发表于 09-22 16:40 5066次阅读
    肖特基<b class='flag-5'>二极管</b>怎么用+原理

    洲光源红外发射二极管ZIR0342C概述

    红外发射二极管 ZIR0342C 是一种高辐射发光二极管,透明的封胶外形。该材料与光电晶体、光电二极管和红外接收模块进行配对。
    的头像 发表于 08-20 17:21 1328次阅读
    洲光源红外发射<b class='flag-5'>二极管</b>ZIR0342C概述

    洲光源红外发射二极管ZIR053概述

    ZIR053 是一种高辐射发光二极管,蓝色透明的封胶外形。该材料与光电晶体、光电二极管和红外接收模块进行配对。
    的头像 发表于 08-18 10:00 1239次阅读
    洲光源红外发射<b class='flag-5'>二极管</b>ZIR053概述

    Micro LED微发光二极管:改进纳米材料成为下一代显示技术的核心

    台面尺寸小于100微米的微发光二极管(Micro-LED),与液晶显示器(LCD)和有机发光二极管(OLED)等主流显示技术相比,具有响应速度快、寿命长、亮度高和可靠性强等优点。特别是随着近年来增强
    的头像 发表于 08-11 14:54 2463次阅读
    Micro LED微<b class='flag-5'>发光二极管</b>:改进纳米材料成为下一代显示技术的核心

    洲光源红外发射二极管ZHIR253C-80概述

    ZHIR253C-80 是一种高辐射发光二极管,透明的封胶外形。
    的头像 发表于 07-16 15:11 1485次阅读
    洲光源红外发射<b class='flag-5'>二极管</b>ZHIR253C-80概述

    LED发光二极管的原理分析

    LED发光二极管,一种半导体元件,当向其中注入电流时会发光
    的头像 发表于 07-16 10:08 3169次阅读
    LED<b class='flag-5'>发光二极管</b>的原理分析