举一个例子:以前的门禁是横版本的,现在做出竖版的,如图。
那么软件获得按键的影射关系需要修改一下。
现在的代码 横的 自己想一想竖的
case 0x10:key = KEY_ENT; break;-----KEY_7
case 0x100: key = KEY_0; break; KEY_4
case 0x08: key = KEY_DEL; break; KEY_1
case 0x20: key = KEY_9; break; KEY_8
case 0x200: key = KEY_8; break; KEY_5
case 0x4000: key = KEY_7; break; KEY_2
case 0x40: key = KEY_6; break; KEY_9
case 0x400: key = KEY_5; break; KEY_6
case 0x2000: key = KEY_4; break; KEY_3
case 0x80: key = KEY_3; break; KEY_DEL
case 0x800: key =KEY_2; break; KEY_0
case 0x1000: key = KEY_1; break; ---KEY_ENT
定义一个变量吧:TOUCHV 1是树立的 0是横的
横的 竖的
case 0x10: key = TOUCHV? KEY_7:KEY_ENT; break;
case 0x100: key = TOUCHV? KEY_4:KEY_0; break;
case 0x08: key = TOUCHV? KEY_1:KEY_DEL; break;
case 0x20: key = TOUCHV? KEY_8:KEY_9; break;
case 0x200: key = TOUCHV? KEY_5:KEY_8; break;
case 0x4000: key = TOUCHV? KEY_2:KEY_7; break;
case 0x40: key = TOUCHV? KEY_9:KEY_6; break;
case 0x400: key = TOUCHV? KEY_6:KEY_5; break;
case 0x2000: key = TOUCHV? KEY_3:KEY_4; break;
case 0x80: key = TOUCHV? KEY_DEL:KEY_3; break;
case 0x800: key = TOUCHV? KEY_0: KEY_2; break;
case 0x1000: key = TOUCHV? KEY_ENT:KEY_1; break;
现在问题:我们新来了一个变量。如何设计呢?
埃士的做法是:软件做宏开关,不同的宏开关注定走了不同的路子。同一份工程,需要依据不同的产品修改宏开关。
特斯联的做法是:软件不做宏开关,这个变量的值通过硬件去获得,当然埃士也有啦,拨码开关,找一个管脚,ON的是1,OFF是0,特斯联的高级在于做到了ADC,不是0 1了 通过ADC判断模块。上电跑起来的时候先去确定这个TOUCHV
现在我该怎么做呢?
开会说了一下,大家非常喜欢宏开关。
操作:
1修改代码
2增加变量
http://www.stmcu.org/module/forum/thread-616810-1-1.html
/*
* f8wConfig.cfg
*
* Compiler command-line options used to define a terminus device.
* To move an option from here to the project file, comment out or delete the
* option from this file and enter it into the "Define Symbols" box under the
* Preprocessor tab of the C/C++ Compiler Project Options. New user defined
* options may be added to this file, as necessary.
*
* Each macro is prefixed with '-D'. The entries are to be constructed as if
* they are to be on the compiler command line invocation (which they are).
*
* NOTE: 设备属性及固定配置选项
*
*/
/*
* 全局串口调试开关
*/
-DDEBUG_ENABLE=1
-DTOUCHV=1