数码管动态显示(软件延时)+多参数分时显示+Protues仿真

发布者:悦耳旋律最新更新时间:2024-07-26 来源: cnblogs关键字:数码管  动态显示  软件延时 手机看文章 扫描二维码
随时随地手机看文章

1 实验现象(四个参数:窗口(通道)+分隔符+参数数据)

2 参考程序


2.1 主函数


#include 'DisplaySmg.h'


unsigned char     wnd;        //窗口或参数的个数,状态机设计

unsigned char      param1=55;        //参数1

unsigned char      param2=66;        //参数2

unsigned char      param3=77;        //参数3

unsigned char      param4=88;        //参数4


void disp_service();


void main()

{

    unsigned int i;    //0~65535

    for(i=0;i<5000;i++)        //数码管开机显示

    {

        DisplaySmg();        //函数执行一次,for循环i控制显示时间

    }    

    while(1)

    {    

        disp_service();

    }

}


void disp_service()

{

    unsigned int i;    //如果为char,i始终到不了5000

    switch(wnd)

        {

            case 0:

            {

                LedBuf[0]=0;    

                LedBuf[1]=22;    

                LedBuf[2]=param1/10;

                LedBuf[3]=param1%10;

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

                {

                    DisplaySmg();    //调用数码管显示函数,该函数仅执行一次

                }

                wnd++;

                break;

            }

                

            case 1:

            {

                LedBuf[0]=1;    

                LedBuf[1]=22;    

                LedBuf[2]=param2/10;

                LedBuf[3]=param2%10;

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

                {

                    DisplaySmg();    //调用数码管显示函数,该函数仅执行一次

                }

                wnd++;

                break;

            }

            case 2:

            {

                LedBuf[0]=2;    

                LedBuf[1]=22;    

                LedBuf[2]=param3/10;

                LedBuf[3]=param3%10;

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

                {

                    DisplaySmg();    //调用数码管显示函数,该函数仅执行一次

                }

                wnd++;

                break;

            }

            case 3:

            {

                LedBuf[0]=3;    

                LedBuf[1]=22;    

                LedBuf[2]=param4/10;

                LedBuf[3]=param4%10;

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

                {

                    DisplaySmg();    //调用数码管显示函数,该函数仅执行一次

                }

                wnd=0;

                break;

            }                

            default:break;

        }

}


2.2 数码管显示函数模块(采用switch case语言实现)


#ifndef __DisplaySmg_H__

#define __DisplaySmg_H__


#include

#include 'DelayXms.h'


#define GPIO_SEG P0        //段选端

#define GPIO_SEL P2        //位选端

#define SMG_NUM  4        //数码管的个数


extern unsigned char LedBuf[];    //外部变量声明


void DisplaySmg();


#endif


#include 'DisplaySmg.h'


unsigned char code LedData[]={    //共阴型数码管的段码表,字符,序号

                0x3F,  //'0',0

                0x06,  //'1',1

                0x5B,  //'2',2

                0x4F,  //'3',3

                0x66,  //'4',4

                0x6D,  //'5',5

                0x7D,  //'6',6

                0x07,  //'7',7

                0x7F,  //'8',8

                0x6F,  //'9',9

                0x77,  //'A',10

                0x7C,  //'B',11

                0x39,  //'C',12

                0x5E,  //'D',13

                0x79,  //'E',14

                0x71,  //'F',15

                0x76,  //'H',16

                0x38,  //'L',17

                0x37,  //'n',18

                0x3E,  //'u',19

                0x73,  //'P',20

                0x5C,  //'o',21

                0x40,  //'-',22

                0x00,  //熄灭 23

                         };


unsigned char code LedAddr[]={0xfe,0xfd,0xfb,0xf7};    //数码管位选


unsigned char LedBuf[]={22,22,22,22};    //显示缓存区


void DisplaySmg()

{

    unsigned char i;                 //等价于 'static unsigned char i = 0;'

    //第一步 送段码

    //第二步 送位选

    //第三步 延时1ms,<10ms

    //第四步 消影(共阴形)

    switch(i)

    {

        case 0:

            GPIO_SEG = LedData[LedBuf[0]];

            GPIO_SEL = LedAddr[0];

            DelayXms(1);

            GPIO_SEG = 0x00;

            i++;

            break;

        case 1:

            GPIO_SEG = LedData[LedBuf[1]];

            GPIO_SEL = LedAddr[1];

            DelayXms(1);

            GPIO_SEG = 0x00;

            i++;

            break;

        case 2:

            GPIO_SEG = LedData[LedBuf[2]];

            GPIO_SEL = LedAddr[2];

            DelayXms(1);

            GPIO_SEG = 0x00;

            i++;

            break;

        case 3:

            GPIO_SEG = LedData[LedBuf[3]];

            GPIO_SEL = LedAddr[3];

            DelayXms(1);

            GPIO_SEG = 0x00;

            i=0;

            break;

        default:break;

    }

}


2.3 延时函数模块


#ifndef __DelayXms_H__

#define __DelayXms_H__


#include


void DelayXms(unsigned char xms);


#endif


#include 'DelayXms.h'


void DelayXms(unsigned char xms)        //@11.0592MHz

{

    unsigned char i, j;

    while(xms--)

    {

        _nop_();

        i = 2;

        j = 199;

        do

        {

        while (--j);

        } while (--i);

    }

}


