• 【单片机】实验:数码管显示实验


    STC89C5xRC

    1. #include
    2. unsigned char value[22] ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','P','U','T','Y','L','H'};//可显示内容
    3. unsigned char led[22] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x3E,0x31,0x6E,0x38,0x76}; //显示内容对应字段码
    4. unsigned char where[] = {0,1,2,3,4,5,6,7};//灯的位置
    5. // 延时函数,delay_time是延时的毫秒数
    6. void delay(unsigned int delay_time) {
    7. unsigned int i, j;
    8. for (i = 0; i < delay_time; i++) {
    9. for (j = 0; j < 1000; j++) {};
    10. }
    11. }
    12. //输入内容,获得索引
    13. int LED_value_index(char content){
    14. switch (content) {
    15. case '0': return 0;
    16. case '1': return 1;
    17. case '2': return 2;
    18. case '3': return 3;
    19. case '4': return 4;
    20. case '5': return 5;
    21. case '6': return 6;
    22. case '7': return 7;
    23. case '8': return 8;
    24. case '9': return 9;
    25. case 'A': return 10;
    26. case 'B': return 11;
    27. case 'C': return 12;
    28. case 'D': return 13;
    29. case 'E': return 14;
    30. case 'F': return 15;
    31. case 'P': return 16;
    32. case 'U': return 17;
    33. case 'T': return 18;
    34. case 'Y': return 19;
    35. case 'L': return 20;
    36. case 'H': return 21;
    37. default: return 0; // 如果未找到,返回0
    38. };
    39. }
    40. //根据索引,获得字段码
    41. char LED_value_code(int index){
    42. return led[index];
    43. }
    44. //整合_实现输入内容,获得字段码
    45. char LED_value(char content){
    46. return LED_value_code(LED_value_index(content));
    47. }
    48. //输入要显示的位置:0-7 返回位置码
    49. char LED_where(int w){
    50. return where[w];
    51. }
    52. // 依次显示0-7
    53. void result_light_0_to_7(){
    54. int i;
    55. for(i = 0;i<8;i++){
    56. P2 = led[i];//P2 控制LED显示的内容 unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
    57. P1 = where[i] ;//P1 控制要显示内容的LED的位置
    58. delay(10);
    59. }
    60. }
    61. void my_birth_day() {
    62. int dy = 1000;
    63. P2 = LED_value('2');
    64. P1 = LED_where(7);
    65. delay(dy);
    66. P2 = LED_value('0');
    67. P1 = LED_where(6);
    68. delay(dy);
    69. P2 = LED_value('0');
    70. P1 = LED_where(5);
    71. delay(dy);
    72. P2 = LED_value('1');
    73. P1 = LED_where(4);
    74. delay(dy);
    75. P2 = LED_value('1');
    76. P1 = LED_where(3);
    77. delay(dy);
    78. P2 = LED_value('0');
    79. P1 = LED_where(2);
    80. delay(dy);
    81. P2 = LED_value('2');
    82. P1 = LED_where(1);
    83. delay(dy);
    84. P2 = LED_value('4');
    85. P1 = LED_where(0);
    86. delay(dy);
    87. P2 = LED_value('H');
    88. P1 = LED_where(4);
    89. delay(dy);
    90. P2 = LED_value('A');
    91. P1 = LED_where(3);
    92. delay(dy);
    93. P2 = LED_value('A');
    94. P1 = LED_where(2);
    95. delay(dy);
    96. P2 = LED_value('P');
    97. P1 = LED_where(1);
    98. delay(dy);
    99. P2 = LED_value('Y');
    100. P1 = LED_where(0);
    101. delay(dy);
    102. }
    103. void main() {
    104. while(1) {
    105. my_birth_day() ;
    106. //result_light_0_to_7();
    107. }
    108. }

    相关视频:
    [单片机]实验:数码管显示器使用https://www.bilibili.com/video/BV12C4y1j7vW/

    [单片机]如何在实体设备上运行自己编写的代码https://www.bilibili.com/video/BV16b4y1M76t

    由于实验只能在实验室进行,课后我没法进行实验,所以后文采用了仿真的方式来模拟实验。

    仿真实验

    原理图

    image

    image

    代码如下

    1. #include
    2. //需要复制代码的话 请去 博客园(https://cnblogs.com/mllt)获取
    3. /*
    4. 博客园:萌狼蓝天
    5. CSDN:萌狼蓝天 (文章都是从博客园自动同步过去的,可能会存在格式问题,建议去博客园查看)
    6. 哔哩哔哩:萌狼蓝天 (视频首发平台 | 可以私信)
    7. 抖音:弃文从理萌狼蓝天 (经常不在线)
    8. 快手:萌狼蓝天 (经常不在线)
    9. 小红书:弃文从理萌狼蓝天 (经常不在线)
    10. */
    11. //可以显示的字符
    12. unsigned char value[22] ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','P','U','T','Y','L','H'};
    13. //可以显示的字符对应的字段码
    14. unsigned char led[22] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x3E,0x31,0x6E,0x38,0x76}; //灯的内容
    15. unsigned char where[] = {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE};//灯的位置
    16. //unsigned char where[] = {0,1,2,3,4,5,6,7};//灯的位置
    17. // 延时函数
    18. void delay(unsigned int delay_time) {
    19. unsigned int i, j;
    20. for (i = 0; i < delay_time; i++) {
    21. for (j = 0; j < 1000; j++) {};
    22. }
    23. }
    24. //输入内容,获得索引
    25. int LED_value_index(char content){
    26. switch (content) {
    27. case '0': return 0;
    28. case '1': return 1;
    29. case '2': return 2;
    30. case '3': return 3;
    31. case '4': return 4;
    32. case '5': return 5;
    33. case '6': return 6;
    34. case '7': return 7;
    35. case '8': return 8;
    36. case '9': return 9;
    37. case 'A': return 10;
    38. case 'B': return 11;
    39. case 'C': return 12;
    40. case 'D': return 13;
    41. case 'E': return 14;
    42. case 'F': return 15;
    43. case 'P': return 16;
    44. case 'U': return 17;
    45. case 'T': return 18;
    46. case 'Y': return 19;
    47. case 'L': return 20;
    48. case 'H': return 21;
    49. default: return 0; // 如果未找到,返回0
    50. };
    51. }
    52. //根据索引,获得字段码
    53. char LED_value_code(int index){
    54. return led[index];
    55. }
    56. //整合_实现输入内容,获得字段码
    57. char LED_value(char content){
    58. return LED_value_code(LED_value_index(content));
    59. }
    60. //输入要显示的位置:0-7 返回位置码
    61. char LED_where(int w){
    62. return where[w];
    63. }
    64. //显示数字0-7
    65. void result_light_0_to_7(){
    66. int i;
    67. for(i = 0;i<8;i++){
    68. P2 = led[i];//P2 控制LED显示的内容
    69. P3 = where[i] ;//P3 控制要显示内容的LED的位置
    70. delay(10);
    71. }
    72. }
    73. //每个位置都把所有字符显示一遍
    74. void result_every_where(){
    75. int i,j;
    76. for(i = 0;i<8;i++){
    77. for(j=0;j<22;j++){
    78. P2 = LED_value_code(j);
    79. P3 = LED_where(i);
    80. delay(10);
    81. }
    82. }
    83. }
    84. //指定位置显示指定内容
    85. void my_birth_day() {
    86. int dy = 50;//方便调整延时
    87. P2 = LED_value('2');//指定内容
    88. P3 = LED_where(7);//指定位置
    89. delay(dy);//延时,太快了的话会出现显示的异常,所以不宜太快了。
    90. P2 = LED_value('0');
    91. P3 = LED_where(6);
    92. delay(dy);
    93. P2 = LED_value('0');
    94. P3 = LED_where(5);
    95. delay(dy);
    96. P2 = LED_value('1');
    97. P3 = LED_where(4);
    98. delay(dy);
    99. P2 = LED_value('1');
    100. P3 = LED_where(3);
    101. delay(dy);
    102. P2 = LED_value('2');
    103. P3 = LED_where(2);
    104. delay(dy);
    105. P2 = LED_value('0');
    106. P3 = LED_where(1);
    107. delay(dy);
    108. P2 = LED_value('8');
    109. P3 = LED_where(0);
    110. delay(dy);
    111. P2 = LED_value('H');
    112. P3 = LED_where(4);
    113. delay(dy);
    114. P2 = LED_value('A');
    115. P3 = LED_where(3);
    116. delay(dy);
    117. P2 = LED_value('P');
    118. P3 = LED_where(2);
    119. delay(dy);
    120. P2 = LED_value('P');
    121. P3 = LED_where(1);
    122. delay(dy);
    123. P2 = LED_value('Y');
    124. P3 = LED_where(0);
    125. delay(dy);
    126. }
    127. void main() {
    128. while(1) {
    129. my_birth_day() ;
    130. delay(100);
    131. result_light_0_to_7();
    132. delay(100);
    133. result_every_where();
    134. delay(100);
    135. }
    136. }

    [单片机]数码管显示器仿真效果展示:https://www.bilibili.com/video/BV12u411F7cL/

  • 相关阅读:
    4种方法解除ZIP压缩文件的密码保护
    Spring Framework 核心容器详解:Core、Beans、Context 和 Expression Language 模块
    【Linux】CentOS 虚拟机
    如何搭建高效又稳定的数据填报平台?_光点科技
    5 分钟学会ECharts如何使用
    ”邻接表建图+图的遍历“教程(C++)
    MySQL数据库所用到的八十八张表(七到十二)
    C++ move()实例讲解
    输出菱形的代码
    Jenkins自动化部署
  • 原文地址:https://blog.csdn.net/ks2686/article/details/134509576