目录
一、简介
本实验基于STC15开发板上实施,硬件电路包括STC单片机与PC机USB接口的通信线路,以及LED4、LED7、LED8、LED9、LED10等LED灯,对应STC的P2.7,P1.7,P1.6,P4.7,P4.6。基于Proteus中的STC15W4K32S4编写的程序,实验要求:要求LED4(P2.7)、LED10(P4.6)、LED9(P4.7)、LED8(P1.6)、LED7(P1.7)按顺序每隔1S依次闪烁,按下SW17(接P3.2)时,灯停止闪烁。
本系列文章共有三篇,区别为按键和延时实现的方式(查询or中断)。文章发布从逻辑上由简至难,本篇为用查询实现的按键功能和用查询实现的延时功能。
二、电路原理图
三、程序源代码
#include<stc15.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED4=P2^7;
sbit LED10=P4^6;
sbit LED9=P4^7;
sbit LED8=P1^6;
sbit LED7=P1^7;
sbit SW17=P3^2;
uint b=1;
uint flag=1;
/*按键防抖函数*/
void delayms(uint n)
{
while(n--);
}
/*开关函数*/
void key()
{
if(SW17==0)
{
flag=SW17;
delayms(100);
if(SW17==0)
{
LED4=LED10=LED9=LED8=LED7=1;
b=0;
}
}
}
/*灯延迟函数*/
void delay() //1s延时
{
uchar i,j,k,m;
for(i=5;i>0;i--)
for(j=68;j>0;j--)
for(k=22;k>0;k--)
for(m=94;m>0;m--)
key();
}
/*亮灯函数*/
void LED()
{
if(flag==1)
{
switch(b)
{
case 1: LED4=0;break;
case 2: LED4=1;LED10=0;break;
case 3: LED10=1;LED9=0;break;
case 4: LED9=1;LED8=0;break;
case 5: LED8=1;L