hnyzcj 发表于 2014-5-15 18:43:44

第十课骰子游戏——数码管实验

本帖最后由 hnyzcj 于 2014-5-15 18:45 编辑

教学目标知识与技能:1.    认识数码管的结构种类及其作用。2.    通过正确的物理连线,驱动数码管。过程与方法:1.正确连接物理电路,驱动数码管。2.测试程序,查看实验结果。情感态度价值观:    与其他元器件结合使用进行创意设计,制作各种数码管实验。教学重点:认识数码管的结构、种类及用途,驱动数码管。教学难点:正确连接电路(识别数码管接口引脚)实验器材:DFRobotArduino控制板、面包板、导线、220欧8个、数码管(1个)、Arduino Ide 1.04
【教学过程】1.情景引入教师展示制作的骰子游戏效果图或视频。
图1师:我们经常在影视剧作品中看到抛掷骰子的画面,那么今天我们将使用数码管来制作一个电子骰子。数码管其实就是一堆led通过共阳并联在一起的小方块,用来显示数字和几个字母,是非常简单常见的显示器件。设计意图:案例引入,器材准备。2.新知讲授今天实验中使用的器材:数码管、导线、220欧电阻。(1.)认识数码管数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);这些段分别由字母a,b,c,d,e,f,g,dp来表示。
按能显示多少个“8”可分为1位、2位、4位等等数码管
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共的COM接到+5V,当某一字段发光二极管为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴极数码管是指将所有发光二极管阳极接到一起形成公共阳极(COM)的数码管。共阴数码管在应用时应将公共极PWR接到电源输入PWR上,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。
(2.)工作原理数码管的每一段是由发光二极管组成,所以在使用时跟发光二极管一样,也要连接限流电阻,否则电流过大会烧毁发光二极管。本实验用的是共阳极数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。数码管共有七段显示数字的段,还有一个显示小数点的段。当让数码管显示数字时,只要将相应的段点亮即可。例如:让数码管显示数字1,则将b、c段点亮即可。将每个数字写成一个子程序。在主程序中每隔2s显示一个数字,让数码管循环显示1~8数字。每一个数字显示的时间由延时时间来决定。(3.)连接线路
图2将限流电阻的一端插到数字I/O中,另一端与数码管的字段引脚相连,剩下的六个字段和一个小数点依次按照这种方法接。将公共极COM如果是共阳极的就接到+5V,如果是共阴极的就接到GND。按数码管的接法将数码管g段通过限流电阻与数字口9引脚相连,f段通过限流电阻与数字8引脚相连,共阳极与5V口相连,同样的接法a、b分别接7、6引脚,e、d分别接10、11引脚,第二个共阳极可以不接,c、DP分别接5、4引脚,连线完毕。设计意图:介绍数码管物理电路连接,本课内容中连线较多,比较繁琐,提示学生按照顺序,逐步完成连线,这样条理清晰,线路分明。(3.)烧录程序程序代码如下://设置控制各段的数字IO脚
inta=7;
intb=6;
intc=5;
intd=11;
inte=10;
intf=8;
intg=9;
intdp=4;
//显示数字1
voiddigital_1(void)
{
unsignedchar j;
digitalWrite(c,LOW);//给数字5引脚低电平,点亮c段
digitalWrite(b,LOW);//点亮b段
for(j=7;j<=11;j++)//熄灭其余段
digitalWrite(j,HIGH);
digitalWrite(dp,HIGH);//熄灭小数点DP段
}
//显示数字2
voiddigital_2(void)
{
unsignedchar j;
digitalWrite(b,LOW);
digitalWrite(a,LOW);
for(j=9;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
}
//显示数字3
voiddigital_3(void)
{
unsignedchar j;
digitalWrite(g,LOW);
digitalWrite(d,LOW);
for(j=5;j<=7;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
digitalWrite(f,HIGH);
digitalWrite(e,HIGH);
}
//显示数字4
voiddigital_4(void)
{
digitalWrite(c,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
digitalWrite(a,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
}
//显示数字5
voiddigital_5(void)
{
unsignedchar j;
for(j=7;j<=9;j++)
digitalWrite(j,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(dp,HIGH);
digitalWrite(b,HIGH);
digitalWrite(e,HIGH);
}
//显示数字6
voiddigital_6(void)
{
unsignedchar j;
for(j=7;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(c,LOW);
digitalWrite(dp,HIGH);
digitalWrite(b,HIGH);
}
//显示数字7
voiddigital_7(void)
{
unsignedchar j;
for(j=5;j<=7;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
for(j=8;j<=11;j++)
digitalWrite(j,HIGH);
}
//显示数字8
voiddigital_8(void)
{
unsignedchar j;
for(j=5;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
}
voidsetup()
{
inti;//定义发量
for(i=4;i<=11;i++)
pinMode(i,OUTPUT);//设置4~11引脚为输出模式
}
voidloop()
{
while(1)
{
digital_1();//数字1
delay(2000);//延时2s
digital_2();
delay(2000);
digital_3();
delay(2000);
digital_4();
delay(2000);
digital_5();
delay(2000);
digital_6();
delay(2000);
digital_7();
delay(2000);
digital_8();
delay(2000);
}
}
将上述代码复制到IDE窗口中,先编译,如果无误后,再上传烧录至控制板中。完成后可以测试实验结果。三.课堂练习师:相信大部分同学已经基本测试完程序的效果了,不知道各位同学所做的骰子游戏是否达到理想的效果。师:如果上述实验做好的同学,请你修改上述程序,经过一轮数字显示后,最终停在某个具体的数字上。 四.学习总结1.使用数码管,制作骰子游戏。2.了解并掌握数码管的引脚结构,在复杂电路连接时,应掌握合理的连线方式方法,确保线路清晰明了。 五、课后反馈本次实验中,有些 学生没有完成此实验的效果。造成实验失败的原因在于接线错误,通过实地查看学生接线,其根本原因在于:数码管各引脚掌握不够。我们在上课的时候给出的数码管引脚结构为下图

而此图并不能够让学生清晰的掌握数码管引脚分布,甚至产生一些错觉,造成连线错误。因此我们在对于数码管引脚的分布结构图,我们建议改为下图

1973742214 发表于 2017-10-6 11:59:50

你这个代码有些错误我给改过来了以下为改动代码:
int a=7;
int b=6;
int c=5;
int d=11;
int e=10;
int f=8;
int g=9;
int dp=4;
//显示数字1
void digital_1(void)
{
unsigned char j;
digitalWrite(c,LOW);//给数字5引脚低电平,点亮c段
digitalWrite(b,LOW);//点亮b段
for(j=7;j<=11;j++)//熄灭其余段
digitalWrite(j,HIGH);
digitalWrite(dp,HIGH);//熄灭小数点DP段
}
//显示数字2
void digital_2(void)
{
unsigned char j;
digitalWrite(b,LOW);
digitalWrite(a,LOW);
for(j=9;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
}
//显示数字3
void digital_3(void)
{
unsigned char j;
digitalWrite(g,LOW);
digitalWrite(d,LOW);
for(j=5;j<=7;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
digitalWrite(f,HIGH);
digitalWrite(e,HIGH);
}
//显示数字4
void digital_4(void)
{
digitalWrite(c,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
digitalWrite(a,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
}
//显示数字5
void digital_5(void)
{
unsigned char j;
for(j=7;j<=9;j++)
digitalWrite(j,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(dp,HIGH);
digitalWrite(b,HIGH);
digitalWrite(e,HIGH);
}
//显示数字6
void digital_6(void)
{
unsigned char j;
for(j=7;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(c,LOW);
digitalWrite(dp,HIGH);
digitalWrite(b,HIGH);
}
//显示数字7
void digital_7(void)
{
unsigned char j;
for(j=5;j<=7;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
for(j=8;j<=11;j++)
digitalWrite(j,HIGH);
}
//显示数字8
void digital_8(void)
{
unsigned char j;
for(j=5;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
}
void setup()
{
int i;//定义发量
for(i=4;i<=11;i++)
pinMode(i,OUTPUT);//设置4~11引脚为输出模式
}
void loop()
{
while(1)
{
digital_1();//数字1
delay(2000);//延时2s
digital_2();
delay(2000);
digital_3();
delay(2000);
digital_4();
delay(2000);
digital_5();
delay(2000);
digital_6();
delay(2000);
digital_7();
delay(2000);
digital_8();
delay(2000);
}
}

hnyzcj 发表于 2017-10-6 16:39:28

好呀好呀,感谢感谢
页: [1]
查看完整版本: 第十课骰子游戏——数码管实验