×
单片机 > 单片机程序设计 > 详情

基于51单片机的篮球计分器设计

发布时间:2020-08-26 发布时间:
|

这是我以前做的51单片机篮球计分器设计,
花了一个星期时间,
附件里面包括源代码;PCB原理图,
和proteus的仿真文件以及课程设计的相关文档,
都是自己原创的,大家多多指教

制作出来的篮球计分器实物图如下:
 

电路原理图如下:
 

篮球计分器仿真原理图如下
 

Altium Designer画的篮球计分器原理图和PCB图如下:
 

单片机篮球计分器程序源码:

#include//51单片机头文件

typedef unsigned char uchar;

typedef unsigned int  uint;

sbit K1=P3^2;//比赛倒计时开始/暂停

sbit K2=P3^3;//24s倒计时重新开始

sbit P20=P2^0;//乙队+1按键

sbit P21=P2^1;//乙队+2按键

sbit P22=P2^2;//甲队+1按键

sbit P23=P2^3;//甲队+2按键

sbit P24=P2^4;//甲队+3按键

sbit P25=P2^5;//乙队+3按键

sbit P26=P2^6;//预留按键

sbit P27=P2^7;

sbit beep=P3^6;//蜂鸣器接口  

sbit RS=P1^0;

sbit RW=P1^1;

sbit E=P1^2;

char second,minute,num,time,aa;

uchar dd,bb,cc;

uchar code table1[]={"H.T 000:000 T.H "};

uchar code table2[]={"12:00  SEC-1  24"};


//延时子函数

void delay(uint z)  

{

        uint x;

        uchar y;

        for(x=z;x>0;x--)

                  for(y=110;y>0;y--);

}

//LCD1602液晶写指令子函数

void write_com(uchar com)

{        

    RW=0;

    RS=0;

        P0=com;

        delay(5);

        E=1;

        delay(5);

        E=0;

}

//LCD1602液晶写数据子函数

void write_date(uchar date)

{

        RW=0;

        RS=1;

        P0=date;

        delay(5);

        E=1;

        delay(5);

        E=0;

}

//LCD1602液晶初始化子函数

void LCD1602_init()

{

        uchar i;

        bb=0;         //H.T分数初始化

        cc=0;         //T.H分数初始化

        time=0;

        TMOD=0x10;    //定时器1初始化

        TL1=0x00;

        TH1=0x4c;

        EA=1;         //开总中断

        ET1=1;        //开定时器1

        TR1=0;        //开中断0

        EX1=1;        //开中断1

        IT0=1;        //中断0为边沿触发

        IT1=1;        //中断1为边沿触发

        E=0; 

        beep=0;

        second=0;

        minute=12;

        num=1;

        aa=24;

        write_com(0x38);  //LCD设置初始化

        write_com(0x0c);

        write_com(0x06);

        write_com(0x01);

        write_com(0x80);  //LCD显示初始化

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

        {

                  write_date(table1[i]);

        }

        write_com(0x80+0x40);

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

        {

                  write_date(table2[i]);

        }

}

//分数更新子函数

void point_lcd(uchar add,uchar dat)

{

        write_com(0x80+add);

        write_date(0x30+dat/100);

        write_date(0x30+(dat%100)/10);

        write_date(0x30+dat%10);

        write_com(0x80+add);

}

//按键扫描子函数

void keyscan()

{

        P2=0xf0;

        if((P2&0xf0)!=0xf0)

        {

                delay(20);

        }

        if((P2&0xf0)!=0xf0)

        {

                P2=0xf7;

                        if(P24==0)

                        {

                                while(P24==0);         //P24按下H.T分数加1

                        bb++;

                          point_lcd(0x04,bb);  

                          if(P24==0)        

                                {

                                   while(P24==0);

                                    delay(20);

                                }

                        }

                        else if(P25==0)           //P25按下H.T分数加2

                        {

                                while(P25==0);

                                bb=bb+2;

                          point_lcd(0x04,bb);

                          if(P25==0)

                                {

                                 while(P25==0);

                                 delay(20);

                                }

                        }

                        else if(P26==0)       //P26按下H.T分数加3

                        {

                          while(P26==0);

                        bb=bb+3;

                          point_lcd(0x04,bb);

                           if(P26==0)

                                {

                                   while(P26==0);

                                   delay(20);

                                }


                        else if(P27==0)         //P27按下T.H分数加一

                        {

                         while(P27==0);

                       cc++;

                         point_lcd(0x08,cc);

                         if(P27==0)

                                 while(P27==0);

                                 delay(20);

                           }

                        }

                P2=0xfb;

              if(P24==0)           //P24按下T.H分数加2

                          {

                         while(P24==0);

                   cc=cc+2;

                         point_lcd(0x08,cc);

if(P24==0)



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于arm的指纹识别门禁系统是如何设计的