发布网友 发布时间:1天前
共3个回答
热心网友 时间:50分钟前
其实这个程序很简单的,没有那么长的,更没有那么复杂呀。很简单的事,为什么要搞得那么复杂呢?
见下图和程序:
#include <reg52.h>
sbit k1=P3^2;
sbit k2=P3^3;
bit glint; //闪烁标志位
void delay()
{
unsigned int i;
for(i=12000;i>0;i--);
}
main()
{
while(1)
{
if(glint==1)
{
P0=~P0;
delay();
}
if(k1==0)
{
glint=0; //停止闪烁
P0=0; //全亮
while(k1==0);
}
if(k2==0)
{
glint=1; //开始闪烁
while(k2==0);
}
}
}
热心网友 时间:47分钟前
/*-----------------------------------------------
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
#define LED P0
sbit KEY1=P3^2;
sbit KEY2=P3^3;// 用define 和sbit 关键字 定义 LED到P0端口,
//LED是自己任意定义且容易记忆的符号
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
unsigned char KeyScan(void);//函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned char num = 0;
while (1) //主循环
{
num=KeyScan();
switch(num)
{
case 1:
LED=0xff;
break;
case 2:
LED=0x00; //将P0口赋值 0x00
DelayUs2x(10000); //调用延时程序;更改延时数字可以更改延时长度; //用于改变闪烁频率
LED=0xff; //将P0口赋值 0xff
DelayUs2x(10000);
break;
default:
break;
}
DelayMs(1);
}
}
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
按键扫描函数,返回扫描键值
------------------------------------------------*/
unsigned char KeyScan(void)
{
/********************************************************/
if(!KEY1) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY1) //再次确认按键是否按下,没有按下则退出
{
while(!KEY1);//如果确认按下按键等待按键释放,没有则退出
{
return 1;
}
}
}
/********************************************************/
else if(!KEY2) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY2) //再次确认按键是否按下,没有按下则退出
{
while(!KEY2);//如果确认按下按键等待按键释放,没有则退出
{
return 2;
}
}
}
else
return 0;
return 0 ;
}
热心网友 时间:45分钟前
啊!这个很简单啊,兄弟。你行的,加油!