找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2962|回复: 0
收起左侧

单片机中断系统控制流水、跑马灯

[复制链接]
ID:703953 发表于 2020-3-27 17:05 | 显示全部楼层 |阅读模式
  1. #include<AT89X52.H>
  2. void DelayMs(unsigned int n);
  3. void DelayMs(unsigned int n)
  4. {
  5.         static unsigned int i;
  6.         while(n--)
  7.         {
  8.                 for(i=0;i<89;i++);
  9.         }
  10. }
  11. unsigned char LEDState=0;
  12. int main()
  13. {
  14.         unsigned char j;
  15.         IT0=1;//下降沿触发中断
  16.         EX0=1;//INT中断允许
  17.         EA=1;//总中断允许
  18.         PX0=1;//INT0中断优先级为低级
  19.        
  20.         IT1=1;//下降沿触发中断
  21.         EX1=1;//INT中断允许
  22.         PX1=1;//INT0中断优先级为低级
  23.        
  24.         while(1)
  25.         {
  26.                 /*if(P1_0==0)//按键按下
  27.                         {
  28.                                 DelayMs(10);
  29.                                 //等待按键抬起,直到按键抬起为止
  30.                                 while(P1_0==0);
  31.                                 //消抖
  32.                                 DelayMs(10);//按键抬起以后做的事
  33.                                 LEDState=(LEDState+1)%5;
  34.                         }
  35.                
  36.                 else if(P1_1==0)//按键按下 反向
  37.                         {
  38.                                 DelayMs(10);
  39.                                 //等待按键抬起,直到按键抬起为止
  40.                                 while(P1_1==0);
  41.                                 //消抖
  42.                                 DelayMs(10);//按键抬起以后做的事
  43.                                 LEDState=(LEDState+5-1)%5;       
  44.                         }
  45.                         */
  46.                
  47.                
  48.                
  49.                
  50.                   if(LEDState==0)//闪烁
  51.                 {
  52.                         P2=0X00;
  53.                         DelayMs(100);
  54.                         P2=~P2;
  55.                         DelayMs(100);
  56.                 }
  57.                 else if(LEDState==1)//上到下跑马
  58.                 {
  59.                         for(j=0;j<8;j++)
  60.                         {
  61.                                 P2=~(1<<j);
  62.                                 DelayMs(100);
  63.                         }
  64.                 }
  65.                 else if(LEDState==2)//下到上跑马
  66.                 {
  67.                         for(j=0;j<8;j++)
  68.                         {
  69.                                 P2=~(1<<(7-j));
  70.                                 DelayMs(100);
  71.                         }
  72.                 }
  73.                 else if(LEDState==3)//上到下流水
  74.                 {
  75.                         P2=0XFF;
  76.                         for(j=0;j<8;j++)
  77.                         {
  78.                                 P2=P2&(~(1<<j));
  79.                                 DelayMs(100);
  80.                         }
  81.                         for(j=0;j<8;j++)
  82.                         {
  83.                                 P2=P2|(1<<j);
  84.                                 DelayMs(100);
  85.                         }       
  86.                 }
  87.                 else if(LEDState==4)//下到上流水
  88.                 {
  89.                         P2=0XFF;
  90.                         for(j=0;j<8;j++)
  91.                         {
  92.                                 P2=P2&(~(1<<(7-j)));
  93.                                 DelayMs(100);
  94.                         }
  95.                         for(j=0;j<8;j++)
  96.                         {
  97.                                         P2=P2|(1<<(7-j));
  98.                                         DelayMs(100);
  99.                         }
  100.                 }
  101.         }
  102. }
  103.                

  104.                 void INT_0(void) interrupt 0
  105.                 {
  106.                         LEDState=(LEDState+1)%5;
  107.                 }
  108.                
  109.                
  110.                 void INT_1(void) interrupt 2
  111.                 {
  112.                         LEDState=(LEDState+5-1)%5;       
  113.                 }
复制代码


中断控制流水跑马灯.zip

80.17 KB, 下载次数: 11, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表