初级会员
- 积分
- 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; } |
|