精华内容
下载资源
问答
  • MC9S08FL16单片机数码管静态显示分析.pdf
  • 多位LED数码管处于静态显示,各位的共阴极或共阳极连接在一起并接地或接5v ;每一位数码管的段码线(a,b,…g,dp)分别与单片机控制的8为I/O 口锁存器输出相连,通过选择点亮段码线达到显示数值效果。 优点:显示无...
    1. 基本理论知识
      一位数码管共计8段(包含小数点),一般a段对应字型码字节的最低位。如果需要在数码管上显示某一字符,只需将对应的断码加到各段上即可,注意段码分共阴极和共阳极两种,主要根据数码管的共阴极还是共阳极来区分
      多位LED数码管处于静态显示,各位的共阴极或共阳极连接在一起并接地或接5v ;每一位数码管的段码线(a,b,…g,dp)分别与单片机控制的8为I/O 口锁存器输出相连,通过选择点亮段码线达到显示数值效果。
      优点:显示无闪烁,亮度较高,软件控制比较方便
      缺点:如果数码管数目增多,则需要增加I/O口的数目,所以占用I/O口 较 多

    2.实验条件

    • 【实验平台】: QX-MCS51 单片机开发板
    • 【外部晶振】: 11.0592mhz
    • 【主控芯片】: STC89C52RC
    • 【编译环境】: Keil μVisio4
    • 【程序功能】: 数码管静态显示-0123
    • 【使用说明】: 跳帽短接数码管跳线J6
    1. 实验原理图
      在这里插入图片描述
    2. 实验代码:
      #include <reg52.h>
      #define uchar unsigned char
      sbit P2_0 = P2^0;
      sbit P2_1 = P2^1;
      sbit P2_2 = P2^2;
      sbit P2_3 = P2^3;

    uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
    0xf8,0x80,0x90};
    void delay(uchar i)
    {
    uchar j,k;
    for(j=i;j>0;j–)
    for(k=125;k>0;k–);
    }

    void display()
    {

    P0=table[0];
    P2_0 = 0;
    delay(5);
    P2_0 = 1;

    P0=table[1];
    P2_1 = 0;
    delay(5);
    P2_1 = 1;

    P0=table[2];
    P2_2 = 0;
    delay(5);
    P2_2 = 1;

    P0=table[3];
    

    P2_3 = 0;
    delay(5);
    P2_3 = 1;

    }

    void main(void)
    {
    unsigned int a;

    while(1)
    {

    for(a=100;a>0;a–)
    {
    display();
    }

    展开全文
  • 单片机数码管动态显示程序实验,数码管显示一般分静态显示及动态显示两种驱动方式,静态显示占用口线比较多,本文介绍的是如何实现数码管动态显示,应该说数码管动态显示是单片机外部指令输出的重要途径,因此如何...

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

    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 带小数点代码

    展开全文
  • 单片机数码管动态显示程序实验,数码管显示一般分静态显示及动态显示两种驱动方式,静态显示占用口线比较多,本文介绍的是如何实现数码管动态显示,应该说数码管动态显示是单片机外部指令输出的重要途径,因此如何...
  • 数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管静态显示数码管...
  • 数码管静态显示及定时器和中断应用。
  • 静态显示的特点是每个数码管的段选必须接一个9位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。 缺点:使用的IO口比较多。 动态显示 动态显示的特点是将所有位数码管的...

    数码管显示原理

    在这里插入图片描述

    数码管根据内部连接不同分为共阴极和共阳极。八段数码管内部有8颗LED组成,如果想要显示特定字形只需控制相应的LED亮起,其他LED熄灭即可。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c7ppkdZI-1604209821031)(img/code_table.png)]

    静态与动态显示

    静态显示:

    LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个9位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
    缺点:使用的IO口比较多。

    动态显示

    动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

    74HC573锁存器的工作原理

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zlCrpAey-1604210100233)(img/74HC573.png)]

    芯片文档查询网址: https://www.alldatasheet.com/

    上拉电阻的作用

    上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下位同理,也是将不确定的信号通过一个电阻钳位在低电平。

    当P0口作为输入、输出口时,上电复位后处于开漏模式。P0口内部无上拉电阻,所以作I/0口必须外接10K-4.7K的上拉电阻。

    在这里插入图片描述

    点亮一位数字"1"

    #include <reg52.h>
    #include <intrins.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit DU = P2^6;//数码管段选
    sbit WE = P2^7;//数码管段选
    
    void main(){ // main函数自身会循环
    	WE = 1; // 打开位选锁存器
    	P0 = 0XFE;   // 1111 1110  选通第一位数码管
    //	P0 = 0X00;  // 0000 0000  表示选通所有位数码管
    	WE = 0; // 锁存位选数据
    	
    	DU = 1;  // 打开段选锁存器
    	P0 = 0X06;  // 0000 0110  显示“1”
    	DU = 0;   // 锁存段选数据
    	
    	while(1){
    	   // P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开位选锁存器才能进行修改
    
    	}	
    }
    

    点亮两位数字"2"

    #include <reg52.h>
    #include <intrins.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit DU = P2^6;//数码管段选
    sbit WE = P2^7;//数码管段选
    
    void main(){ // main函数自身会循环
    	WE = 1; // 打开位选锁存器
    	P0 = 0XFC;   // 1111 1100  选通第一位和第二位数码管
    //	P0 = 0X00;  // 0000 0000  表示选通所有位数码管
    	WE = 0; // 锁存位选数据
    	
    	DU = 1;  // 打开段选锁存器
    	P0 = 0X5B;  // 0101 1011  显示“2”
    	DU = 0;   // 锁存段选数据
    	
    	while(1){
    	   // P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开锁存器才能进行修改
    
    	}	
    }
    

    点亮三位数字"3"

    #include <reg52.h>
    #include <intrins.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit DU = P2^6;//数码管段选
    sbit WE = P2^7;//数码管段选
    
    void main(){ // main函数自身会循环
    	WE = 1; // 打开位选锁存器
    	P0 = 0XF8;   // 1111 1000  选通第一位、第二位和第三位数码管
    //	P0 = 0X00;  // 0000 0000  表示选通所有位数码管
    	WE = 0; // 锁存位选数据
    	
    	DU = 1;  // 打开段选锁存器
    	P0 = 0X4F;  // 0100 1111  显示“3”
    	DU = 0;   // 锁存段选数据
    	
    	while(1){
    	   // P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开锁存器才能进行修改
    
    	}	
    }
    

    点亮数码管最后一位数字"8"

    #include <reg52.h>
    #include <intrins.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit DU = P2^6;//数码管段选
    sbit WE = P2^7;//数码管段选
    
    void main(){ // main函数自身会循环
    	WE = 1; // 打开位选锁存器
    	P0 = 0X7F;   // 1111 1000  选通第八位数码管
    //	P0 = 0X00;  // 0000 0000  表示选通所有位数码管
    	WE = 0; // 锁存位选数据
    	
    	DU = 1;  // 打开段选锁存器
    	P0 = 0X7F;  // 0111 1111  显示“8”
    	DU = 0;   // 锁存段选数据
    	
    	while(1){
    	   // P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开锁存器才能进行修改
    
    	}	
    }
    

    使第三个(从左至右)数码管显示数字 6

    #include <reg52.h>
    #include <intrins.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit DU = P2^6;//数码管段选
    sbit WE = P2^7;//数码管段选
    
    void main(){ // main函数自身会循环
    	P0 = 0X00;   //清除断码
    	WE = 1; // 打开位选锁存器
    	P0 = 0X03;   // 0000 0011  选通第3位、第4位、第5位、第6位、第7位、第8位数码管
    //	P0 = 0X00;  // 0000 0000  表示选通所有位数码管
    	WE = 0; // 锁存位选数据
    	
    	DU = 1;  // 打开段选锁存器
    	P0 = 0X7D;  // 0111 1101 对应的数码管字母 acdefg  显示“6”
    	DU = 0;   // 锁存段选数据
    }
    
    

    在这里插入图片描述

    展开全文
  • 蓝桥杯CT107D单片机数码管静态显示

    千次阅读 2019-02-05 18:30:46
    CT107D单片机综合实训平台上使用的数码管是F3461BH,告诉我们数码管的类型。倒数第2个字母是“B”,说明这个数码管是共阳类型的,如果该字母为“A”则为共阴类型。 F3461BH是一个4位8段的数码管,其中a、b、c、d、e...

    数码管基础知识
    CT107D单片机综合实训平台上使用的数码管是F3461BH,告诉我们数码管的类型。倒数第2个字母是“B”,说明这个数码管是共阳类型的,如果该字母为“A”则为共阴类型。
    在这里插入图片描述
    F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚通过74HC573锁存器与单片机的P0端口相连。另外有com1~com4四个公共控制脚,该应用为高电平则使能对应位的数码管。两个F3461BH一共有8个com控制引脚,也是通过74HC573锁存器与单片机的P0端口相连的。
    在这里插入图片描述
    控制Y7C口,向P0口送数据
    控制Y6C口选择使用哪个数码管,一个是8个
    找到Y6C和Y7C
    在这里插入图片描述

    void display1(yi, er)
    {
    	 //开位选(Y6C)
    		P2=0XC0;
    		P0=0X01;
    		//开段选(Y7C)
    		P2=0XFF;
    		P0=tab[yi];
    		Delay1ms(1);
    	
    		//开位选
    		P2=0XC0;
    		P0=0X02;
    		//开段选
    		P2=0XFF;
    		P0=dottab[er];
    		Delay1ms(1);		
    }
    

    74HC138使用
    在这里插入图片描述

    /*代码实现显示12345678,分组显示。可以根据需要显示字符表里的数字
    加了code的数组是把这个数组保存到程序区,程序运行过程中是无法修改的,一般用来保存那些常数、或者编码数据,比如数码管的数字编码等;没有加code的数组是在RAM中的,可以动态修改里面的数据。
    加code是将数据保存在程序存储器中,否则就保存在RAM中,单片机的RAM比较小,因此很宝贵,大型固定数组(如少量汉字字库或简单图片)一定不要占用RAM 空间,那样很容易造成内存不足提示
    但程序存储器中的数据不可以在运行中修改,因此所存数据属于常量
    */
    #include <STC15F2K60S2.h>
    #define uchar unsigned char
    #define uint unsigned int
    void allinit();
    void delayms(uchar z);
    void display1(uchar yi,uchar er);
    void display2(uchar san,uchar si);
    void display3(uchar wu,uchar liu);
    void display4(uchar qi,uchar ba);
    /*主函数所调用子函数,若写在主函数之前可以不用声明(默认为已经声明),写在主函数之后必须声明*/
    
    uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
    //1 2 3 4 5 6 7 8 9 - 灭
    uchar code dottab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
    //带小数点的数字 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.
    uchar yi,er,san,si,wu,liu,qi,ba;
    
    
    void delayms(uchar z)		//@12.000MHz
    {
    	unsigned char i, j;
    	uchar k;
      for(k=z;k>0;k--)
    	{
    	i = 12;
    	j = 169;
    	do
    	{
    		while (--j);
    	} while (--i);
    	
    	}
    	
    }
    
    
    	void display1(uchar yi,uchar er)
    	{
    		P2=0XC0;
    		P0=0X01;
    		P2=0XFF;
    		P0=tab[yi];
    		delayms(1);
    		
    		P2=0XC0;
    		P0=0X02;
    		P2=0XFF;
    		P0=tab[er];
    		delayms(1);
    	}
    	
    		void display2(uchar san,uchar si)
    	{
    		P2=0XC0;
    		P0=0X04;
    		P2=0XFF;
    		P0=tab[san];
    		delayms(1);
    		
    		P2=0XC0;
    		P0=0X08;
    		P2=0XFF;
    		P0=tab[si];
    		delayms(1);
    	}
    		void display3(uchar wu,uchar liu)
    	{
    		P2=0XC0;
    		P0=0X10;
    		P2=0XFF;
    		P0=tab[wu];
    		delayms(1);
    		
    		P2=0XC0;
    		P0=0X20;
    		P2=0XFF;
    		P0=tab[liu];
    		delayms(1);
    	}
    			void display4(uchar qi,uchar ba)
    	{
    		P2=0XC0;
    		P0=0X40;
    		P2=0XFF;
    		P0=tab[qi];
    		delayms(1);
    		
    		P2=0XC0;
    		P0=0X80;
    		P2=0XFF;
    		P0=tab[ba];
    		delayms(1);
    	}
    	
    	
    	
    	
    void allinit()//初始化
    {
      P2=0X80;//打开控制数码管的573(u6),3-8译码器为001(ABC)
    	P0=0XFF;//关闭所有流水灯
    	
    	P2=0XC0;//打开控制数码管位选的573,3-8译码器为011
    	P0=0XFF;
    	P2=0XFF;//打开控制数码管段选573,3-8译码器为111
    	P0=0XFF;//关闭所有数码管
    	
    	P2=0XA0;//打开控制数码管573,3-8译码器为101
    	P0=0X00;//关闭继电器和蜂鸣器
    }
    void main()
    {
      allinit();
      yi=1,er=2,san=3,si=4,wu=5,liu=6,qi=7,ba=8;
    	while(1)
    	{
    			display1(yi,er);
    			display2(san,si);
    			display3(wu,liu);
    			display4(qi,ba);
    	}
    	
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    展开全文
  • 开发板原理图如下。... 可以看到74HC138译码器的B口连的是P23口,而LED模块LED4灯连的也是P23口,再看看译码器的真值表[img=...请问有什么办法能让数码管显示的时候LED4灯不亮吗?
  • 而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示。一...
  • 数码管静态及动态显示一、八位共阳数码管1.1 硬件连接图1 共阳数码管原理图上图是独立共阳数码管,用于演示数码管显示原理图2 共阴和共阳数码管原理说明... 4 共阳数码管静态显示程序/*---------------------------...
  • 单片机基础实验单片机数码管静态、动态显示原理及实现
  • 数码管静态及动态显示一、八位共阳数码管1.1 硬件连接图1 共阳数码管原理图上图是独立共阳数码管,用于演示数码管显示原理图2 共阴和共阳数码管... 4 共阳数码管静态显示程序/*----------------------------------...
  • 51单片机数码管静态显示

    万次阅读 多人点赞 2018-10-14 14:17:59
     在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段数码管的,其实无非就是多在一个小数点h , 如上图所示, 我们就拿带小数点的...
  • 51单片机——数码管静态显示 1、由原理图找到对应控制端口 这次是想要在数码管上显示出数值。同样的,先在开发板原理图中找到数码管对应的控制端口 发现要让数码管起作用的话,LEDS0要为低电平...
  • 单片机数码管静态显示

    千次阅读 2017-07-01 20:52:31
    数码管静态显示
  • 51单片机数码管显示静态)C语言代码。
  • 应用于51单片机数码管静态显示的C51小程序,适合单片机新手使用
  • 数码管 动态显示 静态显示 c语言 资料 显示 教程 单片机
  • 51单片机数码管静态与动态显示

    千次阅读 2020-07-16 21:21:20
    数码管简述 这是一个数码管内部电路原理图,ah每个数字代表一个发光二极管,v是公共端,可以接地...一般情况下,单片机的IO口和数码管的连接方式如下: 如果我们将数码管接到P1口上,显示数字“0”的话,那么P1口的八
  • 数码管静态显示.zip

    2021-06-09 21:14:41
    51单片机数码管静态显示数据
  • 51单片机 数码管静态显示和动态显示

    万次阅读 多人点赞 2015-09-05 16:26:35
    51单片机 数码管静态显示和动态显示 附有代码示例
  • 应用于51单片机数码管静态显示的C51小程序,适合单片机新手使用
  • *****该程序用于驱动led数码管显示,在8个LED数码管上依次显示数字1、2、3、4、5、6、7、8*******;****http://www.51hei.com 单片机学习网经典程序已测试,led数码管共阴和共阳不同请修改码值转换表部分LIST P=18F458...
  • 51单片机静态数码管显示程序,可移植性强

空空如也

空空如也

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

单片机数码管静态显示程序