精华内容
下载资源
问答
  • 1,基于STM32+TM1638芯片的共阳极数码管驱动程序,可同时驱动8个数码管,函数封装很好,使用时只需要调用函数,参数为每个数码管需要显示的数字即可 2,亲测有效,有疑问可在下面评论
  • //采用8位数码管动态显示程序//使用AT89C51单片机,12MHz晶振,P0输出字段码,P2口输出位选码//用共阳极LED数码管,key0为调时分位选择键,key1为加1键,key2为减1键,key3为确定键#include"reg51.h"//包含头文件#...

    //采用8位数码管动态显示程序

    //使用AT89C51单片机,12MHz晶振,P0输出字段码,P2口输出位选码

    //用共阳极LED数码管,key0为调时分位选择键,key1为加1键,key2为减1键,key3为确定键

    #include  "reg51.h"

    //包含头文件

    #define char unsigned char

    //定义无符号字符型

    char code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

    //共阳极LED数码管"0~9","-"的字段码

    char code scan_con[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

    //位选择码

    char data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};

    //显示缓冲区,时、分、秒初始为0,0x0b为"-"的编码

    char data timedata[3]={0x00,0x00,0x00};

    //分别为秒、分和小时的值

    char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;

    sbit  key0=P1^0;

    sbit  key1=P1^1;

    sbit  key2=P1^2;

    sbit  key3=P1^3;

    //定义四个按键

    //1ms延时函数

    delay1ms(int t)

    {

    int i,j;

    for (i=0;i

    {

    for(j=0;j<120;j++);

    }

    }

    //按键处理函数

    keyscan()

    {

    EA=0;

    //关总中断

    if (key0==0)         //判断第一个按键是否按下

    {

    delay1ms(10);

    //按键消抖

    while (key0==0);

    //再次判断按键是否按下

    con++;

    TR0=0;

    ET0=0;

    //关定时/计数器,关T0中断

    if (con>=3)

    {

    con=0;

    TR0=1;

    ET0=1;

    }

    }

    if (con!=0)

    {

    if (key1==0)

    //如果第二个按键按下

    {

    delay1ms(10);

    while (key1==0);

    timedata[con]++;

    //加一功能

    if (con==2)

    con1=24;

    else con1=60;

    if (timedata[con]>=con1)

    {timedata[con]=0;}

    }

    }

    if (con!=0)

    {

    if (key2==0)

    //如果第三个按键按下

    {

    delay1ms(10);

    while (key2==0);

    timedata[con]--;

    //减一功能

    if (con==2)

    con2=23;

    else con2=59;

    if (timedata[con]<=0)

    {

    timedata[con]=con2;

    }

    }

    }

    if(key3==0)

    //如果第四个按键按下

    {

    delay1ms(10);

    while(key3==0);

    EA=1;

    TR0=1;

    ET0=1;

    }

    EA=1;

    //开总中断

    }

    //数码管显示函数

    scan()

    {

    char k;

    dis[0]=timedata[0]%10;

    dis[1]=timedata[0]/10;

    dis[3]=timedata[1]%10;

    dis[4]=timedata[1]/10;

    dis[6]=timedata[2]%10;

    dis[7]=timedata[2]/10;

    for (k=0;k<8;k++)

    {

    P0=dis_7[dis[k]];

    P2=scan_con[k];

    delay1ms(1);

    P2=0x00;

    }

    }

    //主函数

    main()

    {

    TH0=0x3c;

    TL0=0xb0;

    TMOD=0x01;

    //选择工作方式1

    ET0=1;

    TR0=1;

    EA=1;

    while (1)

    {

    scan();

    //调用数码管显示scan()子函数

    keyscan();

    //调用按键处理keyscan()子函数

    }

    }

    //定时器/计数器T0中断服务函数

    void time_intt0(void) interrupt 1

    {

    ET0=0;

    TR0=0;

    TH0=0x3c;

    TL0=0xb0;

    TR0=1;

    ms50++;

    if (ms50==20)

    {

    ms50=0x00;

    timedata[0]++;

    if (timedata[0]==60)

    {

    timedata[0]=0;

    timedata[1]++;

    if (timedata[1]==60)

    {

    timedata[1]=0;

    timedata[2]++;

    if (timedata[2]==24)

    {

    timedata[2]=0;

    }

    }

    }

    }

    ET0=1;

    //开T0中断

    }

    2020-1-4 14:23 上传

    protues仿真图,实物加了9012pnp型的三极管驱动数码管的位选。

    展开全文
  • Arduino引脚的2~8号接数码管刚开始写的时候,很土,没有定义数码管函数,直接在loop里写了一堆[mw_shl_code=applescript,true]void setup() {Serial.begin (9600) ;for (int i = 2 ; i < 9 ; i++){ pinMode (i,...

    Arduino引脚的2~8号接数码管

    刚开始写的时候,很土,没有定义数码管函数,直接在loop里写了一堆

    [mw_shl_code=applescript,true]void setup() {

    Serial.begin (9600) ;

    for (int i = 2 ; i < 9 ; i++)

    { pinMode (i,OUTPUT);

    digitalWrite ( i , 1);  //通过一个for循环把2到8脚定义成数字输出,并且电平与阳极电平一致

    }

    }

    void loop() {

    digitalWrite(2 , 0 );

    digitalWrite(3 , 0 );

    digitalWrite(4 , 0 );

    digitalWrite(5 , 1 );

    digitalWrite(6 , 0 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 0 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 1 );

    digitalWrite(4 , 1 );

    digitalWrite(5 , 1 );

    digitalWrite(6 , 1 );

    digitalWrite(7 , 1 );

    digitalWrite(8 , 0 );

    delay (101);

    digitalWrite(2 , 1 );

    digitalWrite(3 , 0 );

    digitalWrite(4 , 0 );

    digitalWrite(5 , 0 );

    digitalWrite(6 , 1 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 0 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 0 );

    digitalWrite(4 , 1 );

    digitalWrite(5 , 0 );

    digitalWrite(6 , 1 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 0 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 1 );

    digitalWrite(4 , 1 );

    digitalWrite(5 , 0 );

    digitalWrite(6 , 0 );

    digitalWrite(7 , 1 );

    digitalWrite(8 , 0 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 0 );

    digitalWrite(4 , 1 );

    digitalWrite(5 , 0 );

    digitalWrite(6 , 0 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 1 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 0 );

    digitalWrite(4 , 0 );

    digitalWrite(5 , 0 );

    digitalWrite(6 , 0 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 1 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 1 );

    digitalWrite(4 , 1 );

    digitalWrite(5 , 1 );

    digitalWrite(6 , 1 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 0 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 0 );

    digitalWrite(4 , 0 );

    digitalWrite(5 , 0 );

    digitalWrite(6 , 0 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 0 );

    delay (101);

    digitalWrite(2 , 0 );

    digitalWrite(3 , 0 );

    digitalWrite(4 , 1 );

    digitalWrite(5 , 0 );

    digitalWrite(6 , 0 );

    digitalWrite(7 , 0 );

    digitalWrite(8 , 0 );

    delay (101);

    }[/mw_shl_code]

    这么屎的程序肯定不能忍。

    恁不觉得010101很像二进制数吗。

    0:0001000 对应十进制数字8

    1:0111110 对应十进制数字62

    2:0010001 对应十进制数字17

    3:0010100 对应十进制数字20

    4:0100110 对应十进制数字38

    5:0010001 对应十进制数字68

    6:1000000 对应十进制数字6*4

    7:0011110 对应十进制数字30

    8:0000000 对应十进制数字0

    9:0000100 对应十进制数字4

    这样呢,我们先定义一个数组,数组也可以写到 定义数码管的函数里,这里我们的数组是个全局变量:

    int Ten[10] = {8 , 62 , 17 , 20 , 38 , 68 , 64 , 30 , 0 , 4}; //定义从0到9的数码管编码

    写一个函数,翻译10进制数和数码管引脚的对应关系:

    [mw_shl_code=applescript,true]

    void NumChange(byte num){  //将数码管的数字编码输出到2至8口

    int s = 1 ;

    for ( int i = 2 ; i < 10 ; i ++)

    {

    /* int ol = num&s;

    if (ol>0)

    ol = 1;

    else

    ol = 0 ;   //这一段可有可无,与运算之后,除非当前位是0,否则输出的是正整数,正整数对应digitalWrite是1

    Serial.println(ol); */

    Serial.print ( num&s ,) ; //在串口调试器打印与运算结果

    digitalWrite (i , num&s );

    s <<= 1;   //左移位操作,准备对下一“位”进行与操作

    }

    }[/mw_shl_code]

    上边这段程序的核心思想是调取一个10进制数,把他二进制化,然后让这个二进制数的每一位跟一个二进制数1进行与操作,与出来的0或1就是对应引脚的电平。

    这时,loop就可以写的比较简洁了

    [mw_shl_code=applescript,true]viod loop()

    {

    for (i = 0 ; i < 10 ; i ++ )

    {

    NumChange(Ten);

    delay (1000);

    }

    }

    [/mw_shl_code]

    截图201902221733579370.png (9.19 KB, 下载次数: 3)

    引脚和管子的关系

    2019-2-22 17:33 上传

    展开全文
  • 静态显示是每个数码管的段选必须接一个8位数据...本次设计是实现两个共阳极数码管显示固定的数字5和9,电路连接如图。注意,P0口需要接上拉电阻后再接到数码管。本设计的程序如下:#include //包含51单片机寄存器定...
    静态显示是每个数码管的段选必须接一个8位数据线来保持显示的字形码,当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。静态显示的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。本次设计是实现两个共阳极数码管显示固定的数字5和9,电路连接如图。注意,P0口需要接上拉电阻后再接到数码管。

    6e3e3907d319918ac2c17fee335b70a4.png

    本设计的程序如下:

    #include   //包含51单片机寄存器定义的头文件/*******************************************函数功能:静态显示数字“59”共阳数码管编码表0xc0  0xf9   0xa4    0xb0  0x99   0x92  0      1     2       3     4     5 0x82  0xf8   0x80    0x90  0x88   0x83   6    7      8       9     A     B 0xc6  0xa1   0x86    0x8e   C    D       E      F   ******************************************/  void main(void)  {   P0=0x92;   //将数字5的段码送P0口   P1=0x90;    //将数字9的段码送P1口   while(1)  ;  //无限循环,防止程序跑飞 }

    温馨提示:需要单片机资料的可后台联系!

    展开全文
  • 这是一个简单的动态显示共阳极数码管的汇编程序,74HC573完成段选,位选由单片机I/O端口完成。 Proteus电路图 只要看该部分电路连线即可,完整JD51单片机电路图见后方资料。 汇编程序 ORG 00H START: SETB P2.5;...

    本文应用AT89C51芯片,使用该芯片的单片机型号有JD51等。这是一个简单的动态显示共阳极数码管的汇编程序,74HC573完成段选,位选由单片机I/O端口完成。

    Proteus电路图

    只要看该部分电路连线即可,完整JD51单片机电路图可下载。

    在这里插入图片描述

    汇编程序

    ORG 00H
    START:
    SETB P2.5;开启74HC573使能端
    
    MAIN:
    CLR P2.0
    MOV P0,#0A4H;显示2
    LCALL DELAY
    SETB P2.0
    
    CLR P2.1
    MOV P0,#0C0H;0
    LCALL DELAY
    SETB P2.1
    
    CLR P2.2
    MOV P0,#0A4H;2
    LCALL DELAY
    SETB P2.2
    
    CLR P2.3
    MOV P0,#0C0H;0
    LCALL DELAY
    SETB P2.3
    LJMP MAIN
    
    DELAY:MOV R5,#50;此时四位数依次亮起;改成1则四位数全部显示
    D2:MOV R6,#100
    D1:
    MOV R7,#100
    DJNZ R7,$
    DJNZ R6,D1
    DJNZ R5,D2
       
    RET
    END
    

    注意事项

    由于仿真与实际硬件效果存在差异,笔者使用单片机测试时可以达到动态显示的效果。

    展开全文
  • 学习任务1、四位数码管的电路结构与显示原理(什么是位选、什么是段选、阴与阳的区别、显示4位数字,需要多少条口线?显示n位数字呢?)2、Arduino直接连接四位数码管实现四位阿拉伯数字显示(Friting绘制电路图...
  • 数码管8个LED,由于说明了给定的是阴极数码管,即阴极是接在一起的,通过原理图下方的7407驱动器接在了X1-X6,阳极分别通过1K电阻上拉。所以当X1-X6接8255的IO口时,可以通过IO口输出低电平,将阴极拉低。同时...
  • 动态数码管显示(proteus仿真图和程序

    万次阅读 多人点赞 2019-05-24 12:35:49
    共阳极数码管显示需要PNP三极管进行驱动电路。 三极管的集电极连接数码管的位选端,发射极连接电源,基极连接单片机进行控制。 基极高电平,集电极就低电平,基极低电平,集电极就高电平,数码管亮。 仿真中需要在位...
  • 计算出共阳极和共阴数码管显示0-9对应的编码,拍照提交。2.绘制数码管仿真图,编程实现数码管循环显示学号。(2018123456)****/#include #define TIME 300/*****引脚定义*****//*****变量定义*****/unsigned char seg...
  • 编写程序数码管同时显示零 此实验是共阳极写法 程序: #include <reg51.h> unsigned char segment[]= {0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; unsigned char k=0; int main(void) { TMOD=0x00; ...
  • 为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图: 74hc244驱动数码管显示电路 大部分...
  • 四位共阳极数码管,段码给0显示 main.c #include "sys.h" #include "delay.h" //#include "led.h" #include "num.h" int main(void) { RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //系统时钟设置PLL作为系统...
  • 51汇编(六):数码管显示

    千次阅读 2020-05-02 22:19:24
    文章目录数码管驱动单位数码管 数码管 数码管分为共阴数码管和共阳数码管。数码管极性不同所对应的程序也不同,现实中多通过三极管驱动数码管,因此常用共阳极数码管。 驱动单位数码管 ...
  • 任务描述:某企业承担了一个LED...仿真视频知乎视频​www.zhihu.com硬件电路原理图元件清单数码管显示数的字形码(根据选用数码管的型号使用,共阳极与共阴极)C语言程序 #include<reg51.h>void delay1s();unsig...
  • 为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图:74hc244驱动数码管显示电路大部分的逻辑...
  • 单片机P0端口驱动共阳极数码管0-9循环显示,共阳极共阴极数码管显示原理、Proteus仿真图、C语言完整程序
  • 第三个51程序数码管显示 数码管是生活中常见的电子元件之一,它其实是由8个led连接而成。数码管又可以分为阴极与共阳极之分。本实验采用阴极为例 了解数码管之后,就可以开始今天的实验了。打开proteus仿真,...
  • 数码管静态显示程序 我的是四位的数码管共阳极 一个数码管有八段:A,B,C,D,E,F ,G,H,DP,即由八个发光二极管组成 由0到f编码为: 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,...
  • 51单片机静态数码管显示

    千次阅读 2019-03-05 00:08:59
    用一个共阳极数码管循环显示数值“0~F”,显示变换时间为1s,由P1口输出要显示的数值 2、硬件设计 使用proteus Isis仿真,选择元器件,AT89C51、7SEG-COM-AN-GRN、RESPACK8 3、软件设计 源程序: #include &...
  • 数码管分类:共阴极数码管,共阳极数码管 数码管的显示方式:静态和动态 共阴级数码管:1亮0不亮 共阳极数码管:0亮1不亮 数码管的基础知识就不多讲了,下面是我写的几个数码管的程序,通过和单片机连接可以实现...
  • 静态数码管显示

    2012-08-10 18:09:19
    程序功能:静态数码管显示0 1 2 3 4 5 6 7 8 9 二.知识点:  1、数码管为共阳极。    2、abcdefg. 转化为十六进制时从右往左8421 , 8421。  3、调用子函数时要进行函数声明。  4、共阴极:0 1 2 3 ...
  • c图为共阳极数码管(他们的阳极都相连) 数码管分为共阳和共阴两种,共阴数码管就是 8 只 LED 小灯的阴极是连接在一起的,阴极是公共端,由阳极来控制单个小灯的亮灭…… 2、数码管静态显示 3、数码管动态显示 ...
  • 任务描述:某企业承担了一个LED...仿真视频知乎视频​www.zhihu.com硬件电路原理图元件清单数码管显示数的字形码(根据选用数码管的型号使用,共阳极与共阴极)C语言程序 #include<reg51.h>void delay1s();unsig...
  • FPGA学习笔记一(数码管显示

    千次阅读 2011-06-30 23:32:00
    重新开始学习FPGA,希望能够通过一个暑假的努力提高自己的水平。基础还是非常重要的,...【特别注意】:数码管显示程序编写的时候要注意所选用的数码管是共阴极的还是共阳极的,可以查看数据手册,如图所示,显而易见
  • 在系统设计中,可根据实际需求,把此核直接例化成1~8个共阴极(或共阳极)数码管显示控制器,控制1~8个共阴极(或共阳极)数码管工作,实现IP核重用,减少电子设计者的工作量,从而提高设计效率。  2 LED数码管
  • 七段数码管显示控制 (4个数码管)

    千次阅读 2009-09-21 20:02:00
    /*七段数码管显示Target:8051程序描述:这个程序利用8051控制一个共阳极七段显示管不停显示0~9*/#include code seven_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /*code 指定数据是存储在代码...
  • 电路图 此图中数码管共阳极(低电平有效,不控制小数点dp) 数码管内部电路 共阴极:a,b,c,d,e,f,g,dp高电平有效 ...//数码管显示数字0~9对应的十六进制 unsigned char code led[]={0xC0,0xF9,0xA4,0xB0
  • 在系统设计中,可根据实际需求,把此核直接例化成1~8个共阴极(或共阳极)数码管显示控制器,控制1~8个共阴极(或共阳极)数码管工作,实现IP核重用,减少电子设计者的工作量,从而提高设计效率。  2 LED数码管
  • 数码管共阳极,低电平有效,P0.0 ~ P0.7置0对应数码管中的a,b,c,d,e,f,g,dp段亮 完整程序 方法一(推荐) #include<reg51.h> #include<intrins.h> //段选segment 0 1 2 3 4 5 6 7 8 9 A

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
关键字:

共阳极数码管显示程序