标题: 如何编写单片机数码管数字显示和消失的程序? [打印本页]

作者: goldbirderman    时间: 2022-4-18 17:06
标题: 如何编写单片机数码管数字显示和消失的程序?
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家

就是例如显示13,然后就消失了,然后再显示,1秒钟,感激不尽

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

LED是单独亮灭,好简单,可是数码管一起亮,一起灭有点难度
作者: sgly    时间: 2022-4-19 08:35
goldbirderman 发表于 2022-4-19 08:11
LED是单独亮灭,好简单,可是数码管一起亮,一起灭有点难度

一起灭就控制它们位选啊,位选全部关了,他就灭了
作者: lids    时间: 2022-4-19 08:37
设个标志位,在定时1秒使标志位取反,标志位为1显示,标志位为0就不显示,就可以了
作者: 人人学会单片机    时间: 2022-4-19 08:48
开辟一个code 数组 存储数字的字模0~F,那么第16个就写成全灭。
作者: 人人学会单片机    时间: 2022-4-19 08:49
然后再开辟一个变量数组,假设是5位数码管,那么就是5个字节 ,比如需要显示78526,那么就去调用上面CODE数组里面对应的值。如果要灭掉某位,就调用16.
具体的操作 可以观看《人人学会单片机》视频教程第16课。
作者: yzwzfyz    时间: 2022-4-19 09:00
你看下硬件图,动哪里LED就不亮了,你就用程序M去控制它,让它不亮,则M就是消失程序。
同样,在M中,让它LED亮,则M又是显示程序了。
认真看LED手册及硬件图,显示与消失就是一条指令的事。
作者: goldbirderman    时间: 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();  
                
                            
        }
                               
                          
                       
          
}

作者: goldbirderman    时间: 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;
       
            
}
作者: lids    时间: 2022-4-19 10:22
void Timer0(void) interrupt 1 using 1
{
      
}
作者: lids    时间: 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;
      }

}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1