找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6144|回复: 13
收起左侧

求助帖,4位LED数码管显示0-9999利用定时中断单片机C程序

[复制链接]
ID:548551 发表于 2019-6-17 14:42 | 显示全部楼层 |阅读模式
首先感谢进来看的朋友,表示感谢。 作为一名新手,在写LED数码管显示的时候遇到了问题,所以特意来向您们请教的。我用的是单片机内部中断,一个中断为4MS,我不想用延时函数,延时让系统内部空转不允许。下面的图片是IO口设置情况,1-8是数码管的数字显示内容,9-12是千位到个位。 我现在就是那个千位百位哪里不知道怎么写。 不知道哪位大神能不能帮忙指导C程序思路。我借鉴一下。表示感谢!

哪位大佬能简单的指导一下我啊,求个大致的思路 想靠自己的能力制作出来,提升自己的电子技术水平

IO口定义内容

IO口定义内容
回复

使用道具 举报

ID:552614 发表于 2019-6-17 15:55 | 显示全部楼层
首先进行位选,就是选择在哪个数码管上显示,然后是段选,呈现什么样的字形。最基本要定义一个段选的数组
回复

使用道具 举报

ID:332444 发表于 2019-6-17 16:16 | 显示全部楼层
1=8就是段9-12就是位,假如你能点亮2位了,如法炮制就能点亮3位4位.
回复

使用道具 举报

ID:517466 发表于 2019-6-17 16:31 | 显示全部楼层
sbit bit1=P1^0;
sbit bit2=P1^1;
sbit bit3=P1^2;
sbit bit4=P1^3;
P0=千位数码管笔段数据;
bit1=0;//点亮数码管千位
延时;
bit1=1;
P0=百位数码管笔段数据;
bit2=0;//点亮数码管百位
延时;
bit2=1;
P0=十位数码管笔段数据;
bit3=0;//点亮数码管十位
延时;
bit3=1;
P0=个位数码管笔段数据;
bit4=0;//点亮数码管个位
延时;
bit4=1;
回复

使用道具 举报

ID:207421 发表于 2019-6-17 20:50 | 显示全部楼层
这种问题应该百度,百度有视频,原理图,源程序,很好借鉴
提问应该上至少传个原理图或源码,草图也行啊
不然大家猜不猜去,也浪费时间.
回复

使用道具 举报

ID:452821 发表于 2019-6-17 20:54 | 显示全部楼层
不知道你用的是共阴数码管还是共阳数码管,先假设你是共阴的,那就把你所需要亮的那个数码管的控制端为低电平,其余的为高,所以当你要显示个位的时候P1=0x07;//0111    类推,十位的时候P1=0x0b,百位0x0d,千位0x0e;所以你还需要对你要显示的数字进行分段,如1234分为显示1,2,3,4;所以要做的就是P1=0x0e;显示1;P1=0x0d;显示2;P1=0x0b;显示3;P1=0x07;显示4;
就可以了。
回复

使用道具 举报

ID:548551 发表于 2019-6-20 19:36 | 显示全部楼层
xianfajushi 发表于 2019-6-17 16:16
1=8就是段9-12就是位,假如你能点亮2位了,如法炮制就能点亮3位4位.

这个我知道。我现在的问题就是点亮不了第二位。如果是单点一位数码管我知道怎么点亮,现在我求助的是就是由一位到二位,二位到三位,三位到四位的过程和代码。
回复

使用道具 举报

ID:548551 发表于 2019-6-20 19:38 | 显示全部楼层
charles11 发表于 2019-6-17 15:55
首先进行位选,就是选择在哪个数码管上显示,然后是段选,呈现什么样的字形。最基本要定义一个段选的数组

首先谢谢您对我我的回复。 段选位选我知道,之前看了郭天祥的视频,他用的是延时函数,现在我不用延时函数。我直接用定时器来写。单个的我会点亮。 也能累加,但是就是9到10以后的不知道怎么写了。
回复

