能问您个关于单片机的问题吗?大神,求解答啊!

下面是用一个开关(P0^0),按一下发一个字符的程序。请问您能把它变成用自锁开关的程序吗?就是开关摁下去发一个字符,再摁一下开关弹起来又发一个字符。#include<re... 下面是用一个开关(P0^0),按一下发一个字符的程序。请问您能把它变成用自锁开关的程序吗?就是开关摁下去发一个字符,再摁一下开关弹起来又发一个字符。
#include<reg52.h>
sbit KG=P0^0;
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void Delay(unsigned int t)
{
while(--t);
}
void main()
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
KG=0;
while(1)
{
if(KG==0)
{
Delay(60000);
SendByte(0);
}
}
}
自锁开关就是摁一下是一直一种通的状态,再摁一下后变成一直断的状态
展开
 我来答
做而论道
高能答主

2014-07-30 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
void main()
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断

// KG = 0;----不可输出0

while(1) {
if(KG==0) { //如果按下
Delay(100); //延时消抖
if(KG==0) //确实按下了

SendByte(0);//发送

while(KG==0); //等待再次按下,把按键释放

SendByte(2);//释放后,再发送一个
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2014-07-23 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38386
国家科技进步奖

向TA提问 私信TA
展开全部
#include<reg52.h>
sbit KG=P0^0;
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void Delay(unsigned int t)
{
while(--t);
}
void main()
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
KG=0;
while(1)
{

while(KG==1);
SendByte(0);

while(KG==0);
SendByte(1);
}
}
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gxt467138
2014-07-22 · 超过12用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:27.4万
展开全部

  #include<reg52.h>

  sbit KG=P0^0;

  void SendByte(unsigned char dat)

  {

    SBUF = dat;

    while(!TI);

    TI = 0;

  }

  void Delay(unsigned int t)

  {

      while(--t);

  }

  void main()

  {

    unsigned char key_status = 0;

    SCON  = 0x50;          // SCON: 模式 1, 8-bit UART, 使能接收

    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装

    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz

    TR1   = 1;                  // TR1:  timer 1 打开

    EA    = 1;                  //打开总中断



              /*若单片机可配置模式请根据实际电路配置上拉或下拉或开漏模式*/

              /*如果是89C51系列的单片机,当IO口做输入功能时,建议此处改为KG=1;*/

    KG=0; 


    while(1)

    {

        if(KG==0)

        {

            

            Delay(60000);

            if(key_status == 0 )

            {

                           key_status = 1;

                SendByte(0);

            }

        }

        else

        {

            key_status = 0;

        }

    }

  }


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星柠科草说2807
2014-07-22 · TA获得超过317个赞
知道小有建树答主
回答量:568
采纳率:0%
帮助的人:350万
展开全部
按一次,求一次反,就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式