历史上的今天
今天是:2024年10月19日(星期六)
2019年10月19日 | 基于51单片机的篮球计分器设计
2019-10-19 来源:51hei
这是我以前做的51单片机篮球计分器设计,
花了一个星期时间,
附件里面包括源代码;PCB原理图,
和proteus的仿真文件以及课程设计的相关文档,
都是自己原创的,大家多多指教
制作出来的篮球计分器实物图如下:
电路原理图如下:
篮球计分器仿真原理图如下
Altium Designer画的篮球计分器原理图和PCB图如下:
单片机篮球计分器程序源码:
#include 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) { while(P24==0); delay(20); } } else if(P25==0) //P25按下T.H分数加3
上一篇:基于51单片机的智能晾衣架设计
史海拾趣
|
那位大哥大姐有在EVC下图形界面开发的例子,小弟新手,一直用java 做东西,现在用c++,有点糊涂,对C++了解的不是很多,C++中有没有像java 中有专门的供参考的API文档呀? 那位好心人帮帮忙! 我的邮箱是:xjing1219@163.com… 查看全部问答> |
|
如何在WM上显示文件扩展名出来?还有就是WM上有没有象UltraEdit之类的超级编辑器? 如何在WM上显示文件扩展名出来?还有就是WM上有没有象UltraEdit之类的超级编辑器?… 查看全部问答> |
|
我现在做的毕业设计,到C51与mp3连接这不会了,想向各位高手求助一下,我做的是基于单片机的讲故事机器人的研究,我不会连接。问我的导师,他只给建议,说在mp3的开始按钮上搭个继电器,用C51控制。我不会画那个的原理图,要求是,焊好电路后,把他 ...… 查看全部问答> |
|
刚开始接触LDO的时候,并不知道是什么意思,终于在偶然的一次参加TI组织的模拟产品研讨会上才开始对它有了比较全面的了解。那个时候是没有机会接触这个LDO的,最多的就是知道7805 7806 7812 7815 7824这些芯片,当时为了一次性买齐全这些型号,把自 ...… 查看全部问答> |




