11672| 2
|
[Arduino技术课程(高中)] 第十课骰子游戏——数码管实验 |
本帖最后由 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.了解并掌握数码管的引脚结构,在复杂电路连接时,应掌握合理的连线方式方法,确保线路清晰明了。 五、课后反馈本次实验中,有些 学生没有完成此实验的效果。造成实验失败的原因在于接线错误,通过实地查看学生接线,其根本原因在于:数码管各引脚掌握不够。我们在上课的时候给出的数码管引脚结构为下图 而此图并不能够让学生清晰的掌握数码管引脚分布,甚至产生一些错觉,造成连线错误。因此我们在对于数码管引脚的分布结构图,我们建议改为下图 |
你这个代码有些错误我给改过来了以下为改动代码: 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); } } |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed