找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7844|回复: 8
收起左侧

怎样通过编程实现单片机上6个数码管依次显示从0到F 急需大神求解

[复制链接]
ID:236227 发表于 2017-9-27 23:50 | 显示全部楼层 |阅读模式
怎样通过编程实现单片机上6个数码管依次显示从0到F,就是第一个数码管显示完0到F第二个接着显示0到F
回复

使用道具 举报

ID:233997 发表于 2017-9-28 18:47 | 显示全部楼层


/**************************************************************************************
*                              定时器1实验                                                                                                  *
实现现象:下载程序后数码管最后一位间隔一秒循环显示0-F。使用单片机内部定时器可以实现准确延时。
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。                                                                                                                                                                  
***************************************************************************************/

#include <reg52.h>                         //此文件中定义了单片机的一些特殊功能寄存器

#define uchar unsigned char



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

uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
uchar num1=0;
uchar num=0;                                       
void smgplay();



/*******************************************************************************
* 函 数 名         : Timer1Init
* 函数功能                   : 定时器1初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer1Init()
{
        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。

    TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        ET1=1;//打开定时器1中断允许
        EA=1;//打开总中断
        TR1=1;//打开定时器                        
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{        
        LSA=0;
        LSB=0;
        LSC=0;
        Timer1Init();  //定时器1初始化
        P0=0x00;
        while(1);               
}

void time1() interrupt 3
{
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
                num1++;
if(num1==20)
{
smgplay();
num1=0;

}

        }

void smgplay()
{

for(num=0;num<16;num++)
{

P0=smgduan[num];


}

}

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:109943 发表于 2017-9-28 00:27 | 显示全部楼层
呵呵,这个 挺简单的吧。
回复

使用道具 举报

ID:82765 发表于 2017-9-28 06:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:137736 发表于 2017-9-28 07:55 | 显示全部楼层
程序和硬件有关,你找下数码管显示的例程改改就好了。
回复

使用道具 举报

ID:193818 发表于 2017-9-28 15:52 | 显示全部楼层
片选和段选的控制,好好想想吧
回复

使用道具 举报

ID:231376 发表于 2017-9-28 17:30 | 显示全部楼层
这不是个简单事么?

锁存器设置好就行了,写个数组搞定~
回复

使用道具 举报

ID:123289 发表于 2017-9-28 23:32 | 显示全部楼层
建议楼主改学CEO。
回复

使用道具 举报

ID:420797 发表于 2018-11-4 22:55 | 显示全部楼层
/**************************************************************************************
*                              定时器1实验                                                                                                  *
实现现象:下载程序后数码管最后一位间隔一秒循环显示0-F。使用单片机内部定时器可以实现准确延时。
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。                                                                                                                                                                  
***************************************************************************************/

#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};//显示0~F的值
u8 n=0;
/*******************************************************************************
* 函 数 名         : Timer1Init
* 函数功能                   : 定时器1初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer1Init()
{
        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。

        TH1=0XFC;        //给定时器赋初值,定时1ms
        TL1=0X18;       
        ET1=1;//打开定时器1中断允许
        EA=1;//打开总中断
        TR1=1;//打开定时器                       
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       
        LSA=0;
        LSB=0;
        LSC=0;
        Timer1Init();  //定时器1初始化
        while(1);               
}

/*******************************************************************************
* 函 数 名         : void Timer1() interrupt 3
* 函数功能                   : 定时器0中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer1() interrupt 3
{
        static u16 i;
        TH1=0XFC;        //给定时器赋初值,定时1ms
        TL1=0X18;
        i++;
        if(i==1000)
        {
                i=0;
                P0=smgduan[n++];
                if(n==16)n=0;       
        }       
}
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表