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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

步進(jìn)電機(jī)轉(zhuǎn)動(dòng)數(shù)碼管滅掉,而電機(jī)停止了數(shù)碼又亮起,幫一下這程序什么改數(shù)碼管才不...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:516928 發(fā)表于 2022-4-6 23:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
#include<reg52.h>
sbit K2 = P2^0;         
unsigned char werbg = 0;
unsigned char werbg2 = 0;
unsigned int Num ;
unsigned char shan,cutnum,addnum,startnum,setnum,time;

sbit SMG3 = P3^6;                                       
sbit SMG4 = P3^7;                                       
unsigned int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x71};           
unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6};
unsigned char code BeatCodf[8] = { 0x6, 0x7, 0x3, 0xB, 0x9, 0xD, 0xC, 0xE};
unsigned char t0_ct;

unsigned char Buff[4];
void delayms(xms);
void Display(void);
void delay(unsigned int cnt)
{
    while (cnt--);
}
void delayms(xms)
{
         unsigned int x,y;
         for(x=xms;x>0;x--)
                 for(y=110;y>0;y--);
}

void TrunMotor(unsigned long angle)
{
    unsigned char buf;
    unsigned char step = 0;
    unsigned long beats = 0;   
                beats = (angle * 1100) / 20;
          if(werbg == 1)
             {
          while (beats--)
             {
                  buf  = P1 & 0xF0;      
                  buf |= BeatCode[step];  
                  P1   = buf;            
                  step++;        
                  step &= 0x07;  
                  delay(200);   
             }
          P1 = 0x00;
                      werbg = 0;
                                        TR0 = 1;         
       }

    if(werbg2==1)
                   {
          while (beats--)
            {
                buf  = P1 & 0xF0;      
                buf |= BeatCodf[step];  
                P1   = buf;            
                step++;        
                step &= 0x07;  
                delay(200);   
            }
         P1 = 0x00;
                     werbg2 = 0;
                         }
}
void KeyScan(void)
{
        if(K2==0)               
        {
                 delay(10);
                if(K2==0)                  
                {
                        while(!K2);  
                        werbg = 1;         
                                               
                }      
        }
}
void T0_Init()
{
        TMOD = 0x01;
        TH0 = (65535-100)/256;  
        TL0 = (65535-100)%256;
        EA = 1;
        ET0 = 1;
}
void T0_time() interrupt 1
{
        TH0 = (65535-100)/256;   
        TL0 = (65535-100)%256;
     if(++t0_ct==133)
       {
            t0_ct = 0;      
                        if(Num==40)
                           {
                                    Num=0;                                                                                               
                                          if(time==0)              
                                                   {                                                                                          
                                                                  time=25;
                                                   }
                   time--;
                                                                         if(time==0)
                                                                            {
                                                                               TR0 = 0;
                                                                               werbg2=1;
                                                                            }
               }
                              else Num++;
                   }
}
void Display(void)
{
        unsigned char  b3,b4;
                b3=time/10;
                b4=time%10;      
          P0=table[b3];
          SMG3=0;                                                         
          delayms(3);
          SMG3=1;

          P0=table[b4];
    SMG4=0;
    delayms(3);                                                
    SMG4=1;
}
void main()
{
          T0_Init();
                while(1)
                {
                          KeyScan();
              Display();
                                TrunMotor(20*1);
                }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:96682 發(fā)表于 2022-4-7 07:29 來(lái)自手機(jī) | 只看該作者
是程序還是電源功率有問(wèn)題?
回復(fù)

使用道具 舉報(bào)

板凳
ID:161164 發(fā)表于 2022-4-7 07:45 來(lái)自手機(jī) | 只看該作者
開多個(gè)定時(shí)器1,1ms中斷,把Display放到中斷中循環(huán)顯示而不要用delay
回復(fù)

使用道具 舉報(bào)

地板
ID:516928 發(fā)表于 2022-4-7 09:11 | 只看該作者
lkc8210 發(fā)表于 2022-4-7 07:45
開多個(gè)定時(shí)器1,1ms中斷,把Display放到中斷中循環(huán)顯示而不要用delay

什么開多個(gè)定時(shí)器1?
什么寫程序,可給個(gè)參考
回復(fù)

使用道具 舉報(bào)

5#
ID:955673 發(fā)表于 2022-4-7 09:47 | 只看該作者
1ms中斷,不要用delay,相當(dāng)于弄個(gè)低速時(shí)鐘,要多少按計(jì)數(shù)來(lái)
回復(fù)

使用道具 舉報(bào)

6#
ID:121859 發(fā)表于 2022-4-7 14:10 | 只看該作者
必然的,因?yàn)殡姍C(jī)轉(zhuǎn)動(dòng)的時(shí)候,沒(méi)有調(diào)用顯示,要克服這個(gè)問(wèn)題,需要用定時(shí)器來(lái)控制顯示,這樣才不會(huì)受到其他程序的影響。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:516928 發(fā)表于 2022-4-7 23:10 | 只看該作者
是這樣寫嗎?
  1. #include<reg52.h>

  2. unsigned char werbg = 0;
  3. unsigned char werbg2 = 0;
  4. unsigned int Num ;
  5. unsigned char shan,cutnum,addnum,startnum,setnum,time;
  6. sbit K2 = P2^0;         
  7. sbit SMG3 = P3^6;                                       
  8. sbit SMG4 = P3^7;                                       
  9. unsigned int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x71};           
  10. unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6};
  11. unsigned char code BeatCodf[8] = { 0x6, 0x7, 0x3, 0xB, 0x9, 0xD, 0xC, 0xE};
  12. unsigned char t0_ct,num2;

  13. void delayms(xms);
  14. void Display(void);
  15. void delay(unsigned int cnt)
  16. {
  17.     while (cnt--);
  18. }
  19. void delayms(xms)
  20. {
  21.          unsigned int x,y;
  22.          for(x=xms;x>0;x--)
  23.                  for(y=110;y>0;y--);
  24. }

  25. void TrunMotor(unsigned long angle)
  26. {
  27.     unsigned char buf;
  28.     unsigned char step = 0;
  29.     unsigned long beats = 0;   
  30.                 beats = (angle * 1100) / 20;
  31.           if(werbg == 1)
  32.              {
  33.           while (beats--)
  34.              {
  35.                   buf  = P1 & 0xF0;      
  36.                   buf |= BeatCode[step];  
  37.                   P1   = buf;            
  38.                   step++;        
  39.                   step &= 0x07;  
  40.                   delay(70);   
  41.              }
  42.           P1 = 0x00;
  43.                       werbg = 0;
  44.                                         TR1 = 1;         
  45.        }

  46.     if(werbg2==1)
  47.                    {
  48.           while (beats--)
  49.             {
  50.                 buf  = P1 & 0xF0;      
  51.                 buf |= BeatCodf[step];  
  52.                 P1   = buf;            
  53.                 step++;        
  54.                 step &= 0x07;  
  55.                 delay(70);   
  56.             }
  57.          P1 = 0x00;
  58.                      werbg2 = 0;
  59.                          }
  60. }
  61. void KeyScan(void)
  62. {
  63.         if(K2==0)               
  64.         {
  65.                  delay(10);
  66.                 if(K2==0)                  
  67.                 {
  68.                         while(!K2);  
  69.                         werbg = 1;         
  70.                                                
  71.                 }      
  72.         }
  73. }
  74. void T0_Init()
  75. {
  76.         TMOD = 0x11;
  77.         TH0 = (65535-45872)/256;  
  78.         TL0 = (65535-45872)%256;
  79.         TH1 = (65536-45872)/256;
  80.         TL1 = (65536-45872)%256;
  81.         EA = 1;
  82.         ET0 = 1;
  83.         ET1 = 1;
  84.         TR0 = 1;
  85.         
  86. }
  87. void T0_time() interrupt 1
  88. {
  89.         TH0 = (65535-100)/256;   
  90.         TL0 = (65535-100)%256;
  91.    num2++;      
  92.         if(num2 == 20)  
  93.         {
  94.                 num2 = 0;   
  95.         Display();
  96.         }  
  97. }
  98. void T1_time() interrupt 3  
  99. {
  100.         TH1 = (65536-45872)/256;      
  101.         TL1 = (65536-45872)%256;
  102.       
  103.         if(++t0_ct==2)
  104.        {
  105.             t0_ct = 0;      
  106.                         if(Num==10)
  107.                            {
  108.                                     Num=0;                                                                                               
  109.                                           if(time==0)              
  110.                                                    {                                                                                          
  111.                                                                   time=25;
  112.                                                    }
  113.                    time--;
  114.                                                                          if(time==0)
  115.                                                                             {
  116.                                                                                TR1 = 0;
  117.                                                                                werbg2=1;
  118.                                                                             }
  119.                }
  120.                               else Num++;
  121.                    }
  122. }



  123. void Display(void)
  124. {
  125.         unsigned char  b3,b4;
  126.                 b3=time/10;
  127.                 b4=time%10;      
  128.           P0=table[b3];
  129.           SMG3=0;                                                         
  130.           delayms(1);
  131.           SMG3=1;

  132.           P0=table[b4];
  133.     SMG4=0;
  134.     delayms(1);                                                
  135.     SMG4=1;
  136. }
  137. void main()
  138. {
  139.           T0_Init();
  140.                 while(1)
  141.                 {
  142.                           KeyScan();
  143.             
  144.                                 TrunMotor(20*1);
  145.                 }
  146. }


