找回密码
 立即注册

QQ登录

只需一步,快速开始

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

九路抢答实验课程设计

[复制链接]
跳转到指定楼层
楼主
ID:209316 发表于 2017-6-8 19:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>

/********定义按键引脚********/
sbit key_One = P2^3;
sbit key_Two = P2^2;
sbit key_Three = P2^1;
sbit key_Four = P2^0;

unsigned char code num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //0~9数字的8421编码
unsigned char code wei[] = {0x7f,0xbf,0xdf,0xef};  //数码管位选编码
char number = 0;  //要显示的数字
unsigned char key_Buff;   //按键键值缓冲值

/********函数声明********/
void delay(int z);
void display(int x);
char key_Scan();

void main()
{
    while(1)
    {
        key_Buff = key_Scan();     //将按键值存入缓冲区
        switch(key_Buff)   //判断缓冲区的值
        {
            case 0: break;
            case 1: number++;    //按键1按下,number自加一并将按键
                    if(number >= 255)
                        number = 255;   //number值大于255不再自加
                    key_Buff = 0;  //按键值缓冲区清零,防止下次按键未按下还再次进入
                    break;   
            case 2: number--;
                    if(number <= 0)
                        number = 0;
                    key_Buff = 0;
                    break;
            case 3: break;
            case 4: break;
        }
        display(number);  //数码管显示
    }
}

/***************************************/
/**函数名: delay(z)
/**函数功能: 粗略延时
/**输入参数: z表示要延时的毫秒数
/**示例: delay(300) //粗略延时300毫秒
/***************************************/
void delay(int z)
{
    int x,y;

    for(x=z; x>0; x--)
        for(y=110; y>0; y--);
}

/***************************************/
/**函数名: display()
/**函数功能: 数码管显示函数
/**输入参数: x:要显示的数
/**示例: display(1234); //显示1234
/***************************************/
void display(int x)
{
    unsigned char ge, shi, bai, qian;

    /*************************/
    /**提取x的个十百千位
    /**‘/’为取模运算
    /**‘%’为求余运算
    /*************************/
    qian = x/1000 %10;  
    bai = x/100 %10;   
    shi = x/10 %10;     
    ge = x/1 %10;     

    P0 = ~num[qian];    //显示千位
    P2 = wei[0];        //第0个数码管显示
    delay(2);           //延时2毫秒
    P0 = ~num[bai];     //显示百位
    P2 = wei[1];
    delay(2);
    P0 = ~num[shi];     //显示十位
    P2 = wei[2];
    delay(2);
    P0 = ~num[ge];      //显示个位
    P2 = wei[3];
    delay(2);
    P0 = 0xff;          //数码管消隐
}

/***************************************/
/**函数名: key_Scan()
/**函数功能: 按键扫描函数
/**输入参数: 无
/**返回参数: 按键的键值
/**示例: key_Buff = key_Scan();
/***************************************/
char key_Scan()
{
    char key_Value = 0;  //按键键值,用于返回键值使用

    P2 = 0x0f;    //将按键引脚电平拉高

    if(key_One == 0)  //检测按键1是否被按下
    {
        delay(10);    //延时消抖
        while(key_One == 0)   //按键1确定被按下
        {
            key_Value = 1;    //按键键值置1
            display(number);  //调用显示函数,防止按键一直被按下时数码管不显示
        }
    }
    if(key_Two == 0)   //按键2的检测
    {
        delay(10);
        while(key_Two == 0)
        {
            key_Value = 2;
            display(number);
        }
    }
    if(key_Three == 0)
    {
        delay(10);
        while(key_Three == 0)
        {
            key_Value = 3;
            display(number);
        }
    }
    if(key_Four == 0)
    {
        delay(10);
        while(key_Four == 0)
        {
            key_Value = 4;
            display(number);
        }
    }
    return key_Value;  //返回键值
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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