按键控制组合灯
一、任务
在单片机学习开发板硬件平台上,编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。
二、要求
1、根据提供的开放板硬件,分析系统功能,并画出系统主程序流程图;
2、编写程序,程序代码要符合编程规范(函数/子程序名称、功能、入口参数、出口参数、注释等),易读性要好; 3、编译调试、下载程序; 4、调试系统达到功能指标; 5、编写设计报告。
三、功能分析
根据任务要求,需要设计按键扫描函数,主函数根据按键
情况,分别控制灯进行相应动作。
四、流程图
图1 主函数流程图
五、源程序清单
#include
#define S1 0x0e //宏定义按键 #define S2 0x0d #define S3 0x0b #define S4 0x07
sbit P10=P1^0; sbit P11=P1^1;
void Delay(unsigned char t) //延时函数 {
unsigned char j,k; for(k=0;k for(j=0;j<114;j++); } unsigned char Scankey() //按键扫描函数 { unsigned char key; if((P3&0x0f)==0x0f) return(0xff); Delay(8); if((P3&0x0f)==0x0f) return(0xff); key=P3&0x0f; while((P3&0x0f)!=0x0f); return(key); } void main() { unsigned char c; while(1){ c=Scankey(); switch(c) { case S1:P10=!P10; break; case S2:P11=!P11; break; case S3: P1=0xfc; break; case S4: P1=0xff; break; } } }

