关于一些状况的调集,尽可能运用enum而不是#define 来界说。
如:
enum {OFF = 0, ON = 1};
远比
#define OFF 0
#define ON 1
好。
两种写法编译的作用是相同的,可是写程序及看程序的人员来说感觉就不相同了。用enum界说时,能够觉得OFF与ON是一个调集,有相关性(且可削减程序中#define的界说)。但用#define界说时,彻底可以为OFF与ON不相干。特别是在程序中#define界说过多时,查找并了解它的意思都是一个苦楚。(如:uc/os,看见它的一大堆#define都头大,要彻底理解那一堆界说都得花不少时刻)
第二,程序中少用
#if
#ifdef
等条件编译。不符合条件的程序段是不被编译的,都不查看语法过错,当在某些情况下打开了条件开关时,或许一堆过错就呈现了。并且程序并不利于阅览,当读程序时忽然得去查找某东东是否#define真是苦楚。
好了,下面是我的习气
1、I/O口输出电平界说一下,今后如果I/O电平驱动取反,一改就好。
//I/O Port Stutes
enum {OFF = 0, ON = 1};
//Led Stutes
enum {LED_ON = 0, LED_OFF = 1};
eg. LED = LED _ON; //低电平驱动LED亮。
2、I/O口与任何的其它IC接口,I/O口都要界说,不能直接运用I/O口。(便利今后用于其它的使用中)
如93C46:
#define CS93C46 P1_0 //片选信号
#define SK93C46 P1_1 //时钟信号
#define DI93C46 P1_2 //数据输入,相对93C46而言 (即93C46的数据输入)
#define DO93C46 P1_3 //数据输出
如字符型LCD:
#define LCDPORT P0 //lcd数据口
#define RS P1_7 //数据指令挑选。低–ins ; 高–data
#define RW P1_6 //读写挑选。 低–w ; 高–r
#define EN P1_5 //使能。 高到低–使能。
3、键盘口要界说输进口及屏蔽字
如:
#define KEYMASK 0x0f
#define KEYPORT P2
4、串口用中止驱动,要带Buf。
5、取按键的程序及串口的程序编2个,一个为非堵塞式,一个为堵塞式(不按键或不收到数据不回来)。
6、晶振频率要界说
#define FOSC 11059200ul //频率
7、波特律界说
#define BAUD 4800 //波特率4800
#define SMODX 0 //是否倍频 0-NO or 1-YES
#define T1H_VAL (256 – (UINT8)(FOSC * (1<
今后移植便利
9、液晶程序一定要界说长宽
如点阵型:
#define ROW 64
#define CLUM 128
字符型:
#define ROW 4
#define CLUM 20
#define ROW1_ADDR (0x80 + 0) //榜首行地址
#define ROW2_ADDR (ROW1_ADDR + 0x40) //第二行地址
#define ROW3_ADDR (ROW1_ADDR + CLUM) //第三行地址
#define ROW4_ADDR (ROW2_ADDR + CLUM) //第四行地址
然后一切的和液晶地址有关的核算悉数引证这2个量。
换用任何屏直接一改,高层不变
10、驱动层与使用接口层分在不同的文件,移植便利。
如:键盘、LCD、串口等。