如图的单片机板STC89C51芯片,需要做一个篮球记时计分板,要求有加1-3分和减分功能,

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-30
跪求!!基于单片机STC89C51篮球积分器C语言编程。

篮球积分器?相当于一个计数器吧?你可以设置几个按键,一个加一分,一个加两分,一个加三分,很方便的。我这里有一些资料,需要可以来找我,随时都在线,等待回复。

1.1背景知识介绍
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。例如,80C51系列单片机已有十多年的生命期,如今仍保持着上升的趋势,就充分证明了这一点。单片机以其一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器等。而美国ATMEL公司开发生产了新型的8位单片机——AT89系列单片机。他不但具有一般MCS-51单片机的所有特性,而且还拥有一些独特的优点,此次设计中所用到的AT89C51就是其中典型的代表。

单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机,排烟罩VCD等等的家电里面都可以看到它的身影。

单片机是靠程序实现功能的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件的话,电路一定是一块大PCB板。但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别。只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性。

1.2 设计意义
单片机的应用是具有高度现实意义的。单片机极高的可靠性,微型性和智能性(我们只要编写不同的程序后就能够完成不同的控制工作),单片机已成为工业控制领域中普遍采用的智能化控制工具,已经深深地渗入到我们的日常生活当中

通过此次基于单片机设计的篮球计时计分系统,我们可以更清楚详细的了解单片机程序设计的基本指令功能、编程步骤和技巧来讲述单片机编程,并对MCS-51单片机的结构和原理进行讲述,以及基于单片机开发应用的相关芯片的工作原理,并且可以在将来的工作和学习中加以应用。

1.3 设计目的
随着单片机在各个领域的广泛应用,许多用单片机做控制的球赛计时计分系统也应运而产生,如用单片机控制LCD液晶显示器计时计分器,用单片机控制LED七段显示器计时计分器等。

本次设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。该系统具有赛程定时设置,赛程时间暂停,及时刷新甲、乙双方的成绩以及赛后成绩暂存等功能。它具有价格低廉,性能稳定,操作方便并且易于携带等特点。广泛适合各类学校或者小型团体作为赛程计时计分。

通过本次基于C51系列篮球计时计分器的设计,可以了解、熟悉有关单片机开发设计的过程,并加深对单片机的理解和应用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下一些方面:

(1) 篮球赛计时计分系统包含了8051系列单片机的最小应用系统的构成,同时在此基础上扩展了一些使用性强的外围接口。

(2) 可以了解到LED显示器的结构、工作原理以及这种显示器的接口实例与具体连接与编程方法。

(3) 怎样利用串行口来扩展显示接口等。



附 录

程序代码:

ORG 0000H

AJMP LK1 ;主程序地址

ORG 000BH ;定时中断入口地址

AJMP CTCO

ORG 0013H ;外部中断入口地址

AJMP CXT

LK1: MOV 33H,#00H ;甲队记分清0

MOV 34H,#00H

MOV 35H,#00H

MOV 36H,#00H ;乙队记分清0

MOV 37H,#00H

MOV 38H,#00H

MOV 40H,#00H ;记时分钟清0

MOV 41H,#00H

CLR P0.0

Mp: CLR P2.0 ;计时牌子清零

CLR P2.1 ;分分秒秒清0

CLR P2.2

CLR P2.3

MOV P1,#00H

NOP

NOP

SETB P2.0

SETB P2.1

SETB P2.2

SETB P2.3

MOV 42H,#05H ;送秒钟初值59秒

MOV 43H,#09H



MOV SCON,#00H ;计分牌子清零程序

CLR P3.7

MOV R1,#33H

MOV R2,#06




LP: MOV A,@R1

MOV DPTR,#TAB ;取显示数

MOVC A,@A+DPTR

MOV SBUF,A ;通过串行口发显示数据

JNB TI,$ ;是否发送完毕

CLR TI ;清除标志位

INC R1

DJNZ R2,LP ;6次是否 发送完毕

SETB P3.7 ;显示数据

