打印

如何简化C程序

[复制链接]
1241|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhtflsw|  楼主 | 2016-6-23 13:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例: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上想办法。

相关帖子

沙发
cuya| | 2016-6-23 23:09 | 只看该作者
另外,先说明,LCD的段位不是对称的,专门做成底层类似数码管SEG全在同一位置那样驱动也不行。在单纯的C语言上能简化吗?先不要从LCD上想办法。


你最好是把显示做成一个驱动,没有不行的道理。
void display(char, char)

不能做成一个驱动, 4个驱动函数也行:
void Display1(char)
void Display2(char)
...
void Display4(char)

使用特权

评论回复
板凳
xwj| | 2016-6-25 12:36 | 只看该作者
呵呵,楼主不会用数组、循环吗?

不要直接否定哦,说不行那时因为你没有开动脑筋去归纳、汇总。

使用特权

评论回复
地板
muou009| | 2016-7-26 22:35 | 只看该作者
可以写一个函数一个seg一个seg那样扫的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

164

帖子

4

粉丝