开关控制的话就不用编程语言了好吗,因为开关是直接的物理连接,通过电路实现就好,那我就理解成你是想用单片机来实现吧,首先单片机与外设怎样连接我不考虑,因为你没说。那么我就当是我可以随意的使用单片机的输出吧,然后开关闭合理解成按键是高电平,再按一次取反。
#include<89c51.h> //是不是这个头文件记不清了。。#defineuint unsigned int
#defineuchar unsigned char
#define LED1 P1_0
#define LED2 P1_1
#define KEY1 P0_1
/* 函数声明,延迟函数,LED灯初始化函数,按键KEY初始化,按键KEY查询函数*/
voidDelayMs(uint n)
voidLEDInit(void)
voidKEYInit(void)
ucharKEYScan(void)
/*主函数*/
void main()
{
LED1 = 0
LED2 = 1 //不同的接法可能导致结果不一样,有的高电平亮有的低电平
while(1) //具体看你自己的板子怎么接的
{
if(KEYScan())
LED1 = ~LED1
LED2 = ~LED2
}
}
/*检测按键状态*/
ucharKEYScan(void)
{
if(KEY1==0)
DelayMs(100) // 延时一段时间,以免抖动
if(KEY1==0)
{
DelayMs(100)
while(KEY1==0)
return 1
}
else
return 0
}
/*延迟函数*/
voidDelayMs(uint n)
{
int i
while(n--)
{
for(i=587i>0i--)
}
}
以上代码是做CC2530实验的时候做的,修改了一下。
判断开关对应的端口电平,改变led对应端口即可。
交替闪烁就是在循环中让两个LED端口交替高低电平。
循环中加入延时。延时函数我用循环实现。题目没有要求精准延时,如精准需用中断。
#include <reg52.h>
#define uInt unsigned int
sbit D1=P2^0
sbit D2=P2^1
sbit S1=P3^2
void mDelayuS( uInt us )
void main()
{
if(S1)
D1=D2=0
while(S1==0) D1=!D2,mDelayuS(1000),D2=D1
}
void mDelayuS( uInt us )
{
while ( us -- ) /* 24MHz MCS51 */
}