使用道具 举报

ID:548551 发表于 2019-6-20 19:38 | 显示全部楼层
lwh999995 发表于 2019-6-17 20:50
这种问题应该百度,百度有视频,原理图,源程序,很好借鉴
提问应该上至少传个原理图或源码,草图也行啊
...

好的。 我会注意的。谢谢提醒
回复

使用道具 举报

ID:548551 发表于 2019-6-20 20:13 | 显示全部楼层
尹子归来 发表于 2019-6-17 20:54
不知道你用的是共阴数码管还是共阳数码管,先假设你是共阴的,那就把你所需要亮的那个数码管的控制端为低电 ...

谢谢您的指导,我用的是共阳数码管,我就想让他一秒的时间自动计数累加,由0-9999,到了9999清零,重新开始计数。关于如何实现由9变换到10.再由99变化100,这程序我不会还请您指导一下。谢谢
回复

使用道具 举报

ID:505284 发表于 2019-6-21 00:27 来自手机 | 显示全部楼层
我建议你可以下载德飞莱开发资料程序参考一下,他的数码管就是用16位定时器写的,你可以参考一下
回复

使用道具 举报

ID:483407 发表于 2019-6-21 07:21 | 显示全部楼层
xqleft 发表于 2019-6-20 20:13
谢谢您的指导,我用的是共阳数码管,我就想让他一秒的时间自动计数累加,由0-9999,到了9999清零,重新开 ...

你可以这样来做:每4MS产生一次中断,用一个累加的变量(比如K)来记录进入中断的次数(不用0~9999,0~255就可以,类型为unsigned char,也不用清零),然后每次进入中断,K++;K对4求余;余数即为要点亮的位。
回复

使用道具 举报

ID:332444 发表于 2019-6-21 18:01 | 显示全部楼层
这里有点3位的例子点8位都没问题http://www.51hei.com/bbs/dpj-157313-1.html
回复

使用道具 举报

ID:786726 发表于 2020-6-23 11:53 | 显示全部楼层
#include <reg52.h>

sbit DGT0=P2^3;
sbit DGT1=P2^2;
sbit DGT2=P2^1;
sbit DGT3=P2^0;

unsigned char code  LedChar[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x90};
unsigned char LedBuff[4]={0x90,0x90,0x90,0x90};
unsigned char  flagls=0;
unsigned int cnt=0;
unsigned char i=0;
void main()
{
        unsigned int sec=9999;
       
        TMOD=0x01;//MOV TMOD,#01H
        TH0=0xFC;
        TL0=0x18;
  TR0=1;
        EA=1;
        ET0=1;
        while(1)
        {
                if(flagls==1)
                {
                        flagls=0;
                        sec--;
                        LedBuff[0]=LedChar[sec%10];
                        LedBuff[1]=LedChar[sec/10%10];
                        LedBuff[2]=LedChar[sec/100%10];
                        LedBuff[3]=LedChar[sec/1000%10];
                        if(sec==0)
                                sec=9999;
                }
        }
       
}
void InterruptTime0() interrupt 1
{
        TH0=0xFC;
        TL0=0x18;
        cnt++;
        if (cnt>=1000)
        {
                cnt=0;
                flagls=1;
        }
        P0=0xFF;
        switch (i)
        {
                case 0:DGT3=0;DGT2=0;DGT1=0;DGT0=1;i++;P0=LedBuff[0];break;
                case 1:DGT3=0;DGT2=0;DGT1=1;DGT0=0;i++;P0=LedBuff[1];break;
                case 2:DGT3=0;DGT2=1;DGT1=0;DGT0=0;i++;P0=LedBuff[2];break;
                case 3:DGT3=1;DGT2=0;DGT1=0;DGT0=0;i=0;P0=LedBuff[3];break;
        }
}
;;以上的代码可以试一下,亲测有效
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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