找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2772|回复: 11
打印 上一主题 下一主题
收起左侧

如何编写单片机数码管数字显示和消失的程序?

[复制链接]
跳转到指定楼层
楼主
ID:103131 发表于 2022-4-18 17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家

就是例如显示13,然后就消失了,然后再显示,1秒钟,感激不尽
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:149451 发表于 2022-4-19 06:46 | 只看该作者
别把数码管看的那么神秘,它不就是个LED的组合吗?LED亮一秒,再灭,不会吗?
回复

使用道具 举报

板凳
ID:103131 发表于 2022-4-19 08:11 | 只看该作者
w1179benp 发表于 2022-4-19 06:46
别把数码管看的那么神秘,它不就是个LED的组合吗?LED亮一秒,再灭,不会吗?

LED是单独亮灭,好简单,可是数码管一起亮,一起灭有点难度
回复

使用道具 举报

地板
ID:410674 发表于 2022-4-19 08:35 | 只看该作者
goldbirderman 发表于 2022-4-19 08:11
LED是单独亮灭,好简单,可是数码管一起亮,一起灭有点难度

一起灭就控制它们位选啊,位选全部关了,他就灭了
回复

使用道具 举报

5#
ID:140489 发表于 2022-4-19 08:37 | 只看该作者
设个标志位,在定时1秒使标志位取反,标志位为1显示,标志位为0就不显示,就可以了
回复

使用道具 举报

6#
ID:390416 发表于 2022-4-19 08:48 | 只看该作者
开辟一个code 数组 存储数字的字模0~F,那么第16个就写成全灭。
回复

使用道具 举报

7#
ID:390416 发表于 2022-4-19 08:49 | 只看该作者
然后再开辟一个变量数组,假设是5位数码管,那么就是5个字节 ,比如需要显示78526,那么就去调用上面CODE数组里面对应的值。如果要灭掉某位,就调用16.
具体的操作 可以观看《人人学会单片机》视频教程第16课。
回复

使用道具 举报

8#
ID:123289 发表于 2022-4-19 09:00 | 只看该作者
你看下硬件图,动哪里LED就不亮了,你就用程序M去控制它,让它不亮,则M就是消失程序。
同样,在M中,让它LED亮,则M又是显示程序了。
认真看LED手册及硬件图,显示与消失就是一条指令的事。
回复

使用道具 举报

9#
ID:103131 发表于 2022-4-19 10:13 | 只看该作者
lids 发表于 2022-4-19 08:37
设个标志位,在定时1秒使标志位取反,标志位为1显示,标志位为0就不显示,就可以了


void Timer0(void) interrupt 1 using 1
{
     
           unsigned int  num2;
           unsigned int ok;
           unsigned int fish;
          //fish = warnning();
       
         TH0=(65536-50000)/256;        
          TL0=(65536-50000)%256;
         //num++;
          
                
   num2++;
        if(num2 == 100)
                num2 = 0;
            ok++;
        if(ok == 10)
        {
                    ok = 0;
                     //ZUOWEI = !ZUOWEI;
               //YOUWEI = !YOUWEI;
                     warnning();  
                
                            
        }
                               
                          
                       
          
}
回复

使用道具 举报

10#
ID:103131 发表于 2022-4-19 10:14 | 只看该作者
lids 发表于 2022-4-19 08:37
设个标志位,在定时1秒使标志位取反,标志位为1显示,标志位为0就不显示,就可以了

unsigned int warnning(void)
{
            
      ZUOWEI = 0;
       
                        set_seg(warn[0]);
       
                        delay_ms(5);
       
                        ZUOWEI = 1;
       
                        YOUWEI = 0;
       
                        set_seg(warn[1]);
       
                        delay_ms(5);
       
                        YOUWEI = 1;
       
            
}
回复

使用道具 举报

11#
ID:140489 发表于 2022-4-19 10:22 | 只看该作者
void Timer0(void) interrupt 1 using 1
{
      
}
回复

使用道具 举报

12#
ID:140489 发表于 2022-4-19 10:33 | 只看该作者
bit flag;
unsigned int  num;
void Timer0Init(void)                //50毫秒@11.0592MHz
{
       
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TL0 = 0x00;                //设置定时初始值
        TH0 = 0x4C;                //设置定时初始值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
        EA=1;
}

void main()
{
     Timer0Init();
     while(1)
   {
        if(flag)
        {
         数码管显示
         }
         else
         {
          数码管不显示
          }
    }
}


void Timer0(void) interrupt 1 using 1
{
        TL0 = 0x00;                //设置定时初始值
        TH0 = 0x4C;                //设置定时初始值
       num++;
       if(num==20)
      {
            num=0;
           flag=!flag;
      }

}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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