十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
觉得大部分功能都可以用js实现,后台只需要把特定结果存入数据库
创新互联建站一直通过网站建设和网站营销帮助企业获得更多客户资源。 以"深度挖掘,量身打造,注重实效"的一站式服务,以成都做网站、成都网站制作、成都外贸网站建设、移动互联产品、成都全网营销服务为核心业务。十年网站制作的经验,使用新网站建设技术,全新开发出的标准网站,不但价格便宜而且实用、灵活,特别适合中小公司网站制作。网站管理系统简单易用,维护方便,您可以完全操作网站资料,是中小公司快速网站建设的选择。
这是一个数码管显示的篮球计分程序,你可以参考一下:
#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 duan = 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;c0;c--)
for(b=17;b0;b--)
for(a=16;a0;a--);
}
void beef(u8 d) //发声
{
u8 a,b,c;
for(c=d;c0;c--)
for(b=17;b0;b--)
for(a=16;a0;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;
duan=1;
P0=leddata[w1]; //送段码
duan=0;
delay(5);
P0=0xff; //显示第一队分数个位
wei=1;
P0=0xfd;
wei=0;
P0=0xff;
duan=1;
P0=leddata[w2];
duan=0;
delay(5);
P0=0xff; //显示第二队分数十位
wei=1;
P0=0xf7;
wei=0;
P0=0xff;
duan=1;
P0=leddata[w3];
duan=0;
delay(5);
P0=0xff; //显示第二队分数个位
wei=1;
P0=0xef;
wei=0;
P0=0xff;
duan=1;
P0=leddata[w4];
duan=0;
delay(5);
P0=0xff; //显示时间十位
wei=1;
P0=0xbf;
wei=0;
P0=0xff;
duan=1;
P0=leddata[w7];
duan=0;
delay(5);
P0=0xff; //显示时间个位
wei=1;
P0=0x7f;
wei=0;
P0=0xff;
duan=1;
P0=leddata[w8];
duan=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
}
}
class Sports {
private String sportsName;
private int playerCount;
Sports() {
this.sportsName = "乒乓球";
this.playerCount = 4;
}
Sports(String sportsName, int playerCount) {
this.sportsName = sportsName;
this.playerCount = playerCount;
}
public String getSportsName() {
return sportsName;
}
public void setSportsName(String sportsName) {
this.sportsName = sportsName;
}
public int getPlayerCount() {
return playerCount;
}
public void setPlayerCount(int playerCount) {
this.playerCount = playerCount;
}
public void show(){
System.out.println("项目名称是:"+sportsName);
System.out.println("参加人数:"+playerCount);
}
public void minCount(Sports[] o){
int count=o[0].getPlayerCount();
String name=o[0].getSportsName();
for(int i=0;io.length;i++){
if(counto[i].getPlayerCount()){
count=o[i].getPlayerCount();
name=o[i].getSportsName();
}
}
System.out.println("所需人数最少的体育项目是:"+name);
System.out.println("所需人数是:"+count);
}
}
public class TestSports{
public static void main(String[] args) {
Sports[] sp=new Sports[4];
sp[0]=new Sports("篮球",10);
sp[1]=new Sports("足球",22);
sp[2]=new Sports("羽毛球",2);
sp[3]=new Sports();
for(int i=0;isp.length;i++){
sp[i].show();
}
new Sports().minCount(sp);
}
}
摘要
本文主要介绍:篮球比赛计时器。本文首先介绍单片机的相关知识,对单片机进行相应的研究,并将其与74HC595串行显示电路配合使用。本电路主要核心是AT89S51,利用软件和硬件的结合实现开机自动置节计数器为第一节,节计时器为12分00秒,24秒违例为24秒。用数字显示篮球比赛当时节数,每节时间及24秒的倒计时,采用单片机串行显示。最后,本文会详细叙述此电路的安装与调试,并对调试过程中出现的问题做简要说明。
关键词 AT89S52单片机;74HC595;XXX
Abstract
Abstract this article mainly introduced: Basketball game timer. This article first introduced that monolithic integrated circuit's related knowledge, conducts the corresponding research to the monolithic integrated circuit, and its and 74HC595 serial display circuit coordination use. This electric circuit main core is AT89S51, realizes using the software and hardware's union starting sets at the festival counter for first, the festival timer is 12 minute 00 second automatically, 24 second case of breaching the rules is 24 seconds. With the digital demonstration basketball game at that time the pitch number, each time and 24 second countdown, used the monolithic integrated circuit serial demonstration. Finally, this article will narrate this electric circuit's installment and the debugging in detail, and to will debug the question which in the process will appear to give the briefing。
key words 89S52 monolithic integrated circuit; 74HC595; XXX
课题背景
在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。单片机的诞生标志着计算机正式形成了通过计算机系统和嵌入式计算机系统两个分支。目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。在我们身边,由单片机作为主控制器的全自动洗衣机、高档电风扇、电子厨具、变频空调、遥控彩电、录像机、VCD/DVD机、组合音响、电子琴等。单片机已在广阔的计算机应用领域中表现得淋漓尽致,出尽了风头。从家用消费类电器到复印机、打印机、扫描仪、传真机等办公自动化产品;从智能仪表、工业测控装置到CT、MRI、γ刀等医疗设备;从数码相机、摄录一体机到航天技术、导航设备、现代军事装备;从形形色色的电子货币如电话卡、水电气卡到身份识别卡、门禁控制卡、档案管理卡及相关读/写卡机等等都有单片机在里面扮演重要角色。因此,单片机已成为电子类工作者必须掌握的专业技术之一。单片机就是一个微型中央处理器,通过编程即能完成很多智能化的工作 ,因此它的出现给电子技术智能化和微型化起到了很大的推动作用。随着人们生活水平的提高,社会经济的发展,人们开始考虑精神生活的享受,并开始注重身体素质的提高。开始举办一些小型的篮球比赛。这就需要裁判有一个公正的判罚,以保证比赛的顺利进行。这就需要有一个专门计时的工具。所以我就设计了一个篮球比赛计时器。设计简单,耗费少,容易制作。可用于街头篮球比赛和校园篮球比赛。花很少的钱就可以得到一个实用的篮球比赛计时器。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。此次设计更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
设计简介
篮球比赛中除了有总时间倒计时外,为了加快比赛的节奏,新的规则还要求进攻方在24秒内有一次投篮动作,否则视为违例。根据要求,以AT89S52单片机为核心,设计篮球比赛计时控制器。篮球比赛上下半场四节制,每节12分钟,要求能随时暂停,启动后继续计时,一节比赛结束后可清零。按篮球比赛规则,进攻方有24秒为例计时。"分""秒"显示用LED数码管。用开关控制计时器的启动/暂停。该篮球比赛计时器的设计,可对比赛总时间和各方每次控球时间计时。该计时器采用按键操作、LED显示,非常实用。此计时器在程序参数稍加修改后也可作为其他球类比赛的计时器。
主控芯片为AT89S52,采用12MHz晶振,P0.0-P0.7作键盘输入。A1为12分钟暂停键;A2为启动12分钟计时键,,24秒计时开始;A3为24S复位开启键(投篮或交换控球时按下此键); A4为24秒计时停止键(没有违例);A5为总计时和24秒计时同时启动键;A6为总计时和24S计时同时停止键。
电路采用静态显示,一起点亮各位数码管,同时显示不同的字符。点亮各位数码管锁存输出。显示器的第一位显示计时节数,3至6位显示计时的分,最后2位显示24秒。用T0定时器中断进行24秒处理,12分钟计时用T1定时器中断计时。同时电路通过键盘扫描,根据键值转相应键处理。
系统电路的设计方案
系统设计方案的提出
本设计是基于89S52单片机的键盘控制及显示电路设计,从系统的设计功能上看,系统可分为两大部分,即键盘输入控制部分和显示部分,对于每一个部分都有不同的设计方案,起初我拟订了下面两种方案:
第一种方案:
键盘控制采用矩阵扫描键盘,可以用普通按键构成4×4矩阵键盘,直接接到89S52单片机的P0口,高四位作为行,低四位作为列,通过软件完成键盘的扫描和定位。显示部分采用动态显示,采用移位寄存器74LS164和译码器74LS138通过显示驱动程序驱动七段数码管显示。此方案成本低,所用到的两个外围芯片价格都很低廉,而且单片机的I/O口占用较少,可以节约单片机接口资源。
第二种方案:
键盘控制采用独立是式键盘,每个按键的"接零端"均接地,每个按键的"测试端"各接一条输入线,通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单。这种方法比较适合按键较少或操作速度较高的场合。显示部分采用静态显示方法,所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小。
方案的确定
本设计要求按键较多,且本次设计只是对所学知识的一次实践,设计要求简单,容易实现,成本低。比较以上两中设计方案,第二种成本低,占用单片机资源少,且容易实现,这样的设计比较适合本次设计,故选用第二种设计方案。
电路设计原理及芯片介绍
键盘控制及显示电路设计的原理及要求
电路的设计原理与功能要求
本设计采用AT89S52单片机芯片作为中央处理芯片,采用AT89S52的P0口构成独立8键键盘,采用AT89S52串行口静态显示,选用74HC595作为LED驱动芯片。
本电路设计有以下功能及要求:
(1)篮球比赛计时器全场时间为48分钟,共四节,每节12分钟和24秒违例。要求开机自动置节计数器为第一节,节计时器为12分00秒,24秒违例为24秒。
(2)用数字显示篮球比赛当时节数,每节时间及24秒的倒计时,采用单片机串行显示。
(3)能随时用按纽开关控制比赛的启动/暂停,启动后开始比赛,暂停期间不计时,重新启动后继续计时。
电路的总设计框图
根据设计任务与要求,可初步将系统分为五大功能模块:主电路、开关启/停控制电路、显示电路、音响电路和+5V稳压电源。进一步细说,主电路选用89S52作为中央处理器;开关启/停控制电路由八个按键组成;显示电路由八位七段数码管和74HC595组成;音响电路用ULN2003驱动蜂鸣器;+5V稳压电路采用7805稳压块把电源电压稳定在+5V。
这个程序 起始也就是 3个按键控制 +1 +2+ 3 1个按键控制 红方蓝方的电路 很简单
#includereg51.h
#includeintrins.h
#define uchar unsigned char
#define uint unsigned int
// 段码
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
// 待显示的6位缓冲
uchar Num_Buffer[]={0,0,0,0,0,0};
// 按键代码,按键计数
uchar Key_Code,Key_Counts1=0; Key_Counts2=0;//1 2分别是红 蓝方
// 延时
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i120;i++);
}
// 显示函数
void Show_Counts_ON_DSY()
{
uchar i,j=0x01;
Num_Buffer[2]=Key_Counts1/100;
Num_Buffer[1]=Key_Counts1/10%10;
Num_Buffer[0]=Key_Counts1%10;
Num_Buffer[5]=Key_Counts1/100;
Num_Buffer[4]=Key_Counts1/10%10;
Num_Buffer[3]=Key_Counts1%10;
for(i=0;i6;i++)
{
j=_cror_(j,1);
P0=0xff;
P0=DSY_CODE[Num_Buffer[i]];
P2=j;
DelayMS(1);
}
}
// 主程序
void main()
{
uchar i;
P0=0xff;
P1=0xff;
P2=0x00;
Key_Code=0xff;
while(1)
{
Show_Counts_ON_DSY();
P1=0xff;
Key_Code=P1;
//有键按下时,数码管刷新显示 30 次,该行代码同时起到延时作用
if(Key_Code!=0xff)
for(i=0;i30;i++) Show_Counts_ON_DSY();
switch(Key_Code)
{
case 0xfe: if(color==1)Key_Counts1++; else Key_Counts2++; //左边加1还是右边加1
break;
case 0xfd: Key_Counts1=Key_Counts1+2; else Key_Counts2=Key_Counts2+2;
break;
case 0xfb: Key_Counts=Key_Counts1+3; else Key_Counts2=Key_Counts2+3;
case 0xf7; color=!color;//左边还是右边
}
Key_Code=0xff;
}
//P1接数码官段码 P2接片选
socket只是一个协议,简历连接以后,一端把流发出去,另一端的接收端口就会收到,所以你知道简单学习一下socket怎么发送就可以了,而且你这个项目不需要多线程,所以不会有大问题