亚博智能论坛  
  
查看: 514|回复: 0

课程15--数码管

[复制链接]
  • TA的每日心情
    慵懒
    2017-7-29 14:25
  • 121

    主题

    161

    帖子

    576

    积分

    超级版主

    Rank: 9Rank: 9Rank: 9

    积分
    576
    发表于 2017-6-2 12:09:07 | 显示全部楼层 |阅读模式
    数码管
             数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示),本实验所使用的是八段数码管。按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM 接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。(注意和普通二极管使用一样需要限流)
             本实验用的是共阴极的数码管,共阴数码管在应用时应将公共极接到GND,当某一字段发光二极管的阳极为低电平时,相应字段就点熄灭。当某一字段的阳极为高电平时,相应字段就点亮。介绍完原理,我们开始准备实验用元器件:


      
    八段数码管
      
    1
    220Ω直插电阻
    8
    面包板
    1
    面包板跳线
    1

    LZSF])PNHJ(QL[P$ST`JS.png
    按照数码管共有七段显示数字的段,还有一个显示小数点的段。当让数码管显示数字时,只要将相应的段点亮即可。例如:让数码管显示数字1,则将bc 段点亮即可。将每个数字写成一个子程序。在主程序中每隔1s 显示一个数字,让数码管循环显示19数字。每一个数字显示的时间由延时时间来决定,时间设置的大些,显示的时间就长些,时间设置的小些,显示的时间就短。

    UKH{@8_KE%{K(2H@Z_{44GL.png

    按照下图链接好电路后,就可以开始编写程序了。

    <embedsrc='http://player.youku.com/player.php/sid/XMjc4MjgwODAyOA==/v.swf'allowFullScreen='true' quality='high' width='480' height='400' align='middle'allowScriptAccess='always'type='application/x-shockwave-flash'></embed>
    1%(V1LW]}FT)7FGSADU_3HN.png
    NT08WZS6`CPWD(}%EJK]CEP.png

    参考例程
    1. //设置控制各段的数字IO 脚
    2. int a=7;//定义数字接口7 连接a 段数码管
    3. int b=6;// 定义数字接口6 连接b 段数码管
    4. int c=5;// 定义数字接口5 连接c 段数码管
    5. int d=11;// 定义数字接口11 连接d 段数码管
    6. int e=10;// 定义数字接口10 连接e 段数码管
    7. int f=8;// 定义数字接口8 连接f 段数码管
    8. int g=9;// 定义数字接口9 连接g 段数码管
    9. int dp=4;// 定义数字接口4 连接dp 段数码管
    10. void digital_1(void) //显示数字1
    11. {
    12. unsigned char j;
    13. digitalWrite(c,HIGH);//给数字接口5 引脚高电平,点亮c 段
    14. digitalWrite(b,HIGH);//点亮b 段
    15. for(j=7;j<=11;j++)//熄灭其余段
    16. digitalWrite(j,LOW);
    17. digitalWrite(dp,LOW);//熄灭小数点DP 段
    18. }
    19. void digital_2(void) //显示数字2
    20. {
    21. unsigned char j;
    22. digitalWrite(b,HIGH);
    23. digitalWrite(a,HIGH);
    24. for(j=9;j<=11;j++)
    25. digitalWrite(j,HIGH);
    26. digitalWrite(dp,LOW);
    27. digitalWrite(c,LOW);
    28. digitalWrite(f,LOW);
    29. }
    30. void digital_3(void) //显示数字3
    31. {
    32. unsigned char j;
    33. digitalWrite(g,HIGH);
    34. digitalWrite(d,HIGH);
    35. for(j=5;j<=7;j++)
    36. digitalWrite(j,HIGH);
    37. digitalWrite(dp,LOW);
    38. digitalWrite(f,LOW);
    39. digitalWrite(e,LOW);
    40. }
    41. void digital_4(void) //显示数字4
    42. {
    43. digitalWrite(c,HIGH);
    44. digitalWrite(b,HIGH);
    45. digitalWrite(f,HIGH);
    46. digitalWrite(g,HIGH);
    47. digitalWrite(dp,LOW);
    48. digitalWrite(a,LOW);
    49. digitalWrite(e,LOW);
    50. digitalWrite(d,LOW);
    51. }
    52. void digital_5(void) //显示数字5
    53. {
    54. unsigned char j;
    55. for(j=7;j<=9;j++)
    56. digitalWrite(j,HIGH);
    57. digitalWrite(c,HIGH);
    58. digitalWrite(d,HIGH);
    59. digitalWrite(dp,LOW);
    60. digitalWrite(b,LOW);
    61. digitalWrite(e,LOW);
    62. }
    63. void digital_6(void) //显示数字6
    64. {
    65. unsigned char j;
    66. for(j=7;j<=11;j++)
    67. digitalWrite(j,HIGH);
    68. digitalWrite(c,HIGH);
    69. digitalWrite(dp,LOW);
    70. digitalWrite(b,LOW);
    71. }
    72. void digital_7(void) //显示数字7
    73. {
    74. unsigned char j;
    75. for(j=5;j<=7;j++)
    76. digitalWrite(j,HIGH);
    77. digitalWrite(dp,LOW);
    78. for(j=8;j<=11;j++)
    79. digitalWrite(j,LOW);
    80. }
    81. void digital_8(void) //显示数字8
    82. {
    83. unsigned char j;
    84. for(j=5;j<=11;j++)
    85. digitalWrite(j,HIGH);
    86. digitalWrite(dp,LOW);
    87. }
    88. //直接复制方式,简单,易理解,对应于数码管的段
    89. void digital_9(void) //9
    90. {
    91. digitalWrite(a,HIGH);
    92. digitalWrite(b,HIGH);
    93. digitalWrite(c,HIGH);
    94. digitalWrite(d,HIGH);
    95. digitalWrite(e,LOW);//9的时候,e段不亮,其余段均点亮
    96. digitalWrite(f,HIGH);
    97. digitalWrite(g,HIGH);
    98. digitalWrite(dp,HIGH);//显示小数点
    99. }
    100. void setup()
    101. {
    102. int i;//定义变量
    103. for(i=4;i<=11;i++)
    104. pinMode(i,OUTPUT);//设置4~11 引脚为输出模式
    105. }
    106. void loop()
    107. {
    108. while(1){
    109. digital_1();//显示数字1
    110. delay(1000);//延时1s
    111. digital_2();//显示数字2
    112. delay(1000); //延时1s
    113. digital_3();//显示数字3
    114. delay(1000); //延时1s
    115. digital_4();//显示数字4
    116. delay(1000); //延时1s
    117. digital_5();//显示数字5
    118. delay(1000); //延时1s
    119. digital_6();//显示数字6
    120. delay(1000); //延时1s
    121. digital_7();//显示数字7
    122. delay(1000); //延时1s
    123. digital_8();//显示数字8
    124. delay(1000); //延时1s
    125. digital_9();//显示数字9
    126. delay(1000); //延时1s
    127. }}
    复制代码




    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表