打印

問一個C語言的問題

[复制链接]
1747|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
action99|  楼主 | 2007-11-8 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我這個程序是驅動OLED顯示的,我覺得程序好復雜,,應該去簡化一下,比喻:display_0_l[0]; 我是用到數組,因為每個CASE  裡 面的程序就隻有BANK ,LINE 和display_0_l[0];   這幾個變量,有沒有方法把數組這個數做成“地址變量“在循環中來調用。不要一個一個的寫,這樣程序量會好大。。請高手指點

void   lcd_display(unsigned char lcd_char){
  unsigned char i,j,area_cnt,bank_buff,line_buff;

  bank_buff=bank;line_buff=line;
  switch(lcd_char){
    case 0x00:
    area_cnt=display_0_l[0];   //0
      lcd_set();   
      lcd_start_data();
      for(j=1;j<area_cnt;j++){
        send_data=display_0_l[j];
        send_lcd_data();
      }
    lcd_stop();

    bank--;line=line_buff;
    lcd_set();   
    lcd_start_data();
      for(j=1;j<area_cnt;j++){
        send_data=display_0_h[j];
        send_lcd_data();
      }
    lcd_stop();
    break;
   
    case 0x01:              //1
    area_cnt=display_1_l[0];
      lcd_set();   
      lcd_start_data();
      for(j=1;j<area_cnt;j++){
        send_data=display_1_l[j];
        send_lcd_data();
      }
    lcd_stop();
    bank--;line=line_buff;
    lcd_set();   
    lcd_start_data();
      for(j=1;j<area_cnt;j++){
        send_data=display_1_h[j];
        send_lcd_data();
      }
    lcd_stop();
    break;

...
..
..
下面還有。。。

相关帖子

沙发
dld2| | 2007-11-8 14:01 | 只看该作者

指针的数组

定义一个指针数组
unsigned char *cntList[] = 
{
    display_0_l,
    display_1_l,
    ....
}

然后在switch中的:
     area_cnt=display_0_l[0];
可以变成:
    area_cnt=cntList[lcd_char][0];   

使用特权

评论回复
板凳
action99|  楼主 | 2007-11-8 15:16 | 只看该作者

這種方法我試過了,不行,總是會出錯。

這種方法我試過了,不行,總是會出錯。display_0_l在數組裡一定要是一個常量。不然合出錯。。

使用特权

评论回复
地板
dld2| | 2007-11-8 15:21 | 只看该作者

Re:

如果display_0_l是静态分配的,也就是在链接时就确认地址的,就不会有错啊。
你说的出错是怎样的情况呢,是编译出错还是运行时出错?

使用特权

评论回复
5
xwj| | 2007-11-8 15:28 | 只看该作者

呵呵,要学会灵活使用数组、指针

建议LZ自己去看书上的数组、指针那一节,然后自己慢慢想!
等你想通了的话,你编程的水平就可以突飞猛进一大截了!


呵呵,不是开玩笑的哦。

使用特权

评论回复
6
action99|  楼主 | 2007-11-8 16:34 | 只看该作者

好感謝高手的指點。小弟會努力學習。。。謝謝

使用特权

评论回复
7
赤铸| | 2007-11-8 23:06 | 只看该作者

display_0_l 是动态分配的也可以

这个问题的实质就是实现“二维数组”
为什么不直接定义个二维数组,然后整个动态分配?

如果有其它限制,也可以动态分配每个display_0_l,display_1_l……,然后用指针数组,这实质上也是“二维数组”

2楼的用了初始化,所以编译不通过。只能逐个赋值,初始化必须用常量

使用特权

评论回复
8
dld2| | 2007-11-9 09:46 | 只看该作者

呵呵

我用ARM的编译器,拿静态变量的指针来初始化指针数组是可以的。
反正不能直接初始化,就在程序里初始化。

使用特权

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

本版积分规则

87

主题

189

帖子

2

粉丝