3 参考来源


(1)单片机应用 数码管动态显示之switch case语句实现动态刷新及多参数的分时显示_哔哩哔哩_bilibili;


关键字:数码管  动态显示  软件延时 引用地址:数码管动态显示(软件延时)+多参数分时显示+Protues仿真

上一篇:数码管动态显示+定时器中断方式+Protues
下一篇:数码管动态显示(软件延时)+基于底层显示模块的应用层程序开发+Protues仿真

推荐阅读最新更新时间:2026-03-20 10:43

单片机(51) 数码管0-9循环显示软件延时
#include regx51.h unsigned char code led ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay_50ms(unsigned int i){ while(i--); } void main(void){ char i=0; while(1){ for(i=0;i 10;i++){ P1=led ; delay_50ms(60000); } } }
[单片机]
单片机实现按键控制数码管动态显示数字0~9:源码详解
引言 随着嵌入式技术的不断普及,单片机在日常生活中扮演着越来越重要的角色。从家用电器、智能家居到工业控制,各种系统都离不开单片机的控制。而数码管作为一种直观显示数字信息的外设,广泛应用于时钟、计数器、温度显示器等设备中。通过按键控制数码管动态显示数字0~9,不仅能够实现用户交互,还可以用于系统状态反馈、设备调试以及教学实验。 本项目旨在利用单片机实现一个按键控制数码管动态显示0~9的系统,通过对按键的扫描和去抖动处理,将按键输入转换为数字显示数据,再通过动态刷新技术在数码管上依次显示0到9的数字,同时支持按键改变显示模式。项目从理论到实践,全面覆盖了单片机外设控制、数码管驱动、按键扫描以及动态显示技术,为嵌入式系统初学者和
[单片机]
数码管动态显示+定时器中断方式+Protues
1 仿真现象 2 程序设计 2.1 主程序 #include DisplaySmg.h #include Timer0.h sbit LED = P1^0; unsigned int SystemTimer=0; //系统时间 unsigned char SystemFlag=1; //初始状态 unsigned int NUM = 1983; //待显示数据 void disp_num(); void main() { Timer0Init(); //启动定时器T0 do //开机显示 { if(SystemTi
[单片机]
<font color='red'>数码管</font><font color='red'>动态显示</font>+定时器中断方式+Protues
51单片机入门 - 数码管动态显示实验
设计要求: 在8位8端的数码管上动态显示76543210,快速显示时人眼看到的效果为同时亮起 ———————————————————————————————————————————— 实现目标: ———————————————————————————————————————————— 数码管编码计算: #include reg52.h typedef unsigned char uchar; uchar table = { //Proteus图上数码管下引脚显示对应的断码,从前往后分别是0123456789AbCdEF 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE
[单片机]
51单片机入门 - <font color='red'>数码管</font><font color='red'>动态显示</font>实验
矩阵键盘+数码管动态显示
我把矩阵键盘和数码管动态显示综合起来写了个程序。这个代码的意思是在一开始8个数码管什么也不显示,因为p0的初始值是0x00,当我们按下矩阵按键里的按键时,8个数码管动态显示该按键的键值,直到按下了下一个按键,8个数码管显示的内容才可能改变。 #include reg52.h //目的是每按下一个按键,8个数码管就动态显示对应的键值 sbit lsa=P2^2; sbit lsb=P2^3; sbit lsc=P2^4; #define duanxuan P0 #define keyboard P1 int zxm ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
[单片机]
51单片机:6位数码管动态显示,从600000开始,每0.5秒加1
原理图 ##//源码 #include reg52.h #include stdlib.h #define uint unsigned long #define uchar unsigned char sbit N1 = P1^0; sbit N2 = P1^1; sbit N3 = P1^2; sbit N4 = P1^3; sbit N5 = P1^4; sbit N6 = P1^5; uchar code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint num; int a,t1=0; void delayms(uint
[单片机]
51单片机:6位<font color='red'>数码管</font><font color='red'>动态显示</font>,从600000开始,每0.5秒加1
单片机内外部资源操作篇之数码管动态显示
假定你已经会了数码管的静态显示,在静态显示的学习中,我们知道,六位数码管同一时刻只能显示同一符号。但我们在日常生活中 经常看到几个数码管同时能显示不同数字,例如时钟等。这就是接下来要讨论的话题——数码管动态显示。 先来看一个例子: 1 #include reg52.h 2 #define uint unsigned int 3 #define uchar unsigned char 4 uchar code table = { 5 0x3f,0x06,0x5b,0x4f, 6 0x66,0x6d,0x7d,0x07, 7 0x7f,0x6f,0x77,0x7c, 8 0x39,0x5e,0x79,0x7
[单片机]
数码管动态显示数字
LED数码管动态扫描显示数字(C语言) #include reg51.h sbit P00 = P0 ^ 0; sbit P01 = P0 ^ 1; sbit P02 = P0 ^ 2; sbit P03 = P0 ^ 3; int DATA_LED = { //0~9的数码管段码 A0H,BBH,62H,2AH,39H,2CH,24H,BAH,20H,28H 根据具体电路而定,不通用 0xA0, //0 0xBB, //1 0x62, //2 0x2A, //3 0x39, //4 0x2C, //5 0x24, //6 0xBA, //7 0x20, //8 0x28
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved