例:LCD上有四个8,即四个DIG要写程序显示0-9,先用DEFINE宏定义定义好每一个SEG怎么显示0-9,那么就有四十个DEFINE。怎么简化程序,貌似宏定义不能像数组那样【0】。【1】……【9】
如:
#define LCD_DIG1_DisP_0() {……}
……
#define LCD_DIG1_DisP_9() {……}
#define LCD_DIG2_DisP_0() {……}
……
#define LCD_DIG2_DisP_9() {……}
#define LCD_DIG3_DisP_0() {……}
……
#define LCD_DIG3_DisP_9() {……}
#define LCD_DIG4_DisP_0() {……}
……
#define LCD_DIG4_DisP_9() {……}
调用上
void Disp_Dig1(unsigned char Num)//转化为单个数字在LCD显示
{
switch(Num)
{
case 0:LCD_DIG1_DisP_0() break;
case 1:LCD_DIG1_DisP_1() break;
case 2:LCD_DIG1_DisP_2() break;
case 3:LCD_DIG1_DisP_3() break;
case 4:LCD_DIG1_DisP_4() break;
case 5:LCD_DIG1_DisP_5() break;
case 6:LCD_DIG1_DisP_6() break;
case 7:LCD_DIG1_DisP_7() break;
case 8:LCD_DIG1_DisP_8() break;
case 9:LCD_DIG1_DisP_9() break;
default:break;
}
}
void Disp_Dig2(unsigned char Num)//转化为单个数字在LCD显示
{
switch(Num)
{
case 0:LCD_DIG2_DisP_0() break;
case 1:LCD_DIG2_DisP_1() break;
case 2:LCD_DIG2_DisP_2() break;
case 3:LCD_DIG2_DisP_3() break;
case 4:LCD_DIG2_DisP_4() break;
case 5:LCD_DIG2_DisP_5() break;
case 6:LCD_DIG2_DisP_6() break;
case 7:LCD_DIG2_DisP_7() break;
case 8:LCD_DIG2_DisP_8() break;
case 9:LCD_DIG2_DisP_9() break;
default:break;
}
}
……
调用直接Disp_Dig1(1);Disp_Dig1(2);等等。。
不过如果大量的话,这样很麻烦。如何从C语言本身上简化?
另外,先说明,LCD的段位不是对称的,专门做成底层类似数码管SEG全在同一位置那样驱动也不行。在单纯的C语言上能简化吗?先不要从LCD上想办法。
|