4476|4

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

帮忙看一下一个动态扫描数码管的程序(关于单片机延时的问题) [复制链接]

在51单片机中,为什么要延时,什么时候要延时,延时多长时间?

我的程序是这样写的,我给出一个四位十进制数,我想用动态扫描数据管的方法显示出这个四位数(硬件电路中有四个数码管,单片机为at89c51)

program:


/*--------------------------------------------------
@pro:led.c
@author:aniu
@brief:        简单的LED测试
--------------------------------------------------*/

//编译预处理指令
#include

#define LEDDATA P0          //p0口接数码管的7段
#define LED0 P1_0          //p1.0--p1.3接数码管的选通
#define LED1 P1_1
#define LED2 P1_2
#define LED3 P1_3

//全局变量声明
unsigned int displayNum = 1441;



//定义缓冲区
unsigned char buffer[4];

//函数声明
void ledDecoder(int inputNum);        //字形编码
void enaControl(int enaIn);                //选通控制
void ledDisplay(int numInput);        //显示



//主函数 
void main(void)
{
                while(1){ledDisplay(displayNum);}
}

void ledDecoder(int inputNum)
{
        switch(inputNum)
        {
                case 0:
                        LEDDATA = 0x3f;
                        break;
                case 1:
                        LEDDATA = 0x06;
                        break;
                case 2:
                        LEDDATA = 0x5b;
                        break;
                case 3:
                        LEDDATA = 0x4f;
                        break;
                case 4:
                        LEDDATA = 0x66;
                        break;
                case 5:
                        LEDDATA = 0x6d;
                        break;
                case 6:
                        LEDDATA = 0x7d;
                        break;
                case 7:
                        LEDDATA = 0x07;
                        break;
                case 8:
                        LEDDATA = 0x7f;
                        break;
                case 9:
                        LEDDATA = 0x6f;
                        break;
               

       
        }

        return;
       

}







void enaControl(int enaIn)
{
        switch(enaIn)
        {
                case 0:
                        LED0 = 0;
                        LED1 = 1;
                        LED2 = 1;
                        LED3 = 1;
                        break;

                case 1:
                        LED0 = 1;
                        LED1 = 0;
                        LED2 = 1;
                        LED3 = 1;
                        break;

                case 2:
                        LED0 = 1;
                        LED1 = 1;
                        LED2 = 0;
                        LED3 = 1;
                        break;

                case 3:
                        LED0 = 1;
                        LED1 = 1;
                        LED2 = 1;
                        LED3 = 0;
                        break;
        }
}

void ledDisplay(int numInput)
{
       
        int i;
        int a;
        buffer[0] = numInput/1000;
        buffer[1]=(numInput/100) %10;
        buffer[2]=(numInput/10)%10;
        buffer[3]=numInput%10;
         for(a=0;a<5000;a++);




                for(i =0;i<4;i++)
                {
                         //这里要延时吗?延时多少
                        enaControl(i);
                       
                        ledDecoder(buffer);
                          for(a=0;a<50000;a++);
                        if(i==3) i=0;
                       


                }


}

最新回复

在51单片机中,为什么要延时,什么时候要延时,延时多长时间? 一:为了和外围设备的时序要求同步 二:单片机过快,步点跨在外围设备要求的时序点时延时 三:延时的长短以跟上外围设备的时序为准  详情 回复 发表于 2007-2-7 20:15
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
单片机送显速度太快,动态显示的停留时间来不及看清,所以要延时。
在送完字模和选通后延时。
视觉暂留时间约20ms。依此计算延时时间。
显示的方式有所问题,最好要改进下 :)
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢了
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
代码也不够好啊!
void ledDecoder(int inputNum) 函数可以用一个数组代替
如果有定时器资源的话,使用定时器来显示更好些!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
在51单片机中,为什么要延时,什么时候要延时,延时多长时间?

一:为了和外围设备的时序要求同步
二:单片机过快,步点跨在外围设备要求的时序点时延时
三:延时的长短以跟上外围设备的时序为准
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表