当前位置:   article > 正文

No10 蓝桥杯单片机实践之IO拓展技术与存储器映射拓展()

No10 蓝桥杯单片机实践之IO拓展技术与存储器映射拓展()

1 功能回顾

IO拓展技术与存储器映射拓展就是把原来用HC138译码器选择位控制LED灯,蜂鸣器,数码管改成了对这几个模块各自分配地址然后直接赋值执行操作。

公式为:

XBYTE[对应地址] = 0x...

给各模块对应地址为:

公式右边是写对各模块的操作,比如让LED灯中的L1亮,其他熄灭,则需要给P0口赋值为0x7f(只有第一位为0),因此公式右边就填0x7f。

注意的是:使用拓展技术时记得写#include  “absacc.h” 还有跳帽接到MM模式!!!

2 实践

2.1 任务

2.2思路

思路应该不用多说了,就是按之前学的方法,对应公式进行转换即可。

2.3 完整代码

  1. #include "stc15f2k60s2.h"
  2. #include "absacc.h"
  3. code unsigned char SMG_Table[] =
  4. {
  5. 0xc0, //0
  6. 0xf9, //1
  7. 0xa4, //2
  8. 0xb0, //3
  9. 0x99, //4
  10. 0x92, //5
  11. 0x82, //6
  12. 0xf8, //7
  13. 0x80, //8
  14. 0x90, //9
  15. 0x88, //A
  16. 0x83, //b
  17. 0xc6, //C
  18. 0xa1, //d
  19. 0x86, //E
  20. 0x8e //F
  21. };
  22. void Delay(unsigned int t)
  23. {
  24. while(t--);
  25. }
  26. void Delay(unsigned char t)
  27. {
  28. while(t--);
  29. }
  30. void LED()
  31. {
  32. XBYTE[0x8000] = 0x0f;
  33. Delay(60000);
  34. Delay(60000);
  35. Delay(60000);
  36. XBYTE[0x8000] = 0xff;
  37. Delay(60000);
  38. Delay(60000);
  39. Delay(60000);
  40. XBYTE[0x8000] = 0xf0;
  41. Delay(60000);
  42. Delay(60000);
  43. Delay(60000);
  44. XBYTE[0x8000] = 0xff;
  45. Delay(60000);
  46. Delay(60000);
  47. Delay(60000);
  48. }
  49. void SMG(unsigned int position, unsigned char content)
  50. {
  51. XBYTE[0xc000] = 0x01 << position;
  52. XBYTE[0xe000] = SMG_Table[content];
  53. }
  54. void Show_SMG(unsigned int i)
  55. {
  56. for(i=0; i<8; i++)
  57. {
  58. SMG(i,1);
  59. Delay(60000);
  60. Delay(60000);
  61. Delay(60000);
  62. }
  63. XBYTE[0xc000] = 0x00;
  64. }
  65. void close()
  66. {
  67. XBYTE[0xa000] = 0x00;
  68. XBYTE[0x8000] = 0xff;
  69. }
  70. void main()
  71. {
  72. close();
  73. while(1)
  74. {
  75. LED();
  76. Show_SMG();
  77. }
  78. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/305110
推荐阅读
相关标签
  

闽ICP备14008679号