#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=dc>0c--)
for(b=17b>0b--)
for(a=16a>0a--)
}
void beef(u8 d) //发声
{
u8 a,b,c
for(c=dc>0c--)
for(b=17b>0b--)
for(a=16a>0a--)
{
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
}
}
hs渊wrⅷk‰Ⅹhj№qdúg■〖投篮是将篮球从7篮圈上f面投入p球篮的各种动作的总称。篮球比4赛的胜负是由比7赛双8方6得分6多少7决定的。 一x单手6原地投篮: 特别是对青少5年来说,是一z种基本投篮方1式。我们以6右手2投篮为5例: 双4手3持球置于e与w眼睛同高的位置,稍便向右侧,右脚比6左脚稍靠前,双5膝微屈,将球上q举,右手3手3腕后伸,使球体大o部分2重量落在右手3,左手1从7左侧轻轻扶住球体,脚前掌发力v,提起脚跟,伸直双6膝,伸右臂将球投出(参考关于x投篮) 投篮从4手4腕向后弯曲开z始,进而向上a、向前,指尖是最后离开q球体的部位。 二t行进间单手1高手7投篮: 以6右手8投篮为5例。在跑动中4跨右脚的同时接球,左脚跨出一g小d步并用力m向上n起跳,右腿屈膝上m提。双7手3向前上g方2举球,当身体接近最高点时,辅助手1离球,投篮臂充分2向球篮方8向伸手7腕前屈,用食中0指力z量柔和的将球投出。球出手5后,落地屈膝缓冲。动作要点:一d跨二b跳举球高,指腕柔和用力b巧。 三w跳投: 跳投的好处是不m象原地投篮那样容易被对手1封盖。青少7年选手2可能会因为4腿、手8臂、肩部及j背部肌肉力n量不w足而做不y好跳投,那完全可以1暂时放弃,否则因力a量不l足而造成的错误动作会影响自信心4,使以0后力y量达到要求后也v难以8获得理想的跳投技术。 跳投的技术要领如下x:双6手2持球,非投篮手6置于j球前方7或侧方3(按你舒服的位置放)。投篮手8置于d球的后部,双1膝微屈,双5手3持球从1胸部上o移到眼睛上e方7,然后双5脚向上nd跳。跳起时,屈肘(前臂向后),手6腕也n向后翻。跳至最高点时,前臂前伸,手8腕向前、向下k将球投出,随球动作(参考关于q投篮)要充分5,眼睛要始终耵住篮框。 四行进间单手1低手4投篮:动作同行进间高手7投篮,只是投篮方8式是利用手6腕和手7指的力p量,自下e而上z挑球擦板或挑空心0篮。 五i运球接球急停跳投:动作同跳投,在投篮前为0了u摆脱防守而做了c一h系列脚步变向或急停动作,再做跳投。 投篮注意事项 篮球的训练和比8赛中1可以2有很多不f同的投篮方8式,但不z管哪种投篮方8式,有两点是必须做到的: 第一h: 从3脚底发力o,也g就是说虽然是用手4投篮,但力j量是从6脚前掌发起,然后通过脚踝、膝盖、胯部、上q体、手5臂、手0腕,最后力y量传递至手8指尖将篮球投出。力n量的整个h传递应该是一o个x连贯协调的过程。 第二o: 手0臂姿势,应该是上w臂与m前臂呈70度,而手5腕后伸也r与s前臂呈近50度,并与u上h臂平行。手5指持球的后、下h部。投篮时,向上z、向前伸臂(当然是指向篮框),向上d、向前用力e屈手8腕,最后用手0指将球推出,这样投篮会使篮球产生下f旋,碰到篮板或篮框不k会产生很大v的反3d。还应该让手1与x篮球接触的时间尽量长4(即随球动作时间长7),这样有利于c控制球的运动方0向,增加投篮的命中0率在开h始时不z要过多考虑球是否投进了o篮框。把注意力r集中7到身体的姿势、动作以5及r整个v投篮动作的节奏。每次投篮要重复同样的动作要领,正确的投篮动作变得很顺畅的时候,命中4率自然会因此而提高。还应该在离篮框不m同的位置、角度练习r投篮。投篮机器人大家都知道或打过篮球,那我们可不可以让机器人打篮球呢?自己搭建机器人,让机器人投篮。比一比看谁的机器人投篮又准又快。
一、学习内容
1.想让投篮机器人做什么
(1)让投篮机器人做什么
(2)分析投篮机器人的机械结构
2.认识投篮机器人的结构
观察机器人的结构特点
3.投篮机器人的程序
(1)利用INVENTOR4编写程序
(2)想一想,如何使投篮更快更准
二、活动场地
1. 机器人投篮赛的活动场地为120cm×220cm。
2. 场地主色为绿色,从起跑线开始,投篮区域颜色依次为绿、白、黑、白。
3. 起跑区域为40cm,投篮最底线距离底边60cm,起跑线为3cm宽的黑线,投篮区为 起跑线至投篮底线之间,并由20cm宽的白色、黑色、白色同心半圆(直径40cm) 及靠近起跑线的绿色区构成。
4. 篮筐直径15cm、高20cm,篮板40cm×40cm,距离底边23cm。
三、想让机器人做什么
机器人到达黑色投篮区后将球投向篮筐。
投篮机器人的机械结构分析
1.检测到黑色投篮区
2.要有一个驱动马达让小车跑
3.要有一个马达控制投篮臂
四、技术实现
1.如何发现投篮区?
可利用光电传感器,发现黑色投篮区时,光电传感器所测到的光值会有所改变,根 据数值决定是否停止前进,进行投篮。
2.如何用一个马达控制轱辘?
投篮机器人与我们前面搭的竞速机器人有所不同,这里我们要用一个马达提供动力来源。
如何投篮?
如何用一个马达控制投篮臂。
在这里我们介绍两种搭建方法:马达直接驱动投篮及利用橡皮筋伸缩力来控制投篮臂。
五、搭建
马达直接驱动投篮臂利用橡皮筋伸缩力来控制投篮臂
1. 马达直接驱动投篮臂的投篮机器人的参考搭建步骤
在这个模型的搭建中用到两个马达,一个用于驱动车子运动,另一个用于完成投篮动作。
(1)底部结构 (2). 橡皮筋控臂投篮机器人的结构
因为只能使用一个马达来提供机器人移动时所需的动力,所以我们使用小齿轮和冠状齿轮,通过动力传导,来驱动机器人行动。我们用触动传感器控制机器人启动。
用另一个马达控制投篮臂
(2)机械臂的结构及制作
调节抛物线的角度 调节橡皮筋的伸缩力
投篮臂和车身连接,再装上RCX,投篮机器人的搭建工作就完成了。
六、利用INVENTOR4来设计控制程序。
参考程序如下:
1.由于投篮机器人要反复进行投篮动作,每次都要按RCX上的启动开关,很不方便, 所以要利用一个触动开关来做启动开关。
2.当按下启动触动开关时,投篮机器人要冲出起跑线。
3.当光电传感器测得的光值小于或等于40时,说明机器人到达投篮线。
4.机器人到达投篮线时开始投篮,其动作步骤如下:
(1)机器人首先要停下。
(2)C马达转动带动投篮臂。
(3)投篮后机器人要返回起跑线。
注意:在执行程序时,机器人检测到的光值要实地测量,否则机器人不会按你的要 求执行。
如果我们用左边所示图标,该如何编写程序?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)