问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一份关于篮球计分器的51单片机C语言程序

发布网友 发布时间:2023-07-05 14:00

我来回答

2个回答

热心网友 时间:2024-02-06 13:13

这是一个数码管显示的篮球计分程序,你可以参考一下:
#include"reg52.h"

#define u8 unsigned char
#define u16 unsigned int


sbit UP_1    = P1^1; //第一队加分键
sbit DOWN_1  = P1^2; //第一队减分键
sbit UP_2    = P1^3; //第二队加分键
sbit DOWN_2  = P1^4; //第二队减分键
sbit Change  = P1^5; //交换键
sbit Begin   = P1^6; //开始键
sbit Pause = P1^7; //暂停键

sbit Beef   = P2^4; //蜂鸣器

sbit an = P2^3; //段选
sbit wei  = P2^2; //位选


u8 Grate_1=0; //第一队计分
u8 Grate_2=0; //第二队计分
u8 Grate_change=0; //换场标志
u8 Time = 99; //总时间
u16 Flag=0; //计时次数

u8 leddata[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                };
              

void InitTimer1(void)
{
    TMOD = 0x10;//定时器1设为模式1
    TH1 = 0xFC;
    TL1 = 0x18;     //1ms
    EA = 1;         //开总中断
    ET1 = 1;        //开定时器1中断
//    TR1 = 1;      //
}

void delay(u8 d)   //延时
{
    u8 a,b,c;
    for(c=d;c>0;c--)
        for(b=17;b>0;b--)
           for(a=16;a>0;a--);
}

void beef(u8 d)   //发声
{
    u8 a,b,c;
    for(c=d;c>0;c--)
        for(b=17;b>0;b--)
           for(a=16;a>0;a--)
           {
                Beef=~Beef; 
           }
}


void display(u8 grate_1,u8 grate_2,u8 time) //显示
{
   u8 w1,w2,w3,w4,w7,w8;
   w1=grate_1/10;//计算第一队分数十位
   w2=grate_1%10;//计算第一队分数个位

   w3=grate_2/10;//计算第二队分数十位
   w4=grate_2%10;//计算第二队分数个位

   w7=time/10;//计算时间十位
   w8=time%10;//计算时间个位


  P0=0xff;//消隐,该段显示第一队分数十位
   wei=1;
   P0=0xfe;//送位码
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w1];//送段码
   an=0;
   delay(5);



   P0=0xff;//显示第一队分数个位
   wei=1;
   P0=0xfd;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w2];
   an=0;
   delay(5);



   P0=0xff;//显示第二队分数十位
   wei=1;
   P0=0xf7;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w3];
   an=0;
   delay(5);
   
    P0=0xff; //显示第二队分数个位
   wei=1;
   P0=0xef;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w4];
   an=0;
   delay(5);


   
   P0=0xff;  //显示时间十位
   wei=1;
   P0=0xbf;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w7];
   an=0;
   delay(5);


   
   P0=0xff;  //显示时间个位
   wei=1;
   P0=0x7f;
   wei=0;
   P0=0xff;
   an=1;
   P0=leddata[w8];
   an=0;
   delay(5);
}


