• 大小: 77KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: C/C++
  • 标签: 单片机  C语言  

资源简介

本次设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。系统应具有赛程定时设置,赛程时间暂停,及时刷新甲、乙双方的成绩以及赛后成绩暂存等功能。 内容包括:显示、键盘、时钟等内容

资源截图

代码片段和文件信息

#include
#include

#define uchar unsigned char 
#define uint unsigned int

sbit A8=P2^0;  
sbit A9=P2^1;
sbit A10=P2^2;
sbit A11=P2^3;
sfr P00=0x80;


uchar code wei_1[]={0X010X020X040X080X100X200X400X80};
uchar code table[]={0X3F0X060X5B0X4F0X660X6D0X7D0X070X7F0X6F0x770x7c0x390x5e0x790x710X000X40};

uchar minute=12;  //分
uchar second=0;   //秒
uchar key_status=0; //按键状态值
uchar scoreA=0; //A队得分
uchar scoreB=0; //B队得分
uchar count1=20; //记录定时器时间
uchar match=1; //比赛节数
uchar rule_time=24; //记录24秒规则
uchar rule_flag=0; //记录24秒规则是否启用


/*
初始化IO口
*/
void IO_init(){
A8=0;
A9=0;
}
/*
初始化时间
*/

void time_init(){
TMOD = 0x01;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256; 
EA = 1;
ET0 = 1;
}
/*
延时函数
*/
void delay_ms(uint z){
  uint i;
uchar j;
for(i=0;i
for(j=0;j<100;j++);
}
}

/*
计时函数
*/
void T0_Time() interrupt 1 using 1{
if (count1-- == 0) 
{
second--;
rule_time--;
count1 = 20; 
}
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
}

/*
时间显示函数
*/
void time_display(uchar w2uchar d2){
uchar shi1ge1;
shi1=d2/10;
ge1=d2%10;

P00=wei_1[w2];
A10=1;
A10=0;
P00=table[shi1];;
A8=1;
A8=0;
delay_ms(5);
P00=0;
A10=1;
A10=0;
A8=1;
A8=0;

P00=wei_1[w2+1];
A10=1;
A10=0;
P00=table[ge1];
A8=1;
A8=0;
delay_ms(5);
P00=0;
A10=1;
A10=0;
A8=1;
A8=0;
}

/*
分数显示函数
*/
void score_dispaly(uchar w2uchar d2){
uchar qian2shi2ge2;
qian2=d2/100;
shi2=d2%100/10;
ge2=d2%100%10;

P00=wei_1[w2];
A9=1;
A9=0;
P00=table[qian2];;
A8=1;
A8=0;
delay_ms(10);
P00=0;
A9=1;
A9=0;
A8=1;
A8=0;

P00=wei_1[w2+1];
A9=1;
A9=0;
P00=table[shi2];
A8=1;
A8=0;
delay_ms(10);
P00=0;
A9=1;
A9=0;
A8=1;
A8=0;

P00=wei_1[w2+2];
A9=1;
A9=0;
P00=table[ge2];
A8=1;
A8=0;
delay_ms(10);
P00=0;
A9=1;
A9=0;
A8=1;
A8=0;
}

/*
键盘输入函数
*/
void key(){
static uchar key_new = 0 key_ltemp;
key_status = 0;                  
P1 = 0x0f;
if((P1 & 0x0f) != 0x0f)
{
delay_ms(1);      
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
{
key_new = 0;
/*
矩阵键盘扫描
*/
key_l = (P1 | 0xf0);   
P1 = key_l;
switch(P1)
{
/*
开始计时/比赛继续
*/
case 0x7e:  
TR0=1;  
rule_flag=1;
time_display(6rule_time);
break;  
/*
暂停比赛
*/
case 0x7d:
TR0=0;
break;  

/*
加分,同时24秒清零和总计时器停止计时
*/
case 0xee: 
TR0=0; 
scoreA +=3;
rule_time=24;   
rule_flag=0;
break;
case 0xed: 
TR0=0; 
scoreA +=2;
rule_time=24;   
rule_flag=0;
break;
case 0xeb:  
TR0=0; 
scoreA +=1;
rule_time=24;   
rule_flag=0;
break;
case 0xde:  
TR0=0; 
scoreB +=3;
rule_time=24;   
rule_flag=0;
   break

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-08-10 21:53  篮球计时器\
     文件      165770  2018-06-23 20:42  篮球计时器\Last Loaded pic.DBK
     目录           0  2018-08-10 21:50  篮球计时器\Listings\
     文件       11167  2018-08-10 21:50  篮球计时器\Listings\yuanma.lst
     文件       15349  2018-08-10 21:51  篮球计时器\Listings\yuanma.m51
     目录           0  2018-08-10 21:51  篮球计时器\objects\
     文件       11359  2018-08-10 21:51  篮球计时器\objects\yuanma
     文件         957  2018-08-10 21:51  篮球计时器\objects\yuanma.build_log.htm
     文件        2563  2018-08-10 21:51  篮球计时器\objects\yuanma.hex
     文件          79  2018-08-10 21:51  篮球计时器\objects\yuanma.lnp
     文件       12843  2018-08-10 21:50  篮球计时器\objects\yuanma.obj
     文件      165762  2018-08-10 21:53  篮球计时器\pic.DSN
     文件         742  2018-08-10 21:53  篮球计时器\pic.PWI
     文件        4516  2018-06-23 20:41  篮球计时器\yuanma.c
     文件           0  2018-08-10 21:48  篮球计时器\yuanma.uvproj

评论

共有 条评论