復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

8#
ID:161164 發(fā)表于 2022-4-8 13:28 | 只看該作者

不是~
Display()內(nèi)不要有delay
加個(gè)靜態(tài)變量static bit i = 0;
if(i)
{
顯示個(gè)位
}else{
顯示十位
}
i= !i;//取反
回復(fù)

使用道具 舉報(bào)

9#
ID:123289 發(fā)表于 2022-4-8 15:46 | 只看該作者
估計(jì)延時(shí)程序是用DELAY()硬做的。
改一下,延時(shí)用中斷做,或許就OK了。
回復(fù)

使用道具 舉報(bào)

10#
ID:516928 發(fā)表于 2022-4-8 19:27 | 只看該作者
lkc8210 發(fā)表于 2022-4-8 13:28
不是~
Display()內(nèi)不要有delay
加個(gè)靜態(tài)變量static bit i = 0;

好的,謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产中文字幕在线 | 暴草美女 | 在线国产视频 | 美女黄网站 | 国产精品久久久久久福利一牛影视 | 欧美一区二区三区在线 | 成人伊人网 | 久久久久中文字幕 | 久久国内精品 | 99久热在线精品视频观看 | 日韩在线精品视频 | 免费永久av | 日本黄色免费片 | 国产精品777一区二区 | 日韩欧美专区 | 亚洲免费一区二区 | 国产成人小视频 | 欧美亚洲日本 | 中文字幕电影在线观看 | 精品欧美乱码久久久久久 | 久热免费在线 | 国产精品亚洲一区 | 国产99久久精品 | 毛片免费观看 | 91看片免费版 | 国产九九av | 成人精品国产一区二区4080 | 日本三级做a全过程在线观看 | 美女一级毛片 | 久久一 | 亚洲 自拍 另类 欧美 丝袜 | 99精品国产一区二区三区 | 国产精品久久久久久久久图文区 | 日韩精品免费一区二区在线观看 | 日韩人体在线 | 国产专区在线 | 亚洲精品久久久一区二区三区 | 国产高清在线精品一区二区三区 | 久久久精品日本 | 午夜男人天堂 | 午夜男人天堂 |