资源简介
采用51单片机,完成篮球比赛的计时和计分,给出了Proteus仿真硬件和Keil c开发的软件。

代码片段和文件信息
#include
#define uchar unsigned char
#define uint unsigned int
sbit Score_Select=P2^6;
sbit Time_Select=P2^7;
uchar table[]={0x3f0x060x5b0x4f0x660x6d
0x7d0x070x7f0x6f0x800x400x000x76};//0-9数字,后面为“. - 熄灯 H“
uchar msec;
unsigned char key_down=0;//键按下和松开状态指示,防止重复读取键值
/*****50msec定时器0中断*****/
void T0_int() interrupt 1
{
TH0=0x3c; //50ms定时
TL0=0xB0;
msec++;
}
/*****延时子程序*****/
void delay(uint t)
{
for(;t>0;t--);
}
/*--------------------------------------------------------*/
/*4*4矩阵键盘键值扫描程序 */
/*返回按键的数字值 */
/*--------------------------------------------------------*/
uchar key_scan(void)
{
uchar keykey_val;
P1=0xf0;//低位行线送低电平
key=P1;//读取高位列线电平
if(key!=0xf0)//是否有键按下
{
if(key_down==0)//之前没有按键按下
{
key_down=1;//置按键按下标志
delay(5000); //延时去抖动5ms
key=P1;//再读取高位列线电平
if(key!=0xf0)//确认有键按下
{
P1=0x0f;//高位列线拉低回送
key|=P1;//读取低位行线电平并与原高位列电平组合得到键扫描码
}
else
return 0xff;//按键干扰,返回无效按键键值
}
else
return 0xff;//按键按下未松开,返回无效按键键值
}
else
{
if(key_down==1) key_down=0;//键松开,清按键标志
return 0xff;//返回无效按键键值
}
switch(key)
{ //第一行按键
case 0xee:
key_val=1;
break;
case 0xde:
key_val=2;
break;
case 0xbe:
key_val=3;
break;
case 0x7e:
key_val=15;
break;
//第二行按键
case 0xed:
key_val=4;
break;
case 0xdd:
key_val=5;
break;
case 0xbd:
key_val=6;
break;
case 0x7d:
key_val=14;
break;
//第三行按键
case 0xeb:
key_val=7;
break;
case 0xdb:
key_val=8;
break;
case 0xbb:
key_val=9;
break;
case 0x7b:
key_val=13;
break;
//第四行按键
case 0xe7:
key_val=10;
break;
case 0xd7:
key_val=0;
break;
case 0xb7:
key_val=11;
break;
case 0x77:
key_val=12;
break;
default:
key_val=0xff;//无效按键键值
break;
}
return key_val;
}
main()
{
uchar secminutehour;
char count_seccount_minutecount_hourcount_pause;
uchar set_hourset_minuteset_secset_count;
long set_count_timetemp;
int temp1;
uchar time_settime_set_bittime_disptime[8];
uchar teamone_flash;
uchar score_setinv;
int score_addscore[2];
uchar keyvalue;
uchar i;
team=0;
inv=0;
score_set=0;
score_add=0;
score[0]=score[1]=0;
time_set=time_set_bit=time_disp=0;
time[0]=time[1]=0;
msec=0;
sec=50;
minute=59;
hour=23;
count_sec=count_minute=count_hour=count_pause=0;
set_hour=set_minute=set_sec=set_count=set_count_time=0;
IT0=1;
EX0=1;
TMOD=0x11;
TH0=0x3C;
TL0=0xB0;
ET0=1;
TR0=1;
EA=1;
while(1)
{
keyvalue=key_scan();
switch(keyvalue)
{
case 15://Time Set
if(time_set==0){
time_set=1;//标志时钟设置
i=2;
time[i++]=hour/10;
time[i++]=hour%10;
time[i++]=minute/10;
time[i++]=minute%10;
time[i++]=sec/10;
time[i++]=sec%
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 121325 2013-06-19 17:23 计分器\Last Loaded score.DBK
文件 15811 2013-06-20 02:11 计分器\score
文件 8067 2013-06-20 02:11 计分器\score.c
文件 121325 2013-06-20 02:15 计分器\score.DSN
文件 7891 2013-06-20 02:11 计分器\score.hex
文件 27 2013-06-20 02:11 计分器\score.lnp
文件 23783 2013-06-20 02:11 计分器\score.LST
文件 20511 2013-06-20 02:11 计分器\score.M51
文件 19281 2013-06-20 02:11 计分器\score.OBJ
文件 352 2013-06-20 02:11 计分器\score.plg
文件 790 2013-06-20 02:15 计分器\score.PWI
....... 56701 2013-06-20 02:11 计分器\score.uvopt
....... 13238 2013-06-19 17:50 计分器\score.uvproj
....... 56709 2013-06-20 02:09 计分器\score_uvopt.bak
....... 0 2013-06-19 15:51 计分器\score_uvproj.bak
目录 0 2013-06-20 02:17 计分器
----------- --------- ---------- ----- ----
465811 16
- 上一篇:H.264&H.265视频压缩编码参考码率表
- 下一篇:Ruby中文教程带源码
相关资源
- 最新的北京地铁shp文件75146
- 程序员专用字体YaHei.Consolas.1.11b42517
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- 清翔电子MCS51开发板资料_新版 01_开发
- MCS_51单片机与8255A的接口设计
- Rtx51_tiny_RTOS中文版.pdf
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- proteus仿真 AT89C51输出各种波形
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- NRF24L01实现51与STM32双向通讯
- 基于c8051f020的AD转换程序及LCD显示程序
评论
共有 条评论