LK3: JB P2.4,LK6

ACALL D10MS

JB P2.4,LK3

ACALL D2S

LK4: JB P2.4,LK3 ;调整分钟(十位)

CLR P2.0 ;显示分钟十位数据

MOV P1,40H

SETB P2.0

ACALL D2S ;调用延时程序

INC 40H ;将十位加1

MOV A,40H

CJNE A,#0AH,LK4 ;十到了没有

MOV 40H,#00H

AJMP LK4

LK6: JB P2.5,LK5

ACALL D10MS

JB P2.5,LK6

ACALL D2S

LK7: JB P2.5,LK6 ; 调分钟(个位)

CLR P2.1 ;显示分钟个位数据

MOV P1,41H

SETB P2.1

ACALL D2S ;调用延时程序

INC 41H ;将个位加1

MOV A,41H

CJNE A,#0AH,LK7 ;十到了没有

#include<reg51.h>
#include<INTRINS.h>
#define u16 unsigned int
#define u8 unsigned char

#define Pin0 0x01
#define Pin1 0x02
#define Pin2 0x04
#define Pin3 0x08
#define Pin4 0x10
#define Pin5 0x20
#define Pin6 0x40
#define Pin7 0x80

sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;

sbit k_kt=P3^2;
sbit k_add1=P3^3;
sbit k_add2=P3^4;
sbit k_add3=P3^5;
sbit k_sub1=P3^6;
#define Kkt Pin0
#define Kadd1 Pin1
#define Kadd2 Pin2
#define Kadd3 Pin3
#define Ksub1 Pin4

u8 key=0xff;//消抖后的有效按键值
u8 key_down=0x00;//按键下降沿扫描结果,1有效
u8 key_up=0x00;  //上升沿扫描结果,1有效
u8 key_sc=0xff;//上次扫描的按键值

//按键扫描程序
void scanKey(){
static u8 temp0;
static u8 ms;
u8 temp=0;
if(k_kt==1)temp|=Kkt;
if(k_add1==1)temp|=Kadd1;
if(k_add2==1)temp|=Kadd2;
if(k_add3==1)temp|=Kadd3;
if(k_sub1==1)temp|=Ksub1;
if(temp==temp0){// 按键消抖
if(++ms>=5){//连续5次扫描的值一样,则认为是稳定状态
key=temp;
ms=0;
}
}else {
temp0=temp;
ms=0;
}
key_down=key_sc&(~key);//下降沿扫描
key_up=(~key_sc)&key;//下降沿扫描
key_sc=key;
}

u8 readPIN(u8 port,u8 pin){
    return ((port&pin)==0?0:1);
}

u8 ds[4]; //数码管显示缓存
code u8 w[]={0x01,0x02,0x04,0x08,}; //位码
code u8 d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//断码
void dispaly(){//显示函数
static u8 a;
a++;
if(a>3)a=0;
P0=0xff;
P2=w[a];
P0=d[ds[a]];
}



void init() //初始化函数
{   TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
    ET0=1;

}

u16 js_ms=0;
u16 js=12*60;
u8 flag=0;
u16 count=0;
void main()//主函数
{
init();
TR0=1;
while(1){
ds[0]=count/1000%10;//将当前分值送到数码管缓存
ds[1]=count/100%10;
ds[2]=count/10%10;
ds[3]=count%10;
scanKey();//扫描按键
if(readPIN(key_down,Kadd1)==1){//加1
count+=1;
}
if(readPIN(key_down,Kadd2)==1){//加2
count+=2;
}
if(readPIN(key_down,Kadd3)==1){//加3
count+=3;
}
if(readPIN(key_down,Ksub1)==1){//减1
count-=1;
}

if((key&0x0f)==0){//四个减一起按下,记分清零
count=0;
}
if(readPIN(key_down,Kkt)==1){//加1
if(flag==0){
js=12*60;
js_ms=0;
flag=1;

}
else flag=0;
}

led1=(js>9*60?0:1);
led2=(js>6*60?0:1);
led3=(js>3*60?0:1);
led4=(js>0?0:1);


}

}



