找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机用单独按键实现球赛积分器 缺少原理图

[复制链接]
ID:1030330 发表于 2022-6-1 15:30 | 显示全部楼层 |阅读模式
#include<REGX51.H>
#define s1 0x0e
#define s2 0x0d
#define s3 0x0b
#define s4 0x07
unsigned char Get_key();
void sp(unsigned char key);
void display(unsigned a,unsigned ab,unsigned b,unsigned bb);
void delay(unsigned int t);
void beep(unsigned int t);
code unsigned char led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code unsigned char le[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int a=0,ab=0,b=0,bb=0;
sbit spk=P1^0;
void main()
{
         unsigned char k;
         while(1)
         {
                 k=Get_key();
                 sp(k);
                 display(a,ab,b,bb);
         }
}
void delay(unsigned int t)
{
    unsigned int i,j;
        for(i=0;i<t;i++)
        for(j=0;j<112;j++);        
}
void beep(unsigned int t)
{
        spk=0;
        delay(t);
        spk=1;
}
unsigned char Get_key()
{
        unsigned char k;
        if((P3&0x0f)==0x0f)return(0xff);
        delay(20);
        if((P3&0x0f)==0x0f)return(0xff);
    k=P3&0x0f;
    while((P3&0x0f)!=0x0f);
    return(k);
        
}
void sp(unsigned char k)
{
        switch(k)
        {
                case s1:a++;beep(20);break;
                case s2:if(a>0){a--;beep(20);}break;
                case s3:b++;beep(20);break;
                case s4:if(b>0){b--;beep(20);}break;
                default: break;
        }

if((((b-a)>=2)||((a-b)>=2))&&((a>=25)||(b>=25)))
{
        if(a>b)
        {
                ab++;
                a=0;
                b=0;
        }
        else
        {
                bb++;
                a=0;
                b=0;
        }
        beep(20);
}
}
void display(unsigned a,unsigned ab,unsigned b,unsigned bb)
{
        static char num=0;
        P2=0xff;
        switch(num)
        {
                case 0: P0=led[b%10];break;
                case 1: P0=led[b/10];break;
                case 2: P0=led[10];break;
                case 3: P0=led[bb%10];break;
                case 4: P0=led[ab%10];break;
                case 5: P0=led[10];break;
                case 6: P0=led[a%10];break;
                case 7: P0=led[a/10];break;
                default: P0=0xff;
        }
        P2=le[num++];
        num%8;
}


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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