初级会员 
  
	- 积分
 - 101
 
        - 金钱
 - 101 
 
       - 注册时间
 - 2018-5-19
 
      - 在线时间
 - 10 小时
 
 
 
 | 
 
 
发表于 2018-5-29 20:21:18
|
显示全部楼层
 
 
 
| 
#include <REG52.h> //#include <stdio.H>  //本例以51为平台,以按键接在外部中断0管脚上为例,假设所有LED均为低电平点亮 /* 求助。问题如下,实现跑马灯,但是MCU的口是这样的。从左向右,P31 P00 P01 P02 P03 P06 P07 P34. 要求是这样的, 第一下按键:P02 P03亮;然后P01 P06亮;P00 P07亮;P31 P34亮。(每一对灯依次亮,每次只有一对灯亮) 第二下按键:反向; 第三下按键:同时闪烁; 地四下按键:全灭。 */  sbit LED1 = P3^1; sbit LED2 = P0^0; sbit LED3 = P0^1; sbit LED4 = P0^2; sbit LED5 = P0^3; sbit LED6 = P0^6; sbit LED7 = P0^7; sbit LED8 = P3^4;  #define all_on() LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;LED7=0;LED8=0 #define all_off() LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1  #define group1_on() all_off();LED4=0;LED5=0 #define group2_on() all_off();LED3=0;LED6=0 #define group3_on() all_off();LED2=0;LED7=0 #define group4_on() all_off();LED1=0;LED8=0  #define group1_off() all_off();LED4=1;LED5=1 #define group2_off() all_off();LED3=1;LED6=1 #define group3_off() all_off();LED2=1;LED7=1 #define group4_off() all_off();LED1=1;LED8=1   void delay(unsigned char i); void LedStatus(unsigned char KeyCount);  void LedStatus(unsigned char KeyCount) {         //static unsigned char toggle = 0;     switch(KeyCount)     {             case 1:                group1_on();                    delay(10);                    group2_on();                    delay(10);                    group3_on();                    delay(10);                    group4_on();                    delay(10);             case 2:                group4_on();                    delay(10);                    group3_on();                    delay(10);                    group2_on();                    delay(10);                    group1_on();                    delay(10);             case 3:                all_on();                    delay(10);                    all_off();                    delay(10);             default:                    all_off();     } }  unsigned char Key_Count=0;  unsigned int ReData,SenData;  void delay(unsigned char i) {         unsigned char j;         for(i;i>0;i--)         {                 for(j=200;i>0;j--);         } }  void main(void) {         unsigned char i=0;         delay(50);         IE0 = 0;//清外部中断标志位         IT0 = 1;//设置为下降沿触发     EX0 = 1;//外部中断0中断允许位                         EA = 1;                 while(1)         {                                 LedStatus(Key_Count);                 if(Key_Count >= 4)                  {                    Key_Count=0;                 }          } }  void int0(void) interrupt 0 //中断服务函数的书写格式 {     EX0 = 0;         if(IE0 == 1)//产生了外部中断,IE 自动置为1     {        //如果硬件没有对按键作消抖处理,这里要注意软件作消抖处理,此处略。                 IE0 = 0;                 Key_Count++;                             }         EX0 = 1; } |   
 
 
 
 |