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

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)關(guān)于外部中斷0的一個(gè)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:683345 發(fā)表于 2020-1-17 23:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一個(gè)很簡(jiǎn)單的中斷程序,就是數(shù)碼管0-7循環(huán)動(dòng)態(tài)顯示,利用外部中斷0使小燈點(diǎn)亮,但是接線之后小燈不亮是什么原因(已經(jīng)排除接線原因),不知道程序哪里出了問(wèn)題..
#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit LED=P1^0;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u16 k;

u8 table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
            0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

void delay(u16 i)
{
   while(i--);
}   

void main()
{
   EA=1;
   EX0=1;
   IT0=0;
      for(k=0;k<8;k++)
      {
         switch(k)
         {
            case 0:LSA=0;LSB=0;LSC=0;break;
            case 1:LSA=1;LSB=0;LSC=0;break;
            case 2:LSA=0;LSB=1;LSC=0;break;
            case 3:LSA=1;LSB=1;LSC=0;break;
            case 4:LSA=0;LSB=0;LSC=1;break;
            case 5:LSA=1;LSB=0;LSC=1;break;
            case 6:LSA=0;LSB=1;LSC=1;break;
            case 7:LSA=1;LSB=1;LSC=1;break;
         }
         P0=table[k];              //動(dòng)態(tài)數(shù)碼管是共陰的
         delay(1000000);
         P0=0x00;         //對(duì)P0進(jìn)行清零,否則第二個(gè)數(shù)碼管會(huì)有第一個(gè)數(shù)碼管的重影
      }
}

void Init0() interrupt 0
{
   LED=0;
}

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

使用道具 舉報(bào)

沙發(fā)
ID:97023 發(fā)表于 2020-1-18 01:23 | 只看該作者
電路圖都沒(méi)有怎么分析呢?
不知道你的LED接法,文字上也沒(méi)說(shuō)明LED哪端接地,無(wú)法分析。
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2020-1-18 07:16 | 只看該作者
1.樓主程序沒(méi)有約束在主循環(huán)中運(yùn)行,加while(1)。
2.外部中斷要采用IT0=1;//下降沿觸發(fā)。
3.錯(cuò)誤使用延時(shí)函數(shù):delay(1000000);
修改如下:
  1. #include<reg52.h>

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit LED=P1^0;

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;

  8. u8 k;
  9. u8 table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  10.             0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

  11. void delay(u16 i)
  12. {
  13.    while(i--);
  14. }   

  15. void main()
  16. {
  17.         EA=1;
  18.         EX0=1;
  19.         IT0=1;//下降沿觸發(fā)
  20.         while(1)
  21.         {
  22.                 P0=0x00;         //消隱
  23.                 switch(k)
  24.                 {
  25.                         case 0:LSA=0;LSB=0;LSC=0;break;
  26.                         case 1:LSA=1;LSB=0;LSC=0;break;
  27.                         case 2:LSA=0;LSB=1;LSC=0;break;
  28.                         case 3:LSA=1;LSB=1;LSC=0;break;
  29.                         case 4:LSA=0;LSB=0;LSC=1;break;
  30.                         case 5:LSA=1;LSB=0;LSC=1;break;
  31.                         case 6:LSA=0;LSB=1;LSC=1;break;
  32.                         case 7:LSA=1;LSB=1;LSC=1;break;
  33.                 }
  34.                 P0=table[k];//動(dòng)態(tài)數(shù)碼管是共陰的
  35.                 k++;
  36.                 k%=8;
  37.                 delay(110);//延時(shí)1ms
  38.         }
  39. }

  40. void Init0() interrupt 0
  41. {
  42.    LED=~LED;//取反
  43. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

地板
ID:680894 發(fā)表于 2020-1-18 09:32 | 只看該作者
建議初學(xué)者敲代碼前一定看懂別人的代碼,不要一上手就想著自己就來(lái)敲,然后敲不出不就跑來(lái)問(wèn),這種學(xué)習(xí)方式是不妥的。一個(gè)新的東西肯定有他的知識(shí)點(diǎn),不去了解掌握你怎么憑空想的出來(lái)?學(xué)東西開(kāi)始都是先模仿別人,再熟練,到融會(huì)慣通......
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表