void timer0() interrupt 1//定时器,实现倒计时
{   
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dispaly();
if(++js_ms>=1000&&flag!=0){
js_ms=0;
if(js>0)js--;
}
}

引脚和数码管的极性可能和你的板子不一样,但可以修改



这种非通用代码想这找到可不容易 需要的话私信我 有偿代做

  • 如图的单片机板STC89C51芯片,需要做一个篮球记时计分板,要求有加1-3...
    答:1有效u8 key_sc=0xff;//上次扫描的按键值//按键扫描程序void scanKey(){static u8 temp0;static u8 ms;u8 temp=0;if(k_kt==1)temp|=Kkt;if(k_add1==1)temp|=Kadd1;if(k_add2==1)temp|=Kadd2;if(k_add3==1)temp|=Kadd3;if(k_sub1==1)temp|=Ksub1;if(temp==temp0...
  • 画出STC89C51单片机外扩8KRAM,存储器的地址译码采用 74LS138,
    答:如图所示:
  • 请给我一份STC89C51单片机的介绍
    答:STC89C51是一款八位,片内有ROM/EPROM的单片机,其硬件结构具有功能部件种类全,功能强等特点。这种芯片构成的最小系统简单、实用﹑可靠。用STC89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如下图(图2.1)所示。本设计所选用的晶振为12MHZ,晶振电容为30PF。图2.1 STC89C...
  • 89C51是什么单片机
    答:AT89C51是老式的255位单片机,STC89C51在AT89C51上加入了AD数模转换,集成程度更高。MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)8751等通用产品。
  • stc89c51的介绍
    答:STC89C51单片机学习板是一款基于8位单片机处理芯片STC89C51RC的系统。
  • 有没人能介绍下单片机STC89C51啊
    答:STC89C51可以完成ISP在线编程功能,而AT89C51则不能。将AT89C51中的程序直接烧录到STC89C51中后,STC89C51就可以代替AT89C51直接工作(一般都不需要做任何改动即可正常工作)。STC推出的系列51单片机芯片是全面兼容其它51单片机的,而51单片机是主流大军,每一个高等院校、普通学校、网站、业余单片机培训都是以51...
  • stc89c51和at91c51的区别?
    答:1、AT89C51/52:采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。2、STC89C51/52:使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统的51单片机不具备的功能。三、特点不同 1、AT89C51/52:4k 字节Flash 闪速存储器,256字节片内数据存储器,32 个I/O ...
  • stc89c51和stc89c52的区别是什么??
    答:有以下区别:1、两者都是直流供电电压单片机,STC89C51电压为4.5V-5.5V,STC89LE52的电压为2.0V-3.8V;2、STC89c51/52的存储器不一样,51有4K,52有8K;内部FLASH变大:AT89C51 有 4K 字节的内部 FLASH PERAM,而。AT89C52 的内部FLASH PERAM 增加1倍,达到8K。3、52还多了一个定时器,所以...
  • 自己焊了一个最小系统,芯片是STC89c51,检查了电路,没有短路也没有错...
    答:STC下不了程序是常见问题,一般原因是:1.串口TX、RX线接反或下载器电路与单片机不共地 2.单片机电源电压过低,或晶振没接好 3.STCISP软件上选择的型号与实际芯片型号不符,这里要注意,一定要完全一样,差一点都不行。以前我这边就发生过STC89C52RC单片机,选择为STC89C52了,就差了个后缀,结果无法...
  • 51单片机有个问题一直不懂,就是STC89C51的程序是怎么烧到芯片里面的...
    答:STC的芯片在上电后首先进入BOOT段程序,如果不需要下载,在等待了很小一段时间后就进入的应用程序段,也就是你写的程序。下载过程是这样的,STC的ISP程序发出一段特殊的字符串(具体数据我忘了),单片机如果这时候正在BOOT段里等待,那它就会应答一串握手数据,这时候单片机和ISP程序就连起来了,之后是...