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

標(biāo)題: 以前沒(méi)做過(guò)單片機(jī)寫了個(gè)簡(jiǎn)單中斷出問(wèn)題了,求助啊! [打印本頁(yè)]

作者: dabaojiu    時(shí)間: 2017-4-27 21:32
標(biāo)題: 以前沒(méi)做過(guò)單片機(jī)寫了個(gè)簡(jiǎn)單中斷出問(wèn)題了,求助啊!
本帖最后由 dabaojiu 于 2017-5-4 10:09 編輯


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Flag0;
uchar Flag1;
//--------------------------------------------------------------------------------------------------------------------------
void DelayMs(uint t)//定義延時(shí)函數(shù)
{
        uchar j;
        while(t--)
        {        
                for(j=0;j<113;j++);
        }


}
//--------------------------------------------------------------------------------------------------------------------------
void TurnLeft (void)  //定義LED燈做左循環(huán)
{
                  
unsigned char i;  //定義一個(gè)無(wú)符號(hào)字符型局部變量 i 取值范圍 0~255
DelayMs(500);
P1=0xfe;           //賦初始值
while (1)         //主循環(huán)
  {
for(i=0;i<8;i++)   //加入 for循環(huán),表明for循環(huán)大括號(hào)中的程序循環(huán)執(zhí)行8次
  {
   DelayMs(500);
   P1<<=1;
   P1=P1|0x01;     //左移后,最右端自動(dòng)賦值0,所以需要該語(yǔ)句賦值1
  }
  P1=0xfe;           //重新賦初始值
  //主循環(huán)中添加其他需要一直工作的程序
  }
}
//--------------------------------------------------------------------------------------------------------------------------
void TurnRight (void)
{
                  
unsigned char k;  //定義一個(gè)無(wú)符號(hào)字符型局部變量 k 取值范圍 0~255
DelayMs(500);
P1=0x7f;           //賦初始值
while (1)          //主循環(huán)
  {
for(k=0;k<8;k++)   //加入 for循環(huán),表明for循環(huán)大括號(hào)中的程序循環(huán)執(zhí)行8次
  {
   DelayMs(500);
   P1>>=1;
   P1=P1|0x80;     //右移后,最左端自動(dòng)賦值0,所以需要該語(yǔ)句賦值1
  }
  P1=0x7f;           //重新賦初始值
  
  }
}
//--------------------------------------------------------------------------------------------------------------------------


void FastTurnLeft (void)  //定義LED燈做快速的左循環(huán)
{
                  
unsigned char l;  //定義一個(gè)無(wú)符號(hào)字符型局部變量 l 取值范圍 0~255
DelayMs(500);
P1=0xfe;           //賦初始值
while (1)         //主循環(huán)
  {
for(l=0;l<8;l++)   //加入 for循環(huán),表明for循環(huán)大括號(hào)中的程序循環(huán)執(zhí)行8次
  {
   DelayMs(50);    //做快速左循環(huán)時(shí)調(diào)整了延時(shí)函數(shù)
   P1<<=1;
   P1=P1|0x01;     //左移后,最右端自動(dòng)賦值0,所以需要該語(yǔ)句賦值1
  }
  P1=0xfe;           //重新賦初始值
  //主循環(huán)中添加其他需要一直工作的程序
  }
}


//--------------------------------------------------------------------------------------------------------------------------
void main(void)  //定義主函數(shù)
{
        IE=0x85;  //開(kāi)放式中斷
        TCON=0x05; //邊沿方式,自清中斷標(biāo)志


while(1)
  {
    TurnLeft(); //調(diào)用數(shù)碼管左移
  if(Flag0 == 1)
          {
          TurnRight();//調(diào)用數(shù)碼管右移
          }
  if(Flag1 == 1)
          {
          FastTurnLeft();//調(diào)用數(shù)碼管快速右移
          }


  }


}


//--------------------------------------------------------------------------------------------------------------------------
//兩個(gè)中斷程序控制Flag1,F(xiàn)lag0兩個(gè)狀態(tài)標(biāo)識(shí)。
void Ex0Isr()interrupt 0  
{
        if (Flag0 == 0)Flag0 = 1;
        Flag1 = 0;
        
}
void Ex1Isr()interrupt 2
{
        if (Flag1 == 0)Flag1 = 1;
        Flag0 = 0;        


}



作者: bbg3659    時(shí)間: 2017-4-27 21:32
剛沒(méi)發(fā)出去?#include "reg51.h"
sbit K1=P3^1;
sbit K2=P3^0;

