51单片机篮球计分器程序+电路图

发布者:光明2599最新更新时间:2020-09-07 来源: 51hei关键字:51单片机  篮球计分器 手机看文章 扫描二维码
随时随地手机看文章


以下是篮球计分器的c语言程序源代码:

#include


#include

#define uchar unsigned char

#define uint unsigned int

uchar secs = 0;

uchar minutes = 1;

uchar LED,num1,num2,num = 4;

uchar  flag1 = 1,flag2 = 0;

uchar m_secs = 24;

uchar key_value = 0;

uchar table[13] = {1,2,3,4,5,6,7,8,9,0,1,2,3};

uchar code LedNum[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar scan_kay(void);

void delay(uchar z);

void INT0_Initial(void)

{

    EX0 = 1;

    IT0 = 1;

    EA = 1;

    P1 = 0xF0;

}


void INT0_Interrupt(void) interrupt 0

{

    uchar temp;

    temp = scan_kay();

    if(temp!=0x7f)

    {

        key_value = temp;

    }

    P1 = 0xF0;

}


void Time0_Initial(void)

{

    TMOD = 0x01;

    TH0 = (65536-50000)/256;

    TL0 = (65536-50000)%256;

    ET0 = 1;

    TR0 = 1;

    EA = 1;

    PT0 = 1;

    PX0 = 0;

}


volatile uchar cnt = 0;

void Time0_Interrupt(void) interrupt 1

{

    TH0 = (65536-50000)/256;

    TL0 = (65536-50000)%256;

    cnt ++;

minutes=11;

    if(cnt==15)

    {

        cnt = 0;

        secs --;

        m_secs --;

        if(flag2==1)

        {

            LED = !LED;

        }

        if(flag2==0)

        {

            LED = 0;

        }

    }

    if(secs>60)

    {

        secs = 59;

        minutes --;

    }

    if(m_secs>24)

    {

        m_secs = 23;

        if(flag1==1)

        {

            flag2 = 1;

        }

        if(flag1==0)

        {

            flag2 = 0;

        }

    }

    if(minutes>60)

    {

        minutes = 11;

        m_secs = 24;

        num ++;

    }

    if(num==4)

    {

        num = 1;

    }

}

void HEXTOBCD(void)

{

    table[0] = LedNum[num];

    table[1] = LedNum[m_secs/10];

    table[2] = LedNum[m_secs%10];

    table[3] = LedNum[minutes/10];

    table[4] = LedNum[minutes%10];

    table[5] = LedNum[secs/10];

    table[6] = LedNum[secs%10];

    table[7] = LedNum[num1/100];

    table[8] = LedNum[num1%100/10];

    table[9] = LedNum[num1%10];

    table[10] = LedNum[num2/100];

    table[11] = LedNum[num2%100/10];

    table[12] = LedNum[num2%10];

}


void Display(uchar *str)

{

    uchar i,temp = 0;

    for(i=0;i<13;i++)

    {

        P0 = 0x00;

        _nop_();

        P2 = temp+i;

        P0 = str[i];

        delay(2);

    }

}

uchar i,j;

void delay(uchar z)

{

for(i=1;i  for(j=1;j<110;j++);

}


void main()

{

    INT0_Initial();

    Time0_Initial();

    delay(10);

    LED = 0;

    while(1)

    {

        switch(key_value)

     {

            case 12:

      {

                num1 ++;key_value = 0;

                flag1 = 0;

                if(num1>255)

          {

                 num1 = 0;

          }

             break;

      }

            case 13:

      {

                num1 --;key_value = 0;

                flag1 = 0;

                if(num1>255)

          {

                 num1 = 255;

          }

             break;

      }

            case 14:

      {

                num2 ++;key_value = 0;

                flag1 = 0;

                if(num2>255)

          {

                 num2 = 0;

          }

             break;

      }

            case 15:

      {

                num2 --;key_value = 0;

                flag1 = 0;

                if(num2>255)

          {

                 num2 = 255;

          }

             break;

      }

            case 1:

      {

             TR0 = 1;

                key_value = 0;

             break;

      }

            case 2:

      {

                num1 = 0;num2 = 0;

             num = 4;

                secs = 0;minutes = 12;

                m_secs = 24;

                key_value = 0;

             TR0 = 1;

             break;

      }

            case 3:

      {

             TR0 = 0;

                key_value = 0;

             break;

      }

            default:

      {

             break;

      }

     }

        HEXTOBCD();

        delay(5);

        Display(table);

        delay(10);

    }

}

uchar scan_key(void)

{

    uchar i,key_value;

    P1 = 0xFF;

    for(i=0;i<4;i++)

    {

        P1 = ~(1<        key_value = P1&0xF0;

        if(key_value!=0xF0)

        {

            delay(20);

            key_value = P1&0xF0;

            if(key_value!=0xF0)

         {

                key_value &= 0xF0;

                switch(key_value)

             {

                    case 0x70: key_value = 15-(3-i)*4;break;

                    case 0xb0: key_value = 14-(3-i)*4;break;

                    case 0xd0: key_value = 13-(3-i)*4;break;

                    case 0xe0: key_value = 12-(3-i)*4;break;

                    default: key_value = 0x7f;

             }

                return key_value;

         }

        }

        P1 = 0xFF;

    }

    return 0x7f;

}


uchar scan_kay(void)

{

    uchar key_va1,key_va2;

    key_va1 = scan_key();

    if(key_va1==0x7f)

    {

        return 0x7f;

    }

    do

    {

        key_va2 = scan_key();

    }while(key_va1==key_va2);

    return key_va1;

}


关键字:51单片机  篮球计分器 引用地址:51单片机篮球计分器程序+电路图

上一篇:51单片机+74hc595芯片实现跑马灯
下一篇:基于51单片机函数信号发生器

推荐阅读最新更新时间:2024-11-11 14:14

51单片机汇编内部RAM数据传送类指令举例介绍
(1)以累加器A为目的地址 MOV A,Rn ;(A) (Rn)以下类似。 MOV A,direct MOV A,@Ri MOV A,#data (2)以寄存器Rn为目的地址 MOV Rn,A MOV Rn,direct MOV Rn,#data (3)以直接存储单元为目的地址 MOV direct,A MOV direct,Rn MOV direct,direct MOV direct,@Ri MOV direct,#data (4)以间接地址为目的地址 MOV @Ri,A MOV @Ri, direct MOV @Ri,#data (5)以DPTR为目的地址 MOV
[单片机]
51单片机基础(2)
填空 1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了( 低8位 )地址。 2、MCS-51的堆栈是软件填写堆栈指针临时在 ( 片内 )数据存储器内开辟的区域。 3、当使用8751且#EA=1,程序存储器地址小于( 1000H )时,访问的是片内ROM。 4、MCS-51系统中,当#PSEN信号有效时,表示CPU要从( 外部程序 )存储器读取信息。 5、MCS-51有4组工作寄存器,它们的地址范围是( 00H~1FH )。 6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以( 位 )寻址。 7、PSW中RS1 RS0=10时,R2的地
[单片机]
80c51单片机的控制总线信号有哪些 80c51单片机特点
  80c51单片机的控制总线信号有哪些   80C51单片机的控制总线信号包括以下几种:   ALE(Address Latch Enable)地址锁存使能信号:当CPU向外部总线发出地址时,ALE信号会使地址锁存器(Latch)中的地址保持稳定,供外设使用。   PSEN(Program Store Enable)程序存储器使能信号:当CPU要从程序存储器中读取指令时,PSEN信号会使程序存储器选择器(Program Memory Selector)选择程序存储器。   RD(Read)读信号:当CPU从外部读取数据时,RD信号会通知外设将数据准备好。   WR(Write)写信号:当CPU向外部写入数据时,WR信号会通知外设
[单片机]
51单片机的复位方式及原理
51单片机采用高电平复位。以当前使用较多的AT89系列单片机来说,电路图如下。在复位脚加高电平2个机器周期可使单片机复位。复位后的主要特征是各IO口呈现高电平,程序计数器从零开始执行程序。 复位方式有两种。 1.上电复位:上电后,电容两端电压不能突变,VCC通过复位电容(10μF电解)给单片机复位脚施加高电平5V,同时,通过10KΩ电阻向电容器充电,使复位脚电压逐渐降低。经一定时间后(约10毫秒)复位脚变为0V,单片机开始工作。 2.手动复位:按下复位按钮,复位脚得到VCC的高电平,单片机复位,按钮松开后,单片机开始工作。
[单片机]
<font color='red'>51单片机</font>的复位方式及原理
51单片机ROM的一些重地址
51单片机ROM的一些重地址 0000H 单片机复位后的入口地址 (共 3 字节) 00003H 外部中断0的中断服务入口地址 (共 8 字节) 000BH 定时/计数器0的溢出中断服务入口地址 (共 8 字节) 0013H 外部中断1的中断服务入口地址 (共 8 字节) 001BH 定时/计数器1的溢出中断服务入口地址 (共 8 字节) 0023H 串行口的中断服务入口地址 在程序编写时如果要用到相关中断,注意不要用无关代码段将其覆盖
[单片机]
一种简单51单片机电子密码锁设计
随着工业化进程的不断加快,信息化也逐渐进入千家万户,人们对家庭居住和文件资料等隐私的安全要求也逐渐提高,而传统的机械锁也日益不能满足要求,因此保密性高、灵活性好、安全系数高的电子锁的设计和提出对生活有着重大意义。结合这种情况,本文对单片机的电子密码锁的设计进行了分析和探究。 1 单片机电子密码锁的背景和设计特点 在高科技迅速发展的今天,人们已经发明了密码锁、电子锁和激光锁等多种形式。这些锁在传统钥匙的基础上,利用磁场、声波和光束等多种方式来控制锁的开启和关闭,从而有效地增强了锁的安全性,保护了人们的生命财产和安全,有效地防止盗贼的光顾。 单片机又称为单片微电脑或者单片微型计算机,它有效的集合了中央处理器、只读存储器、随机存取存储
[单片机]
一种简单<font color='red'>51单片机</font>电子密码锁设计
ARMLinux(mini2440)串口与51单片机的9位串口通讯
当51单片机的串口模式在方式2或方式3时为9位通讯方式,即当串行数据第9位为 1 时,前8位数据指示的是用来和主机通讯的从机地址;当串行数据第9位为 0 时,前8位数据则用为真正的数据。具体请参考: https://www.eeworld.com.cn/mcu/2011/0621/article_4424_1.html 而FriendlyARM的mini2440可以设置的数据位数为5~8位,即CS5,CS6,CS7,CS8。关于Linux串口的编程教学请参见: http://www.adamjiang.com/pukiwiki/index.php?Linux串口编程详解#ec39e271 查阅了一下前人的做法,有两种:1.硬方
[单片机]
ARMLinux(mini2440)串口与<font color='red'>51单片机</font>的9位串口通讯
基于51单片机的霍尔自行车里程测速仪
一.硬件方案 以 51 单片机为核心,A44E 霍尔传感器测转数,实现对自行车里程/速度的测量统计,采用 数码管实时显示自行车的里程数及速度。利用霍尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经过处理送显示。 主要由51单片机+最小系统+霍尔传感器+数码管+三极管+lm393+LED指示灯模块+按键;如图: 二.设计功能 (1)51单片机作为控制核心,驱动显示模块,驱动按键模块等,并利用霍尔传感器与磁铁获取脉冲信号。 (2)4位共阳数码管为速度,距离显示模块,速度单位为 km/h,距离单位是 km。 (3)设有一个按键来切换显示速度和距离。 三.设计原理图 原理图主要采用AD软件进行设计,如图:
[单片机]
基于<font color='red'>51单片机</font>的霍尔自行车里程测速仪
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved