赞
踩
IO拓展技术与存储器映射拓展就是把原来用HC138译码器选择位控制LED灯,蜂鸣器,数码管改成了对这几个模块各自分配地址然后直接赋值执行操作。
公式为:
XBYTE[对应地址] = 0x...
给各模块对应地址为:
公式右边是写对各模块的操作,比如让LED灯中的L1亮,其他熄灭,则需要给P0口赋值为0x7f(只有第一位为0),因此公式右边就填0x7f。
注意的是:使用拓展技术时记得写#include “absacc.h” 还有跳帽接到MM模式!!!
思路应该不用多说了,就是按之前学的方法,对应公式进行转换即可。
- #include "stc15f2k60s2.h"
- #include "absacc.h"
-
- code unsigned char SMG_Table[] =
- {
- 0xc0, //0
- 0xf9, //1
- 0xa4, //2
- 0xb0, //3
- 0x99, //4
- 0x92, //5
- 0x82, //6
- 0xf8, //7
- 0x80, //8
- 0x90, //9
- 0x88, //A
- 0x83, //b
- 0xc6, //C
- 0xa1, //d
- 0x86, //E
- 0x8e //F
- };
-
-
-
- void Delay(unsigned int t)
- {
- while(t--);
- }
-
- void Delay(unsigned char t)
- {
- while(t--);
- }
-
- void LED()
- {
- XBYTE[0x8000] = 0x0f;
- Delay(60000);
- Delay(60000);
- Delay(60000);
- XBYTE[0x8000] = 0xff;
- Delay(60000);
- Delay(60000);
- Delay(60000);
- XBYTE[0x8000] = 0xf0;
- Delay(60000);
- Delay(60000);
- Delay(60000);
- XBYTE[0x8000] = 0xff;
- Delay(60000);
- Delay(60000);
- Delay(60000);
-
-
- }
-
- void SMG(unsigned int position, unsigned char content)
- {
- XBYTE[0xc000] = 0x01 << position;
- XBYTE[0xe000] = SMG_Table[content];
- }
-
- void Show_SMG(unsigned int i)
- {
- for(i=0; i<8; i++)
- {
- SMG(i,1);
- Delay(60000);
- Delay(60000);
- Delay(60000);
- }
- XBYTE[0xc000] = 0x00;
- }
-
- void close()
- {
- XBYTE[0xa000] = 0x00;
- XBYTE[0x8000] = 0xff;
- }
-
- void main()
- {
- close();
- while(1)
- {
- LED();
- Show_SMG();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。