標題: 單片機中斷程序求幫忙 [打印本頁]

作者: 841953693    時間: 2016-11-2 12:45
標題: 單片機中斷程序求幫忙
通過鍵盤控制外部中斷01,鍵盤1按下,進入外部中斷0,紅燈向白燈循環(huán)閃爍;鍵盤2按下,進入外部中斷,白燈向紅燈循環(huán)閃爍。


作者: 劉海龍    時間: 2016-11-2 14:57
白燈向紅燈閃爍?請描述的再詳細一點可好?
作者: 841953693    時間: 2016-11-2 16:15
劉海龍 發(fā)表于 2016-11-2 14:57
白燈向紅燈閃爍?請描述的再詳細一點可好?

就是理解為一個控制從左往右,一個控制從右往左
作者: 劉海龍    時間: 2016-11-3 13:37
  1. /*********************************************************************************************
  2. 編寫:劉海龍
  3. 程序名:外部中斷控制流水方向
  4. 硬件支持:LED負極接P1口
  5. 2016.11.3
  6. /*********************************************************************************************/
  7. #include <reg52.H> //單片機頭文件
  8. #include <intrins.h>
  9. unsigned char aa,MENU=0;
  10. /**********************************************************************************************/
  11. void delayms (unsigned int a) // 1ms延時程序
  12. {       
  13.         unsigned int i;
  14.         while( --a != 0)
  15.         {
  16.                 for(i = 0; i < 125; i++);//STC單片機在外部晶振為12MHz時i值上限為600  
  17.         }                                                       //AT89C51單片機在外部晶振為12MHz時i值上限為125
  18. }
  19. /*********************************************************************************************
  20. 函數(shù)名:外部中斷INT初始化函數(shù)
  21. 調  用:INT_init();
  22. 參  數(shù):無
  23. 返回值:無
  24. 結  果:啟動外部中斷INT1、INT0中斷,設置中斷方式
  25. 備  注:
  26. /**********************************************************************************************/
  27. void INT_init (void){
  28.         EA = 1;        //中斷總開關
  29.         EX1 = 1; //允許外部中斷1中斷   
  30.         EX0 = 1; //禁止外部中斷0中斷
  31.         IT1 = 1; //1:下沿觸發(fā)  0:低電平觸發(fā)
  32.         IT0 = 1; //1:下沿觸發(fā)  0:低電平觸發(fā)
  33.          
  34. }
  35. /*********************************************************************************************
  36. 函數(shù)名:外部中斷INT0中斷處理程序
  37. 調  用:[外部引腳INT0中斷處理]
  38. /**********************************************************************************************/
  39. //中斷0服務程序
  40. void exint0() interrupt 0       //INT0中斷入口
  41. {
  42.       aa=0xfe;
  43.           MENU=1; //
  44. }

  45. //中斷1服務程序
  46. void exint1() interrupt 2       //INT1中斷入口
  47. {
  48.      aa=0x7f;
  49.          MENU=2; //
  50. }
  51. /*********************************************************************************************
  52. 函數(shù)名:主函數(shù)
  53. /**********************************************************************************************/
  54. void main (void){
  55.        
  56.         INT_init();//中斷初始化
  57.         while(1){
  58.                         if(MENU==1)
  59.                         {
  60.                                 P1=aa;
  61.                                 delayms(500);
  62.                                 aa=_crol_(aa,1);
  63.                         }
  64.                         if(MENU==2)
  65.                         {
  66.                                 P1=aa;
  67.                                 delayms(500);
  68.                                 aa=_cror_(aa,1);
  69.                         }
  70.         }
  71. }

  72. /**********************************************************************************************/
復制代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1