久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1085|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)定時器數(shù)碼管程序調(diào)試卡著了,求指教

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:619500 發(fā)表于 2023-4-29 23:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用動態(tài)掃描和定時器0在數(shù)碼管上顯示出從543210開始以1%秒的速度往下遞減直至543111并保持顯示此數(shù),與此同時利用定時器0以500MS速度進(jìn)行流水燈從上至下移動,同時蜂鳴器發(fā)聲,當(dāng)數(shù)碼管上數(shù)減到停止時,實驗板上流水燈全部閃爍4次,數(shù)碼管全熄滅。單片機(jī)進(jìn)入休眠狀態(tài)。
我寫的單片機(jī)程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit ledla=P2^5;
sbit dula=P2^6;
sbit wela=P2^7;
sbit laba=P2^3;
uint num,n,e;
uchar b,i,c,d;
display();
delay(uchar);


void main()
{      
        TMOD=0x01;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        EA=1;
        ET0=1;
        TR0=1;      //開中斷
        num=999;     //項目 只有后三位變化。我就給999;
        b=7;       //用來給八個流水燈循環(huán)用
        laba=0;     //蜂鳴器開
        d=0;       //自己寫的數(shù)碼開始保持543111標(biāo)志位
        while(1)
        {
      
                 display();//數(shù)碼管顯示
                P1=~(1<<b);//流水燈顯示
               
                if(i==8)
                {
                        i=0;
                        b=7;
                }


               
                if(d==1)//數(shù)碼管保持在543111后d=1,進(jìn)入以后操作
                {
                       
                       
                        for(c=0;c<3;c++)
                        {
                                P1=0x00;
                                for(e=0;e<65535;e++);
                                P1=0xff;
                                for(e=0;e<65535;e++);//流水燈全亮并亮滅三次
                        }


                        laba=1;                        //關(guān)蜂鳴器
                        P1=0xff;                //關(guān)流水燈
            P0=0xff;
                        wela=1;
                        wela=0;
                        P0=0xff;
                        dula=1;
                        dula=0;                        //關(guān)數(shù)碼管
                        PCON=0x02;                //進(jìn)入休眠
                }


        }
}


delay(uchar x)    //延時
{      
        uchar a,b;
        for(a=x;a>0;a--)
                for(b=200;b>0;b--);
}
void t0() interrupt 1
{      
      
        n++;
        if(num>111)   //num數(shù)碼管的后三位
        {
                num--;
                d=0;
        }
        if(num==111)
        {
                d=1;
        }
               
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
      
        if(n==50)
        {
                i++;
                b--;
                n=0;
        }
}
display()
{
        P0=0xff;
        wela=1;
        wela=0;
        P0=table[6];
        dula=1;
        dula=0;
        P0=0xfe;
        wela=1;
        wela=0;
        delay(5);


P0=0xff;
        wela=1;
        wela=0;
        P0=table[5];
        dula=1;
        dula=0;
        P0=0xfd;
        wela=1;
        wela=0;
        delay(5);
P0=0xff;
        wela=1;
        wela=0;
        P0=table[4];
        dula=1;
        dula=0;
        P0=0xfb;
        wela=1;
        wela=0;
        delay(5);
P0=0xff;
        wela=1;
        wela=0;
        P0=table[num/100];
        dula=1;
        dula=0;
        P0=0xf7;
        wela=1;
        wela=0;
        delay(5);
P0=0xff;
        wela=1;
        wela=0;
        P0=table[num%100/10];
        dula=1;
        dula=0;
        P0=0xef;
        wela=1;
        wela=0;
        delay(5);
P0=0xff;
        wela=1;
        wela=0;
        P0=table[num%100%10];
        dula=1;
        dula=0;
        P0=0xdf;
        wela=1;
        wela=0;
        delay(5);
}
以上是單片機(jī)代碼
下面是問題:
惟一的出錯的在于。沒辦法保持543111;運行到最后數(shù)碼管前五個不亮,第六個保持亮1到結(jié)束!
if(d==1)下面這些內(nèi)容不要。確實可以保持在543111;有了if(d==1)下面這些就會最后一個管亮1.
請各位大神指教。十分感謝。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:619500 發(fā)表于 2023-4-30 10:04 | 只看該作者
找出來了。DISPLAY()要放中斷函數(shù)里面才是一直運行,不然停下后。只能最后一個數(shù)碼管顯示1
回復(fù)

使用道具 舉報

