找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1167|回复: 4
打印 上一主题 下一主题
收起左侧

这个单片机程序怎样才按键按一下发送aa,按一下发送bb。弄了几天了!

[复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:582452 发表于 2019-8-2 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
*******************************/
#include <reg52.h>
#define Buzzer_time 350       //蜂鸣器鸣叫持续时间
#define uchar unsigned char
unsigned int Buzzer_count=0;        //蜂鸣器鸣叫持续时间计数器
sbit led=P2^0;
sbit led1=P2^1;
sbit KEY=P3^ 0;
sbit Buzzer=P1^5;                                           //定义独立按键
bit KEYSTA = 1;                                             //按键的初始状态

void Timer0Init();                                          //定时器初始化函数
void KeyProcess();                                          //按键处理函数

/*********************************************************************
* 函 数 名       : SendData
* 函数功能                 : 通过串口发送1字节数据给外部设备
* 参数列表       : c - 待发送的1字节数据
* 函数输出             : 无
*********************************************************************/

void SendByte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
/***************************************************
函数:串口初始化程序
如果只需要串口发送不需要串口接收就不必开串口接收中断
**************************************************/
void InitUART(void)
{
SCON=0X50;
TMOD|=0X20;
PCON=0x80;                 //波特率4800//
TH1=0XF3;
TL1=0XF3;
TR1=1;
EA=1;
//ES=1; //打开串口中断
}
void main()
{
    Timer0Init();
        InitUART();
    KeyProcess();
}

void Timer0Init()
{
    TMOD |= 0x01;
    TH0 = (65536-200)/256;           //定时2MS
    TL0 = (65536-200)%256;
    EA =1;                                                         
    ET0 = 1;
    TR0 = 1;
}
void KeyProcess()
{
    bit lasttime = 1;                        //定义前一次按键值,初始化为1;
    bit a=0;
    KEY = 0x01;                              //按键初始化;

    while(1)
    {
        if (KEYSTA != lasttime)              //如果“当前按键状态”与“前一次按键状态”不同,说明按键有动作;
        {
            if (lasttime == 1)                //如果按键有动作了,那么前一次按键状态为“弹起”(lasttime == 1),说明按键按下时,会响应动作;
            {
                           led=~led;        
                                            Buzzer_count=Buzzer_time;
                                         SendByte(0xaa);}
                                           lasttime = KEYSTA;           //如果按键有动作,就更新前一次按键的值;
                                                            }
                                 if ( KEYSTA!=lasttime )              //如果“当前按键状态”与“前一次按键状态”不同,说明按键有动作;
        {
            if (lasttime ==1 )                //如果按键有动作了,那么前一次按键状态为“弹起”(lasttime == 1),说明按键按下时,会响应动作;
            {
                           led=~led;        
                                            Buzzer_count=Buzzer_time;
                                         SendByte(0xbb);}
                                         
                                                                  
                                            lasttime = KEYSTA;            //如果按键有动作,就更新前一次按键的值;
                                                                                          
                                           }                 
                                                               
                           
                        }            
         }

        

void Timer0() interrupt 1                   //2MS中断一次
{
    static keybuf = 0xFF;                   //定义一个静态按键缓存变量,且值为FF;主要是暂存按键状态;
   TH0 = (65536-200)/256;                   //定时2MS
    TL0 = (65536-200)%256;
        if(Buzzer_count!=0)
{
  Buzzer_count--;                                //每次进入中断自减,减到0为止,才停止鸣叫//
  Buzzer=~Buzzer;                                //蜂鸣器响//
}

    keybuf = (keybuf << 1) | KEY;           //左移一位,使当前的按键状态移到按键缓存中;
    if (keybuf == 0)                        //如果移8次,按键状态都为0,说明按键真正按下;
    {
        KEYSTA = 0;                         //确定按键状态为按键;
    }
    else if (keybuf == 0xFF)                //如果移8次,按键状态都为1,说明按键未按下
    {
        KEYSTA = 1;
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2019-8-3 08:54 | 只看该作者
此帖仅作者可见

使用道具 举报

板凳
ID:235200 发表于 2019-8-3 09:59 | 只看该作者
此帖仅作者可见

使用道具 举报

地板
ID:582452 发表于 2019-8-3 18:17 | 只看该作者
此帖仅作者可见

使用道具 举报

5#
ID:582452 发表于 2019-8-3 18:19 | 只看该作者
此帖仅作者可见

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表