void main()
{
    InitTimer1(); //初始化定时器1
    UP_1    = 1; //以下初始化IO口
    DOWN_1  = 1;
    UP_2    = 1;
    DOWN_2  = 1;
    Change  = 1;
    Begin   = 1;
    while(1)
    { 
        if(UP_1==0) //如果第一队加分键按下
        {
            ET1 = 0; //关闭定时器1中断
            delay(5); //稍加延时
            while(UP_1==0);//等待按键抬起
            Grate_1++;   //第一队分数加1
            ET1 = 1;   //开启定时器1中断
        }
        if(DOWN_1==0)  //如果第一队减分键按下
        {  
            ET1 = 0;
            delay(5);
            while(DOWN_1==0);
            Grate_1--;  //第一队分数减1
            ET1 = 1;
        }
        if(UP_2==0)   //如果第二队加分键按下
        {
            ET1 = 0;
            delay(5);
            while(UP_2==0);
            Grate_2++;   //第二队分数加1
            ET1 = 1;
        }
        if(DOWN_2==0)   //如果第二队减分键按下
        {
            ET1 = 0;
            delay(5);
            while(DOWN_2==0);
            Grate_2--;   //第二队分数减1
            ET1 = 1;
        }
        if(Change==0)   //如果换场键按下
        {
            ET1 = 0;
            delay(5);
            while(Change==0);
            Grate_change=Grate_1; //一下三行语句完成分数交换显示
            Grate_1=Grate_2;  
            Grate_2=Grate_change; 
            ET1 = 1;
        }
        if(Begin==0) //如果开始键按下
        {
            delay(5);
            while(Begin==0);
            TR1 = 1;        //开启定时器1
        }
if(Pause==0)
{
delay(5);
while(Pause==0);
TR1=0;
}
        if(Time<=0)   //如果时间计数到0
        {
            Time=99;   //恢复初始时间
            TR1 = 0;   //关闭定时器1
            beef(100);   //发声
        }
    display(Grate_1,Grate_2,Time); //显示分数、时间     
    }
}
void Timer1Interrupt(void) interrupt 3  //定时器1中断函数
{
    TH1 = 0xFC;  //重赋初值
    TL1 = 0x18;
    Flag++;  //中断次数加1
    if(Flag>=1000)//1000次也就是1秒到
    {
        Flag=0;
        Time--;   //秒变量减1
    }

}

热心网友 时间:2024-02-06 13:14

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
卡耐基的智慧大全集内容简介 会说话赢天下内容简介 卡耐基演讲与口才内容简介 商务口才训练内容简介 卡耐基金牌口才作者简介 卡耐基商务口才 作者简介 爱因斯坦的更多故事 杨柯叶谨言是什么电视 房贷和消费贷利率差别不大,但是还款金额差别挺大,都是怎么计算的... ...11月18号提现1500元、,11月25号还款1515,请问我还需要还 描写五月的优美开头 五月活动致辞的经典句 关于赞美5月的开场白 在专卖店买的衣服出现类似是质量问题,可以退货吗? 对于小个子女生来说,度假穿长裙是正确的选择吗? 抖音按钮不见了是怎么回事呢? 韩国的经济到底发达到什么地步了? 苹果13怎么没有抖音模版 炉石传说雷诺绝版了吗 工地上下爬梯下端叫什么 电梯机房爬梯是否可以做成垂直的? 垂直爬梯间距规范 四川车牌号是怎么排列的? ...肤色不白,想去染个发色,请问染什么颜色可以显得白点? 川车牌号怎么排的? 诛仙哪个职业技能最好看 诛仙3女生适合玩什么职业? 诛仙男女职业哪个好看,升级也快? 诛仙 女孩子什么职业好 诛仙3女生玩什么职业好?不要牧师。最好是职业漂亮的人物攻击比较强点的... 走访科技馆,采访青少年五四精神有关内容 四川一7岁女孩从楼顶坠入通风井身亡,谁该为此负责? 四川广安七岁可以读一年级吗? 甘孜藏族自治州施行《四川省义务教育实施条例》的变通规定 我在徐东村,做什么公交车到武商众圆摩尔国际电影城青山众圆广场店7号... 7岁女孩坠入排风道身亡一审宣判: 赵雅芝年轻不老的秘密所在 来自四川成都的七岁小女孩,自编歌词,童心唱《童年》! 四川的七岁画的火锅的材料 让你感受最深的电影是哪部? ...10岁小孩子玩的地方?最好是能锻炼孩子动手、动脑能力,还能让孩子感 ... ...安娜·卡列尼娜的贵妇生活》txt下载在线阅读全文,求百度网盘云资源... AGE新手攻略及坐骑获得教程 红尘魔道txt全集下载 毕业季写给情侣的文案 《世界首富》txt下载在线阅读全文,求百度网盘云资源 一个人生活的经典文案 那些年,写在课本上的情话 一个人要努力生活的文案 毕业季情话