精华内容
下载资源
问答
  • 单片机汇编led显示程序
  • 单片机数码管动态显示程序实验,数码管显示一般分静态显示及动态显示两种驱动方式,静态显示占用口线比较多,本文介绍的是如何实现数码管动态显示,应该说数码管动态显示是单片机外部指令输出的重要途径,因此如何...

    单片机数码管动态显示程序实验,数码管显示一般分静态显示及动态显示两种驱动方式,静态显示占用口线比较多,本文介绍的是如何实现数码管动态显示,应该说数码管动态显示是单片机外部指令输出的重要途径,因此如何设计数码管以及数码管的工作原理、数码管显示的方法、数码管显示的抗干扰设计等在单片机系统设计中占有重要地位。这个例子在系统硬件的基础上设计了软件查询程序、软件延时程序(防止干扰),大致讲述了一种数码管动态显示的工作原理与读取方式。

    s1 bit p0.0 ;数码管位定义

    s2 bit p0.1

    s3 bit p0.2

    s4 bit p0.3

    s5 bit p0.4

    s6 bit p0.5

    s7 bit p0.6

    s8 bit p0.7

    LED_data equ p2 ;数码管数据定义

    org 00h ;程序开始

    jmp main ;主程序开始处

    org 030h ;主程序从30H开始

    main: MOV sp,#30h ;设置堆栈

    lcall rest ;调用初始化程序

    lcall pro_8led ;调用数码管显示程序

    jmp main ;返回

    ;********* 初始化程序 **************

    rest:MOV a,#00h ;清寄存器

    MOV b,#00h ;清寄存器

    MOV p0,#0 ;禁止数码管显示

    MOV p2,#255 ;

    MOV p1,0ffh ;禁止LED显示

    clr beep ;禁止蜂鸣器

    ret ;返回

    ;******** 数码管显示程序 ***************

    pro_8led:

    MOV b,#32 ;一共显示32个数字

    clr psw.3 ;重新设置寄存器组

    setb psw.4 ;

    MOV r0,#00h ;数据显示从0开始

    MOV r1,#01h ;数码管从第1个开始

    loop:MOV p0,r1 ;点亮当前数码管

    MOV a,r0 ;准备第一个数据

    MOV dptr,#tab_nu ;获得表头

    MOVc a,@a+dptr ;得到第一个数据

    MOV led_data,a ;输出到显示数据口

    lcall delay ; 500 ms 延时

    lcall delay ; 1 s 延时

    inc r0 ;准备下一个数据

    MOV a,r1 ;准备下一位数码管

    rlc a ;设置下一个数码管

    jc c1 ;8位全部显示,转移

    MOV r1,a ;否则,设置下一位

    djnz b,loop ;32个数没有显示完,返回显示

    ret ;否则返回主程序

    c1: MOV r1,#1 ;8位显示完,重新开始循环

    clr c ;设置显示位

    djnz b,loop ;32位显示完则返回重新显示

    ret ;否则返回到主程序

    ;************* 数码管显示 *******************************

    ;************* 软件延时 500ms *****************************

    delay: push psw ; 保存原来的寄存器内容

    clr psw.3 ;

    clr psw.4 ; 设置新的寄存器组

    MOV r0,#2 ; 延时参数1

    MOV r1,#250 ; 延时参数2

    MOV r2,#2 ; 延时参数3

    dl1:djnz r0,dl1 ; 延时循环1

    MOV r0,#250 ;

    dl2:djnz r1,dl1 ; 延时循环2

    MOV r0,#240 ;

    MOV r1,#248 ;

    dl3:djnz r2,dl1 ; 延时循环3

    nop ; 定时精度调整

    pop psw ; 恢复原来的寄存器

    ret ; 返回

    ;**********************************************************

    ;**********************************************************

    ;这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16

    ; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推

    tab_nu:

    db 0c0h, 0f9h, 0a4h, 0b0h, 99h , 92h , 82h, 0f8h ; 数字0-7 不带小数点代码

    db 80h , 90h, 88h , 83h , 0c6h, 0a1h, 86h, 8eh ; 数字8-f 不带小数点代码

    db 40h , 79h, 24h , 30h , 19h , 12h , 02h, 78h ; 数字0-7 带小数点代码 db 00h , 10h, 08h , 03h , 46h , 21h , 06h, 0eh ; 数字8-f 带小数点代码

    展开全文
  • 动态显示方法在 6 位数码管上分别显示 012345 六位数字 内附protues仿真(已搭建好)+ C语言源程序 + 实验指导
  • 一款基于单片机LED动态显示模块方案设计.pdf
  • 点阵的动画显示,说到底就是对多张图片分别进行取模,使用程序算法巧妙的切换图片,多张图片组合起来就成了一段动画了,我们所看到的动画片、游戏等等,它们的基本原理也都是这样的。上一节我们学了如何在点阵上画一...

    点阵的动画显示,说到底就是对多张图片分别进行取模,使用程序算法巧妙的切换图片,多张图片组合起来就成了一段动画了,我们所看到的动画片、游戏等等,它们的基本原理也都是这样的。

    上一节我们学了如何在点阵上画一个❤形,有时候我们希望这些显示是动起来的,而不是静止的。对于点阵本身已经没有多少的知识点可以介绍了,主要就是编程算法来解决问题了。比如我们现在要让点阵显示一个 I ❤ U 的动画,首先我们要把这个图形用取模软件画出来看一下,如图 7-10 所示。

    cf1b752b5a1d3ce777333e50b5eb8394.png

    图 7-10  上下移动横向取模

    这张图片共有 40 行,每 8 行组成一张点阵图片,并且每向上移动一行就出现了一张新图片,一共组成了 32 张图片。

    用一个变量 index 来代表每张图片的起始位置,每次从 index 起始向下数 8 行代表了当前的图片,250ms 改变一张图片,然后不停的动态刷新,这样图片就变成动画了。首先我们要对显示的图片进行横向取模,虽然这是 32 张图片,由于我们每一张图片都是和下一行连续的,所以实际的取模值只需要 40 个字节就可以完成,我们来看看程序。

    #include

    sbit ADDR0 = P1^0;

    sbit ADDR1 = P1^1;

    sbit ADDR2 = P1^2;

    sbit ADDR3 = P1^3;

    sbit ENLED = P1^4;

    unsigned char code image[] = { //图片的字模表

    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

    0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,

    0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,

    0x99,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,

    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

    };

    void main(){

    EA = 1; //使能总中断

    ENLED = 0; //使能 U4,选择 LED 点阵

    ADDR3 = 0;

    TMOD = 0x01; //设置 T0 为模式 1

    TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms

    TL0 = 0x67;

    ET0 = 1; //使能 T0 中断

    TR0 = 1; //启动 T0

    while (1);

    }

    /* 定时器 0 中断服务函数 */

    void InterruptTimer0() interrupt 1{

    static unsigned char i = 0; //动态扫描的索引

    static unsigned char tmr = 0; //250ms 软件定时器

    static unsigned char index = 0; //图片刷新索引

    TH0 = 0xFC; //重新加载初值

    TL0 = 0x67;

    //以下代码完成 LED 点阵动态扫描刷新

    P0 = 0xFF; //显示消隐

    switch (i){

    case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index+0]; break;

    case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index+1]; break;

    case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index+2]; break;

    case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index+3]; break;

    case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index+4]; break;

    case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index+5]; break;

    case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index+6]; break;

    case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index+7]; break;

    default: break;

    }

    //以下代码完成每 250ms 改变一帧图像

    tmr++;

    if (tmr >= 250){ //达到 250ms 时改变一次图片索引

    tmr = 0;

    index++;

    if (index >= 32){ //图片索引达到 32 后归零

    index = 0;

    }

    }

    }

    大家把这个程序下载到单片机上看看效果,一个 I ❤ U 一直往上走动的动画就出现了,现在还有哪位敢说我们工科同学不懂浪漫的?还需要用什么玫瑰花取悦女朋友吗?一点技术含量都没有,要玩就玩点高科技,呵呵。

    当然,别光图开心,学习我们还要继续。往上走动的动画我写出来了,那往下走动的动画,大家就要自己独立完成了,不要偷懒,一定要去写代码调试代码。瞪眼看只能了解知识,而能力是在真正的写代码、调试代码这种实践中培养起来的。

    展开全文
  • //以下代码完成 LED 点阵动态扫描刷新 P0 = 0xFF; //显示消隐 switch (i){ case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index][0]; break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index][1]; ...

    上下移动我们会了,那我们还想左右移动该如何操作呢?

    方法一、最简单,就是把板子侧过来放,纵向取模就可以完成。

    这里大家是不是有种头顶冒汗的感觉?我们要做好技术,但是不能沉溺于技术。技术是我们的工具,我们在做开发的时候除了用好这个工具外,也得多拓展自己解决问题的思路,要慢慢培养自己的多角度思维方式。

    那把板子正过来,左右移动就完不成了吗?当然不是。大家慢慢的学多了就会培养了一种感觉,就是一旦硬件设计好了,我们要完成一种功能,大脑就可以直接思考出来能否完成这个功能,这个在我们进行电路设计的时候最为重要。我们在开发产品的时候,首先是设计电路,设计电路的时候,工程师就要在大脑中通过思维来验证板子硬件和程序能否完成我们想要的功能,一旦硬件做好了,做好板子回来剩下的就是靠编程来完成了。只要是硬件逻辑上没问题,功能上软件肯定可以实现。

    当然了,我们在进行硬件电路设计的时候,也得充分考虑软件编程的方便性。因为我们的程序是用 P0 来控制点阵的整行,所以对于我们这样的电路设计,上下移动程序是比较好编写的。那如果我们设计电路的时候知道我们的图形要左右移动,那我们设计电路画板子的时候就要尽可能的把点阵横过来放,有利于我们编程方便,减少软件工作量。

    方法二、利用二维数组来实现,算法基本上和上下移动相似。

    二维数组,前边提过一次,他的使用其实也没什么复杂的。它的声明方式是:

    数据类型 数组名[数组长度 1][数组长度 2];

    与一位数组类似,数据类型是全体元素的数据类型,数组名是标识符,数组长度 1 和数组长度 2 分别代表数组具有的行数和列数。数组元素的下标一律从 0 开始。

    例如:unsigned char a[2][3];声明了一个具有 2 行 3 列的无符号字符型的二维数组 a。

    二维数组的数组元素总个数是两个长度的乘积。二维数组在内存中存储的时候,采用行优先的方式来存储,即在内存中先存放第 0 行的元素,再存放第一行的元素......,同一行中再按照列顺序存放,刚才定义的那个 a[2][3]的存放形式就如表 7-1 所示。

    表7-1 二维数组的物理存储结构

    a[0][0]

    a[0][1]

    a[0][2]

    a[1][0]

    a[1][1]

    a[1][2]

    二维数组的初始化方法分两种情况,我们前边学一维数组的时候学过,数组元素的数量可以小于数组元素个数,没有赋值的会自动给 0。当数组元素的数量等于数组个数的时候,如下所示:

    unsigned char a[2][3] = {{1,2,3}, {4,5,6}};

    或者是

    unsigned char a[2][3] = {1,2,3,4,5,6};

    当数组元素的数量小于数组个数的时候,如下所示:

    unsigned char a[2][3] = {{1,2}, {3,4}};

    等价于

    unsigned char a[2][3] = {1,2,0,3,4,0};

    而反过来的写法

    unsigned char a[2][3] = {1,2,3,4};

    等价于

    unsigned char a[2][3] = {{1,2,3}, {4,0,0}};

    此外,二维数组初始化的时候,行数可以省略,编译系统会自动根据列数计算出行数,但是列数不能省略。

    讲这些,只是为了让大家了解一下,看别人写的代码的时候别发懵就行了,但是我们今后写程序的时候,按照规范,行数列数都不要省略,全部写齐,初始化的时候,全部写成unsigned char a[2][3] = {{1,2,3}, {4,5,6}};的形式,而不允许写成一维数组的格式,防止大家出错,同时也是提高程序的可读性。

    那么下面我们要进行横向做 I ❤ U 的动画了,先把我们需要的图片画出来,再逐一取模,和上一张图片类似的是,我们这个图形共有 30 张图片,通过程序每 250ms 改变一张图片,就可以做出来动画效果了。但是不同的是,我们这个是要横向移动,横向移动的图片切换时的字模数据不是连续的,所以这次我们要对 30 张图片分别取模,如图 7-11 所示。

    58d93ed7fff0994ca23445818307c891.png

    图 7-11  横向动画取模图片

    图 7-11 中最上面的图形是横向连在一起的效果,而实际上我们要把它分解为 30 个帧,每帧图片单独取模,取出来都是 8 个字节的数据,一共就是 30*8 个数据,我们用一个二维数组来存储它们。

    #include

    sbit ADDR0 = P1^0;

    sbit ADDR1 = P1^1;

    sbit ADDR2 = P1^2;

    sbit ADDR3 = P1^3;

    sbit ENLED = P1^4;

    unsigned char code image[30][8] = {

    {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, //动画帧 1

    {0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F}, //动画帧 2

    {0xFF,0x3F,0x7F,0x7F,0x7F,0x7F,0x7F,0x3F}, //动画帧 3

    {0xFF,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F}, //动画帧 4

    {0xFF,0x0F,0x9F,0x9F,0x9F,0x9F,0x9F,0x0F}, //动画帧 5

    {0xFF,0x87,0xCF,0xCF,0xCF,0xCF,0xCF,0x87}, //动画帧 6

    {0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3}, //动画帧 7

    {0xFF,0xE1,0x73,0x73,0x73,0xF3,0xF3,0xE1}, //动画帧 8

    {0xFF,0x70,0x39,0x39,0x39,0x79,0xF9,0xF0}, //动画帧 9

    {0xFF,0x38,0x1C,0x1C,0x1C,0x3C,0x7C,0xF8}, //动画帧 10

    {0xFF,0x9C,0x0E,0x0E,0x0E,0x1E,0x3E,0x7C}, //动画帧 11

    {0xFF,0xCE,0x07,0x07,0x07,0x0F,0x1F,0x3E}, //动画帧 12

    {0xFF,0x67,0x03,0x03,0x03,0x07,0x0F,0x9F}, //动画帧 13

    {0xFF,0x33,0x01,0x01,0x01,0x03,0x87,0xCF}, //动画帧 14

    {0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7}, //动画帧 15

    {0xFF,0xCC,0x80,0x80,0x80,0xC0,0xE1,0xF3}, //动画帧 16

    {0xFF,0xE6,0xC0,0xC0,0xC0,0xE0,0xF0,0xF9}, //动画帧 17

    {0xFF,0x73,0x60,0x60,0x60,0x70,0x78,0xFC}, //动画帧 18

    {0xFF,0x39,0x30,0x30,0x30,0x38,0x3C,0x7E}, //动画帧 19

    {0xFF,0x9C,0x98,0x98,0x98,0x9C,0x1E,0x3F}, //动画帧 20

    {0xFF,0xCE,0xCC,0xCC,0xCC,0xCE,0x0F,0x1F}, //动画帧 21

    {0xFF,0x67,0x66,0x66,0x66,0x67,0x07,0x0F}, //动画帧 22

    {0xFF,0x33,0x33,0x33,0x33,0x33,0x03,0x87}, //动画帧 23

    {0xFF,0x99,0x99,0x99,0x99,0x99,0x81,0xC3}, //动画帧 24

    {0xFF,0xCC,0xCC,0xCC,0xCC,0xCC,0xC0,0xE1}, //动画帧 25

    {0xFF,0xE6,0xE6,0xE6,0xE6,0xE6,0xE0,0xF0}, //动画帧 26

    {0xFF,0xF3,0xF3,0xF3,0xF3,0xF3,0xF0,0xF8}, //动画帧 27

    {0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,0xF8,0xFC}, //动画帧 28

    {0xFF,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFE}, //动画帧 29

    {0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF} //动画帧 30

    };

    void main(){

    EA = 1; //使能总中断

    ENLED = 0; //使能 U4,选择 LED 点阵

    ADDR3 = 0;

    TMOD = 0x01; //设置 T0 为模式 1

    TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms

    TL0 = 0x67;

    ET0 = 1; //使能 T0 中断

    TR0 = 1; //启动 T0

    while (1);

    }

    /* 定时器 0 中断服务函数 */

    void InterruptTimer0() interrupt 1{

    static unsigned char i = 0; //动态扫描的索引

    static unsigned char tmr = 0; //250ms 软件定时器

    static unsigned char index = 0; //图片刷新索引

    TH0 = 0xFC; //重新加载初值

    TL0 = 0x67;

    //以下代码完成 LED 点阵动态扫描刷新

    P0 = 0xFF; //显示消隐

    switch (i){

    case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index][0]; break;

    case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index][1]; break;

    case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index][2]; break;

    case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index][3]; break;

    case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index][4]; break;

    case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index][5]; break;

    case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index][6]; break;

    case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index][7]; break;

    default: break;

    }

    //以下代码完成每 250ms 改变一帧图像

    tmr++;

    if (tmr >= 250){ //达到 250ms 时改变一次图片索引

    tmr = 0;

    index++;

    if (index >= 30){ //图片索引达到 30 后归零

    index = 0;

    }

    }

    }

    下载进到板子上瞧瞧,是不是有一种帅到掉渣的感觉呢。技术这东西,外行人看的是很神秘的,其实我们做出来会发现,也就是那么回事而已,每 250ms 更改一张图片,每 1ms在定时器中断里刷新单张图片的某一行。

    不管是上下移动还是左右移动,大家要建立一种概念,就是我们是对一帧帧的图片的切换,这种切换带给我们的视觉效果就是一种动态的了。比如我们的 DV 拍摄动画,实际上就是快速的拍摄了一帧帧的图片,然后对这些图片的快速回放,把动画效果给显示了出来。因为我们硬件设计的缘故,所以在写上下移动程序的时候,数组定义的元素比较少,但是实际上大家也得理解成是 32 张图片的切换显示,而并非是真正的“移动”。

    展开全文
  • 单片机led显示电路

    2020-08-11 09:27:07
    单片机来连接led显示器的设计是经常的事情,常用的有两种方法一是接并口显示,这种方法占用了大量的单片机端口资源,利用8279等芯片可以实现动态显示程序也容易写,在某单片机并口需要连接很多设备的设计种不推荐...
  • 基于单片机LED数码管动态显示项目教学设计与实施.pdf
  • 51 单片机 点阵 LED 显示程序

    千次阅读 2020-06-30 11:00:44
    我们把 9 脚置成高电平、13 脚置成低电平的话,左上角的那个 LED 小灯就会亮了。下面我们就用程序来实现一下,特别注意,控制点阵左侧引脚的 74HC138是原理图上的 U4,8 个引脚自上而下依次由 U4 的 Y0~Y7 输出来...

    在这里插入图片描述
    在这里插入图片描述
    我们把 9 脚置成高电平、13 脚置成低电平的话,左上角的那个 LED
    小灯就会亮了。下面我们就用程序来实现一下,特别注意,控制点阵左侧引脚的 74HC138是原理图上的 U4,8 个引脚自上而下依次由 U4 的 Y0~Y7 输出来控制。

    在这里插入图片描述

    #include <reg52.h>
    sbit ADDR0 = P1^0;
    sbit ADDR1 = P1^1;
    sbit ADDR2 = P1^2;
    sbit ADDR3 = P1^3;
    sbit ENLED = P1^4;
    unsigned char code image[] = { //图片的字模表
     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
     0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,
     0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,
     0x99,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,
     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
    };
    
    void main()
    {
     EA = 1; //使能总中断
     ENLED = 0; //使能 U4,选择 LED 点阵
     ADDR3 = 0;
     TMOD = 0x01; //设置 T0 为模式 1
     TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms
     TL0 = 0x67;
     ET0 = 1; //使能 T0 中断
     TR0 = 1; //启动 T0
     while (1);
    }
    /* 定时器 0 中断服务函数 */
    void InterruptTimer0() interrupt 1
    {
     static unsigned char i = 0; //动态扫描的索引
     static unsigned char tmr = 0; //250ms 软件定时器
     static unsigned char index = 0; //图片刷新索引
     TH0 = 0xFC; //重新加载初值
     TL0 = 0x67;
    //以下代码完成 LED 点阵动态扫描刷新
     P0 = 0xFF; //显示消隐
     switch (i)
     {
     case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index+0]; break;
     case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index+1]; break;
     case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index+2]; break;
     case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index+3]; break;
     case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index+4]; break;
     case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index+5]; break;
     case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index+6]; break;
     case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index+7]; break;
     default: break;
     }
     //以下代码完成每 250ms 改变一帧图像
     tmr++;
     if (tmr >= 250) //达到 250ms 时改变一次图片索引
     {
     tmr = 0;
     index++;
     if (index >= 32) //图片索引达到 32 后归零
     {
     index = 0;
     }
     }
    }
    

    效果图:
    在这里插入图片描述

    展开全文
  • 89c51单片机,数码管动态显示汇编程序+proteus仿真硬件电路,适合初学者
  • AT89S52单片机的数码管的动态显示程序,用的是查表方法,位和段都是查表,很经典的扫描程序,端口可根据自己情况自己改,希望提供的方法对初学者有些许帮助。
  • led16x16动态显示程序

    2009-11-07 18:32:16
    一个51的LED16X16动态显示程序,软硬件调试通过
  • 使用AT89C52单片机,12MHZ晶振,P0口输出一行数据,P2口作行扫描,用共阳LED管 测试通过,注意硬件结构。
  • 在51单片机上的LED显示屏上显示(很适合初学者) LED显示器静态显示 第一个LED显示器显示字符“b" #include<reg52.h> #define duan P0 sbit wei1=P2^4; sbit wei2=P2^5; sbit wei3=P2^6; sbit wei4=P2^7; ...
  • C51单片机数码管动态显示

    万次阅读 多人点赞 2018-08-27 21:49:25
    数码管作为最廉价的输出设备,在各种自动化设备中有很大的应用,最简单普通的显示方式为动态刷新显示,称为假动态显示,即通过分时扫描每一位,利于人眼的视觉停留现象,造成一种静态显示的效果,如下图所示: ...
  • 基于单片机LED显示

    2013-03-22 10:45:14
    LED动态显示“欢迎您”,用KEIL软件编写的C语言程序,东西都打包在里了
  • CH451驱动LED数码管单片机C语言实例程序(AVR单片机)摘要:介绍一种新型的键盘显示驱动芯片CH451的性能特点和工作原理,给出了CH451键盘显示驱动芯片与MCS-51单片机的接口方法与相应的软件驱动程序。关键词:键盘...
  • 原标题:AVR单片机8位数码管显示程序实现我们接着来完成 数码管的显示实验。现在我们开始动手编写程序;根据前面的介绍,我们应该已经能够知道编写一个 的C语言程序的基本步骤和方法了。下面给出这个程序的主程序...
  • AVR单片机控制8段LED数码管同时显示这是一个简单的供单片机入门学习者练习用的8段LED数码管控制汇编程序,控制一个两位的数码管同时显示字符(动态刷新)。用AVR- Studio-4 开发,在AVR单片机Atmega48上调试通过。学习...
  • 用现有的基于AT89C51芯片组成的 LED显示屏控制系统,由于受到微处理器的处理速度、体系架构、寻址范围、外围接口资源等诸多限制,已难以在要求显示较多像素、显示内容帧频较高、动态显示效果复杂的情况下,得到良好...
  • 实验现象:下载程序后,LED点阵显示"三十而已“ 接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节) 1,单片机-->74HC595模块 P34-->SE P35-->RC P36-->SC 2,74...
  • LED动态显示数字27

    2009-03-15 23:02:23
    运行程序,则LED数码管可动态显示数字27
  • C51 LED显示程序

    2011-08-18 18:52:58
    C51单片机LED数码管动态显示程序,使用C51内部定时器中断显示。
  • 描述本文为大家介绍两个AVR单片机8位数码管显示程序实现。AVR单片机595驱动8位数码管的显示的电路实现主程序代码#include >#include //GCC中的延时函数头文件#include “hc595.h”//unsigned char Led_Disbuf...
  • LED显示接口电路1 LED的工作原理1.1 LED流水灯1.11 CODE 1 LED的工作原理 LED的符号:LED的工作是有方向性的,只有当正极接到LED阳极,负极接到LED阴极的时候才能工作,反接LED是不能正常工作的。 开发板上原理图:...
  • 主要介绍了LED汉字显示屏的硬件电路、汇编程序设计与调试、Proteus软件仿真等方面的内容,本显示屏的设计具有体积小、硬件少、电路结构简单及容易实现等优点。能帮助广大电子爱好者了解汉字的点阵显示原理,认识...
  • 51单片机上的\动态-静态LED闪烁程序,分别由汇编和C编写。经验证,能成功运行

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,393
精华内容 957
关键字:

单片机led动态显示程序