unsigned char led1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char led2[9]={0x7f,0x3f,0x9f,0xcf,0xe7,0xf3,0xf9,0xfc,0xfe};
unsigned char i,j;
void delay(unsigned int x)
{
  unsigned char a,b;
  while(x--);
  for(a=0;a<100;a++)
    {
          for(b=0;b<100;b++)
           {}
        }
}

void mint()
  {
     unsigned char a,b;
          if(i==1&&j==0)
          {       
            switch(a)
                {
            case 0:P2=led1[0];a++;delay(20000);break;
                case 1:P2=led1[1];a++;delay(20000);break;
                case 2:P2=led1[2];a++;delay(20000);break;
                case 3:P2=led1[3];a++;delay(20000);break;
                case 4:P2=led1[4];a++;delay(20000);break;
                case 5:P2=led1[5];a++;delay(20000);break;
                case 6:P2=led1[6];a++;delay(20000);break;
                case 7:P2=led1[7];a=0;delay(20000);break;
                default:  break;
           }
          }
          if(j==1&&i==0)
             {       
                 switch(b)
                 {
                case 0:P2=led2[0];b++;        delay(20000);break;
                case 1:P2=led2[1];b++;        delay(20000);break;
                case 2:P2=led2[2];b++;        delay(20000);break;
                case 3:P2=led2[3];b++;        delay(20000);break;
                case 4:P2=led2[4];b++;        delay(20000);break;
                case 5:P2=led2[5];b++;        delay(20000);break;
                case 6:P2=led2[6];b++;        delay(20000);break;
                case 7:P2=led2[7];b++;        delay(20000);break;
                case 8:P2=led2[8];b=0;        delay(20000);break;
                 default:  break;
                  }
                 }
  }

void main()
{

  while(1)
    {
          mint();
          if(K1==0)
             {
                  delay(10);
                  if(K1==0)
                    {
                         i=1;
                         j=0;
                        }
                        while(!K1);
                 }
                 if(K2==0)
                     {
                          delay(10);
                          if(K2==0)
                            {
                                 j=1;
                                 i=0;
                                }
                  while(!K2);         
                         }

        }
}


試了效果可以.你改下腳或者數(shù)組試試....
作者: dabaojiu    時(shí)間: 2017-4-27 21:36
請(qǐng)大家來(lái)指導(dǎo)指導(dǎo)謝謝
作者: 你像風(fēng)兒來(lái)了    時(shí)間: 2017-4-28 13:19
TurnLeft(); //調(diào)用數(shù)碼管左移
這個(gè)函數(shù)里面有個(gè)while(1)大循環(huán),程序根本不會(huì)執(zhí)行后面的兩個(gè)if判斷,所以你中斷里標(biāo)志改變了也沒(méi)有用,因?yàn)槌绦蛞恢眻?zhí)行TurnLeft(); //調(diào)用數(shù)碼管左移

程序我?guī)湍阈薷牧?br />

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Flag0=0;
uchar Flag1=0;
//--------------------------------------------------------------------------------------------------------------------------
void DelayMs(uint t)//定義延時(shí)函數(shù)
{
        uchar j;
        while(t--)
        {        
                for(j=0;j<113;j++);
        }


}
//--------------------------------------------------------------------------------------------------------------------------
void TurnLeft (void)  //定義LED燈做左循環(huán)
{
                  
unsigned char i;  //定義一個(gè)無(wú)符號(hào)字符型局部變量 i 取值范圍 0~255
DelayMs(500);
P1=0xfe;           //賦初始值
//while (1)         //主循環(huán)
  {
for(i=0;i<8;i++)   //加入 for循環(huán),表明for循環(huán)大括號(hào)中的程序循環(huán)執(zhí)行8次
  {
   DelayMs(500);
   P1<<=1;
   P1=P1|0x01;     //左移后,最右端自動(dòng)賦值0,所以需要該語(yǔ)句賦值1
  }
  P1=0xfe;           //重新賦初始值
  //主循環(huán)中添加其他需要一直工作的程序
  }
}
//--------------------------------------------------------------------------------------------------------------------------
void TurnRight (void)
{
                  
unsigned char k;  //定義一個(gè)無(wú)符號(hào)字符型局部變量 k 取值范圍 0~255
DelayMs(500);
P1=0x7f;           //賦初始值
//while (1)          //主循環(huán)
  {
for(k=0;k<8;k++)   //加入 for循環(huán),表明for循環(huán)大括號(hào)中的程序循環(huán)執(zhí)行8次
  {
   DelayMs(500);
   P1>>=1;
   P1=P1|0x80;     //右移后,最左端自動(dòng)賦值0,所以需要該語(yǔ)句賦值1
  }
  P1=0x7f;           //重新賦初始值
  
  }
}
//--------------------------------------------------------------------------------------------------------------------------


