帮帮忙,实在不会做这个:用AT89C52的P0口接8个发光二极管,开关K1和K2分别连至单片机引脚P3.2和P3.3。

要求按下K1后,如果8只LED为熄灭状态,则点亮,如果8只LED为点亮状态,则保持;按下K2后,不管8只LED是熄灭还是点亮状态,都变为闪烁状态。编制相应程序并且仿真。... 要求按下K1后,如果8只LED为熄灭状态,则点亮,如果8只LED为点亮状态,则保持;按下K2后,不管8只LED是熄灭还是点亮状态,都变为闪烁状态。编制相应程序并且仿真。 展开
 我来答
lycdl
高粉答主

2013-10-14 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:6049万
展开全部

其实这个程序很简单的,没有那么长的,更没有那么复杂呀。很简单的事,为什么要搞得那么复杂呢?

见下图和程序:

#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);
  }
 }
}

百度网友186dfeac08
2013-10-14 · TA获得超过754个赞
知道小有建树答主
回答量:1074
采纳率:50%
帮助的人:582万
展开全部
啊!这个很简单啊,兄弟。你行的,加油!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友34428f305
2013-10-14 · 超过21用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:57.5万
展开全部
/*-----------------------------------------------
------------------------------------------------*/
#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 ;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式