找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1716|回复: 0
收起左侧

315M按键加减操作数码显示

[复制链接]
ID:297829 发表于 2018-4-29 17:10 | 显示全部楼层 |阅读模式

/* 例程:315M按键加减操作数码管显示
* 内容:通过315M遥控器的按键对一个数据做加减操作,数码管动态显示
* 现象:本实验是通过51单片机的IO管脚连接315M无线接收模块,接收遥控器的
*       按键信息。通过315M遥控器的按键对两个数据做加减操作,并使用神舟
*       51开发板上的数码管动态显示。*/

/* 包含头文件 */
#include <reg52.h>               
#include "delay.h"
#include "display.h"
#define  WL_315M_PORT   P0  //315M无线接收模块对应端口
sbit WL_315M_D0 = P0^3;     //定义D0按键输入端口
sbit WL_315M_D1 = P0^4;     //定义D1按键输入端口
sbit WL_315M_D2 = P0^5;     //定义D2按键输入端口
sbit WL_315M_D3 = P0^6;     //定义D3按键输入端口
sbit WL_315M_VT = P0^7;     //定义VT接收数据有效端口

/*-- 主函数 --*/
void main (void)
{
unsigned char num1 = 0, num2 = 0;  
   
    //数码管动态显示定时器初始化
    Init_Timer0();
WL_315M_PORT = 0xFF;    // 315M无线接收模块对应端口电平置高
    /* 如果315M无线接收模块的4个管脚同时检测到高电平有效,说明
       模块没有安装,数码管闪烁'E'提示用户检查315M无线接收模块 */
    while(WL_315M_D0 & WL_315M_D1 & WL_315M_D2 & WL_315M_D3)  
    {   
        TempData[2] = DuanMa[0xE];  //ERROR 错误提示
        TempData[3] = DuanMa[0xE];  //ERROR 错误提示
        TempData[6] = DuanMa[0xE];  //ERROR 错误提示
        TempData[7] = DuanMa[0xE];  //ERROR 错误提示
        DelayMs(100);
        
        TempData[2] = 0x0;          //熄灭
        TempData[3] = 0x0;          //熄灭
        TempData[6] = 0x0;          //熄灭
        TempData[7] = 0x0;          //熄灭
        DelayMs(100);
    }
    while (1)               //主循环
   {
    if(WL_315M_VT)      //如果检测到高电平,说明遥控器上有按键按下
        {
            /* 如果315M无线接收模块的4个管脚同时检测到高电平有效,说明
               模块没有安装,数码管闪烁'E'提示用户检查315M无线接收模块 */
            if(WL_315M_D0 & WL_315M_D1 & WL_315M_D2 & WL_315M_D3)
            {   
                TempData[2] = DuanMa[0xE];  //ERROR 错误提示
                TempData[3] = DuanMa[0xE];  //ERROR 错误提示
                TempData[6] = DuanMa[0xE];  //ERROR 错误提示
                TempData[7] = DuanMa[0xE];  //ERROR 错误提示
                DelayMs(100);
               
                TempData[2] = 0x0;          //熄灭
                TempData[3] = 0x0;          //熄灭
                TempData[6] = 0x0;          //熄灭
                TempData[7] = 0x0;          //熄灭
                DelayMs(100);
            }
        else if(WL_315M_D0) //如果D0对应的按键按下则num1增加
            {   
          num1++;
                if(num1 > 99)
                {
                    num1 = 0;
                }
            }
        else if(WL_315M_D1) //如果D1对应的按键按下则num1减小
            {   
                if(num1 == 0)
                {
                    num1 = 99;
                }
                else
                {
                    num1--;
                }
            }
        else if(WL_315M_D2) //如果D2对应的按键按下则num2增加
            {   
          num2++;
                if(num2 > 99)
                {
                    num2 = 0;
                }
            }
        else if(WL_315M_D3) //如果D3对应的按键按下则num2减小
            {   
                if(num2 == 0)
                {
                    num2 = 99;
                }
                else
                {
                    num2--;
                }
            }
            //如果模块正常,等待按键释放
            while(WL_315M_D0 | WL_315M_D1 | WL_315M_D2 | WL_315M_D3)
            {
                if(WL_315M_D0 & WL_315M_D1 & WL_315M_D2 & WL_315M_D3)
                {
                    break;
                }
            }
        }
        else
        {
            TempData[2] = DuanMa[num1/10];  //数字1显示更新
            TempData[3] = DuanMa[num1%10];
            TempData[6] = DuanMa[num2/10];  //数字2显示更新
            TempData[7] = DuanMa[num2%10];
        }
    }     
}



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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