void FastTurnLeft (void)  //定義LED燈做快速的左循環(huán)
{
                  
unsigned char l;  //定義一個(gè)無(wú)符號(hào)字符型局部變量 l 取值范圍 0~255
DelayMs(500);
P1=0xfe;           //賦初始值
//while (1)         //主循環(huán)
  {
for(l=0;l<8;l++)   //加入 for循環(huán),表明for循環(huán)大括號(hào)中的程序循環(huán)執(zhí)行8次
  {
   DelayMs(50);    //做快速左循環(huán)時(shí)調(diào)整了延時(shí)函數(shù)
   P1<<=1;
   P1=P1|0x01;     //左移后,最右端自動(dòng)賦值0,所以需要該語(yǔ)句賦值1
  }
  P1=0xfe;           //重新賦初始值
  //主循環(huán)中添加其他需要一直工作的程序
  }
}


//--------------------------------------------------------------------------------------------------------------------------
void main(void)  //定義主函數(shù)
{
        IE=0x85;  //開(kāi)放式中斷
        TCON=0x05; //邊沿方式,自清中斷標(biāo)志
          

while(1)
  {


  if((Flag0==0)&&(Flag1 == 0))
  {
    TurnLeft(); //調(diào)用數(shù)碼管左移
  }

  if(Flag0 == 1)
          {
           TurnRight ();
          }
  if(Flag1 == 1)
          {
         FastTurnLeft();//調(diào)用數(shù)碼管快速右移
          }
  }


}


//--------------------------------------------------------------------------------------------------------------------------
//兩個(gè)中斷程序控制Flag1,F(xiàn)lag0兩個(gè)狀態(tài)標(biāo)識(shí)。
void Ex0Isr()interrupt 0  
{
        if (Flag0 == 0)Flag0 = 1;
        Flag1 = 0;
               
        
}
void Ex1Isr()interrupt 2
{
        if (Flag1 == 0)Flag1 = 1;
        Flag0 = 0;        


}



作者: bbg3659    時(shí)間: 2017-4-28 14:23
這樣在跑for()的時(shí)候,你跳不出吧.必須要它跑完.
我寫了一個(gè),試了一下可以跑兩個(gè)流水,中間也可以跳出來(lái).你改下腳或者數(shù)組試試...我也在學(xué)習(xí)中

#include "reg51.h"
sbit K1=P3^1;
sbit K2=P3^0;

unsigned char led1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char led2[9]={0x7f,0x3f,0x9f,0xcf,0xe7,0xf3,0xf9,0xfc,0xfe};
unsigned char i,j;
void delay(unsigned int x)
{
  unsigned char a,b;
  while(x--);
  for(a=0;a<100;a++)
    {
          for(b=0;b<100;b++)
           {}
        }
}

void mint()
  {
     unsigned char a,b;
          if(i==1&&j==0)
          {       
            switch(a)
                {
            case 0:P2=led1[0];a++;delay(20000);break;
                case 1:P2=led1[1];a++;delay(20000);break;
                case 2:P2=led1[2];a++;delay(20000);break;
                case 3:P2=led1[3];a++;delay(20000);break;
                case 4:P2=led1[4];a++;delay(20000);break;
                case 5:P2=led1[5];a++;delay(20000);break;
                case 6:P2=led1[6];a++;delay(20000);break;
                case 7:P2=led1[7];a=0;delay(20000);break;
                default:  break;
           }
          }
          if(j==1&&i==0)
             {       
                 switch(b)
                 {
                case 0:P2=led2[0];b++;        delay(20000);break;
                case 1:P2=led2[1];b++;        delay(20000);break;
                case 2:P2=led2[2];b++;        delay(20000);break;
                case 3:P2=led2[3];b++;        delay(20000);break;
                case 4:P2=led2[4];b++;        delay(20000);break;
                case 5:P2=led2[5];b++;        delay(20000);break;
                case 6:P2=led2[6];b++;        delay(20000);break;
                case 7:P2=led2[7];b++;        delay(20000);break;
                case 8:P2=led2[8];b=0;        delay(20000);break;
                 default:  break;
                  }
                 }
  }