板凳
ID:213173 發(fā)表于 2023-4-30 10:33 | 只看該作者
樓主的意圖本身就存在邏輯問題 ,“543210開始以1%秒的速度往下遞減直至543111” 其過程就是990ms,在此區(qū)間以500mS速度進(jìn)行流水燈從上至下移動???
運行到最后數(shù)碼管前五個不亮,第六個保持亮1到結(jié)束。是因為流水燈全亮并亮滅4次期間數(shù)碼管停止掃描。
給你改了:把543210遞減至543111的時間改為9.9s以便觀察。重點是要理解數(shù)碼管動態(tài)顯示函數(shù)的運行方式。
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. sbit buzzer=P2^3;

  8. uchar code table[]={//共陰數(shù)碼管段碼"0~f-."
  9.                 0x3f,0x06,0x5b,0x4f,
  10.                 0x66,0x6d,0x7d,0x07,
  11.                 0x7f,0x6f,0x77,0x7c,
  12.                 0x39,0x5e,0x79,0x71,0x40,0x80};
  13. uchar data dis_buf[6];                //緩存數(shù)組
  14. uchar b,c;
  15. uchar count,num;
  16. bit stop,mark,sign;

  17. void Timer0Init()                //1毫秒@11.0592MHz
  18. {
  19.         TMOD= 0x01;                //設(shè)置定時器模式
  20.         TL0 = 0x66;                //設(shè)置定時初始值
  21.         TH0 = 0xFC;                //設(shè)置定時初始值
  22.         TF0 = 0;                //清除TF0標(biāo)志
  23.         TR0 = 1;                //定時器0開始計時
  24.         EA  = 1;
  25.         ET0 = 1;
  26. }

  27. void display()//數(shù)碼管動態(tài)顯示函數(shù)
  28. {
  29.         static uchar i;
  30.         P0=0x00;      dula=1;dula=0;//消隱
  31.         P0=~(0x01<<i);wela=1;wela=0;//送位碼
  32.         P0=dis_buf[i];dula=1;dula=0;//送段碼
  33.         i=++i%6;//循環(huán)計數(shù)
  34. }

  35. void main()
  36. {      
  37.         Timer0Init();
  38.         dis_buf[0]=table[5];//固定顯示部分
  39.         dis_buf[1]=table[4];
  40.         dis_buf[2]=table[3];
  41.         P1=0xfe;
  42.         buzzer=0;
  43.         num=210;
  44.         while(1)
  45.         {
  46.                 if(mark)//周期100ms
  47.                 {
  48.                         mark=0;
  49.                         if(stop==0)//流水燈
  50.                         {
  51.                                 P1=P1<<1|0x01;
  52.                                 if(P1==0xff)
  53.                                         P1=0xfe;
  54.                         }
  55.                         else  //閃爍燈
  56.                         {
  57.                                 if(++b==5)//500ms
  58.                                 {
  59.                                         b=0;       
  60.                                         P1=~P1;
  61.                                         if(++c==8)//閃爍4次結(jié)束運行,全部復(fù)位
  62.                                         {
  63.                                                 c=0;
  64.                                                 EA=0;
  65.                                                 buzzer=1;   //關(guān)蜂鳴器
  66.                                                 P1=0xff;  //關(guān)LED
  67.                                                 P0=0xff;  //關(guān)數(shù)碼管
  68.                                                 dula=1;
  69.                                                 wela=1;
  70.                                                 _nop_();
  71.                                                 _nop_();
  72.                                                 PCON=0x02;//進(jìn)入休眠
  73.                                         }
  74.                                 }
  75.                         }
  76.                 }
  77.                 dis_buf[3]=table[num/100%10];
  78.                 dis_buf[4]=table[num/10%10];
  79.                 dis_buf[5]=table[num%10];
  80.         }
  81. }

  82. void Timer0Interrupt() interrupt 1
  83. {   
  84.         TH0 = 0xFC;                //1毫秒@11.0592MHz
  85.         TL0 = 0x66;

  86.         if(++count==100)//100ms
  87.         {
  88.                 count=0;
  89.                 mark=1;//100ms標(biāo)志
  90.                 if(!stop)
  91.                 {
  92.                         num--;
  93.                         if(num==111)
  94.                         {
  95.                                 stop=1;//計數(shù)結(jié)束
  96.                                 P1=0xff;//流水燈結(jié)束
  97.                         }
  98.                 }
  99.         }
  100.         display();//數(shù)碼管動態(tài)顯示函數(shù)
  101. }



復(fù)制代碼
回復(fù)

使用道具 舉報

地板
ID:619500 發(fā)表于 2023-4-30 17:07 | 只看該作者
wulin 發(fā)表于 2023-4-30 10:33
樓主的意圖本身就存在邏輯問題 ,“543210開始以1%秒的速度往下遞減直至543111” 其過程就是990ms,在此區(qū) ...

哈哈。是的。動態(tài)掃描理解的不到位。你這代碼寫的太漂亮了。很感謝。我好好消化一下。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久蜜柚 | 亚洲精品久久区二区三区蜜桃臀 | 日韩av免费在线观看 | a级性视频| 久久99国产精一区二区三区 | 在线观看不卡av | 酒色成人网 | 最新免费黄色网址 | www.国产| 欧美日韩一二三区 | 日韩有码在线观看 | 超碰97人人人人人蜜桃 | 超碰美女在线 | 国产精品99久久久久久久久久久久 | 中文二区 | 不卡一二三区 | 亚洲播放| 日韩一区不卡 | 中文字幕高清av | 在线视频亚洲 | 成人在线视频免费看 | 91网站在线播放 | 精品婷婷 | 国产精品区二区三区日本 | 精品国产欧美日韩不卡在线观看 | 秋霞a级毛片在线看 | 久久久久免费精品国产小说色大师 | 欧美在线色 | 日韩一级免费电影 | 一区二区三区欧美在线观看 | 欧美日韩精品久久久免费观看 | 国产99热精品| 国产精品视频一区二区三区 | 亚洲精品影院 | 欧美电影免费网站 | 日韩在线一区二区 | 午夜久久久久 | 日韩精品一区二区三区中文字幕 | 精品国产三级 | 一级毛片免费 | 色综合视频 |