6006|11

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

单片机控制全部数码管间隔1秒从9至0跳动 [复制链接]

 
#include "reg52.h"                        

typedef unsigned int u16;         
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};


void delay(u16 i)
{
        while(i--);        
}


void DigDisplay()
{
        u8 i,n;
        for(i=0;i<8;i++)
        {
                switch(i)         
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;        
                }
                P0=smgduan[n];
                delay(100);
                P0=0x00;
                delay(10);
        }
}


void main()
{        
        while(1)
        {
                TMOD=0x01;
                TH0=(65536-45872)/256;
                TL0=(65536-45872)%256;
                EA=1;
                ET0=1;
                TR0=1;
        }               
}
void time0()interrupt 1
{
        u8 num,n;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        num++;
        if(num==20)
        {
                num=0;
                n--;
                DigDisplay();
        }
}




我这样写程序没出错...但是没有达到效果,求指导..

此帖出自单片机论坛

最新回复

这些代码是根据一楼的原代码改动了一下,没有上机编译过,仅供参考。  详情 回复 发表于 2017-8-19 08:19
点赞 关注
 

回复
举报

927

帖子

0

TA的资源

纯净的硅(中级)

推荐
 
这些代码是根据一楼的原代码改动了一下,没有上机编译过,仅供参考。
此帖出自单片机论坛
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
普中科技的板子....感觉有点坑,写这个程序。。。感觉没有完全理解
此帖出自单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
程序里的变量n好好检查下
此帖出自单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

4
 
给变量n赋初值10
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

5
 
n赋了初值10也没有效果...
此帖出自单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

6
 
只细看了下,你的程序不断在执行定时器初始化
此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

7
 
在while(1)初始化中断后面加个while(1)
不让一直初始化,不停给TH0,TL0赋值,进入不了中断
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

8
 
YK1212 发表于 2017-8-15 17:45
只细看了下,你的程序不断在执行定时器初始化

为什么会一直初始化..不是TR0=1之后它就会跳到中断里去了吗
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

9
 
#include                         
typedef unsigned int u16;         
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 x,num;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};


void delay(u16 i)
{
        while(i--);        
}


void DigDisplay()
{
        u8 i;
                x--;
        for(i=0;i<8;i++)
        {
                switch(i)         
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;        
                }
                P0=smgduan[x];
                delay(100);
                P0=0x00;
                delay(10);
        }
}


void main()
{   while(1)
        {     
                TMOD=0x01;
                TH0=(65536-45872)/256;
                TL0=(65536-45872)%256;
                EA=1;
                ET0=1;
                TR0=1;
                x=10;
                while(1)
                {
                        if(num==20)
                        {
                                num=0;
                                DigDisplay();
                        }       
                }
        }            
}
void time0()interrupt 1
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        num++;

}




这样好像可以了...
此帖出自单片机论坛
 
 
 

回复

927

帖子

0

TA的资源

纯净的硅(中级)

10
 
本帖最后由 吴下阿蒙 于 2017-8-19 08:17 编辑

#include "reg52.h"                        

typedef unsigned int u16;         
typedef unsigned char u8;

u8 n,num; //全局变量

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/* 主函数*/
void main()
{
        /* 定时器初始化,不要放到大循环里面*/
        TMOD=0x01;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        EA=1;
        ET0=1;
        TR0=1;
       
        while(1)
        {
                if(num>=20)
                {
                        num=0;
                       
                        /* n从9到0不断减一,归零后重来  */
                        if(n>0)
                                n--;
                        else
                                n=9;
                       
                        P0=smgduan[n]; //数码管直接驱动了,只有一位并不复杂
                }
        }         
}

/* 定时器 */
void time0()interrupt 1
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        num++;
}

此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

12
 
吴下阿蒙 发表于 2017-8-19 08:19
这些代码是根据一楼的原代码改动了一下,没有上机编译过,仅供参考。

好的,谢谢啦
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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