void main()
{

  while(1)
    {
          mint();
          if(K1==0)
             {
                  delay(10);
                  if(K1==0)
                    {
                         i=1;
                         j=0;
                        }
                        while(!K1);
                 }
                 if(K2==0)
                     {
                          delay(10);
                          if(K2==0)
                            {
                                 j=1;
                                 i=0;
                                }
                  while(!K2);         
                         }

        }
}



作者: dabaojiu    時(shí)間: 2017-4-30 20:15
bbg3659 發(fā)表于 2017-4-28 14:23
這樣在跑for()的時(shí)候,你跳不出吧.必須要它跑完.
我寫了一個(gè),試了一下可以跑兩個(gè)流水,中間也可以跳出 ...

剛剛看到,前幾天出去幾天,多謝多謝
作者: dabaojiu    時(shí)間: 2017-4-30 20:16
你像風(fēng)兒來(lái)了 發(fā)表于 2017-4-28 13:19
TurnLeft(); //調(diào)用數(shù)碼管左移
這個(gè)函數(shù)里面有個(gè)while(1)大循環(huán),程序根本不會(huì)執(zhí)行后面的兩個(gè)if判斷, ...

多謝多謝 看到問(wèn)題了
作者: zl2168    時(shí)間: 2017-5-1 08:14
本帖最后由 zl2168 于 2017-5-1 17:28 編輯

鍵控流水循環(huán)燈。
① 8個(gè)發(fā)光二極管從上到下(K0斷開(kāi))依次循環(huán)點(diǎn)亮,每次點(diǎn)亮?xí)r間約為0.5秒。
② 按下K0,流水方向從下至上滾動(dòng)點(diǎn)亮。
③ 按下K1(K2斷開(kāi)),每循環(huán)一次后間隔時(shí)間縮短0.1秒,直至最短間隔0.1秒后保持不變。
④ 按下K2(K1斷開(kāi)),每循環(huán)一次后間隔時(shí)間增加0.1秒,直至最長(zhǎng)間隔1秒后保持不變。
⑤ K1、K2同時(shí)斷開(kāi)或同時(shí)閉合,保持原滾動(dòng)間隔時(shí)間不變。



Proteus仿真一下,確認(rèn)有效。
實(shí)例7 鍵控流水循環(huán)燈.rar (36.04 KB, 下載次數(shù): 6)
以上摘自張志良編著《80C51單片機(jī)Proteus仿真設(shè)計(jì)實(shí)例教程》清華大學(xué)出版社ISBN 978-7-302-41682-1仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購(gòu)買。



作者: dabaojiu    時(shí)間: 2017-5-1 20:24
zl2168 發(fā)表于 2017-5-1 08:14
鍵控流水循環(huán)燈。
① 8個(gè)發(fā)光二極管從上到下(K0斷開(kāi))依次循環(huán)點(diǎn)亮,每次點(diǎn)亮?xí)r間約為0.5秒。
② 按下K0 ...

好的好的,我看看,謝謝了。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一级毛片免费视频 | 日韩欧美一级片 | 亚洲国产一区在线 | 超碰人人91| 91久久婷婷| 91视频.com | 国产成人在线视频免费观看 | 中文字幕乱码一区二区三区 | 国产一区二区a | 欧美成年黄网站色视频 | 久久久久久综合 | www.色午夜.com| 日本一区二区三区在线观看 | 亚洲精品一区二区网址 | 国产成人精品一区二 | 日韩欧美专区 | 国产精品久久久久久久久 | 国产在线观看一区二区 | 久久一 | 日韩三级 | 国产精品成人av | 欧美日韩在线综合 | 国产乱码精品一区二区三区中文 | 欧美成人免费在线 | 91精品久久久久久久久中文字幕 | 91九色在线观看 | 久久夜夜 | 激情五月婷婷 | 国产高清精品一区二区三区 | 欧美一区二区视频 | 久久69精品久久久久久久电影好 | 日韩国产欧美一区 | 九九九视频精品 | 亚洲国产情侣 | 一区二区三区高清 | 欧美在线一区二区三区 | 日屁视频 | 日本不卡一区二区三区在线观看 | 亚洲一区亚洲二区 | 亚洲日日夜夜 | 欧美日韩在线免费观看 |