keer_zu 发表于 2014-5-18 18:53

//-----------------menu.c 部分函数--------------
//-----------------------------------------函数--------------------------------------------------
void Display_char(unsigned char,unsigned char ,unsigned char *,unsigned char);
void Display_row(unsigned char,unsigned char ,unsigned char ,unsigned char *,unsigned char);
void Display_window(unsigned char,unsigned char);   

//-------------------------------------------------------------------------
//功能:显示16x16汉字
//参数:begneX : 行地址 beginRow:列地址n: 汉字数量
//       s: 显示内容标志寄存器: 是否反显
//调用:display_Lf()    display_Rf()
//zkq2007.06.04
//-------------------------------------------------------------------------
void display16x16RL(unsigned char beginX,unsigned char beginRow,unsigned char n,unsigned char *s,unsigned char 标志寄存器)
{
    unsigned char i;
        if(标志寄存器)
        {
          LCD_Write_ComR(0xb8|beginX);
      LCD_Write_ComR(0x40|0);
                for(i=0;i<64;i++)
                {
                  LCD_Write_DatR(0xff);
                }
      LCD_Write_ComL(0xb8|beginX);
      LCD_Write_ComL(0x40|0);
                for(i=0;i<64;i++)
                {
                  LCD_Write_DatL(0xff);
                }
      LCD_Write_ComR(0xb8|beginX + 1);
      LCD_Write_ComR(0x40|0);
                for(i=0;i<64;i++)
                {
                  LCD_Write_DatR(0xff);
      }
                LCD_Write_ComL(0xb8|beginX + 1);
      LCD_Write_ComL(0x40|0);
                for(i=0;i<64;i++)
                {
                  LCD_Write_DatL(0xff);
      }
        }
        for(i=0;i<n;i++)
        {
          displayrow(i,beginX,beginRow+i,s,标志寄存器);
        }
}

//--------------------------------------------------------------------------------------

void Display_window(unsigned char win_num,unsigned char sel_row)
{

    unsigned char j,f;
        if(Windows.MAX_ROW_NUM < 4)
          f = Windows.MAX_ROW_NUM - 1;
        else f = 3;
        if(sel_row<4)
        {
          for(j=0;j<=f;j++)
          {
                if(j==sel_row)
                    display16x16RL(2*j,1,*(Windows.Row_num + j),*(Windows.MENU_char + j),1);
            else               
                    display16x16RL(2*j,1,*(Windows.Row_num + j),*(Windows.MENU_char + j),0);
          }
        }
        else if(sel_row<8)
        {
          for(j=0;j<=Windows.MAX_ROW_NUM - 5;j++)
          {
                if(j==sel_row%4)
                    display16x16RL(2*j,1,*(Windows.Row_num + j + 4),*(Windows.MENU_char + j + 4),1);
            else               
                    display16x16RL(2*j,1,*(Windows.Row_num + j + 4),*(Windows.MENU_char + j + 4),0);
          }       
        }
}


keer_zu 发表于 2014-5-18 19:00

不到一年的时间,是不是有所长进呢?
为什么呢?
1. 06年年底研究了一下邵贝贝翻译的那本《嵌入式实时操作系统uCOS-II》
   * 对操作系统有了一点了解,包括多任务,任务间的同步和通信、优先级,内存管理,移植
   等。
   * 对数据结构的使用,对指针的使用。
   * 代码风格等。
2.我的boss老张的工作热情深深感染了我,他是我的boss也是我的朋友,他为我提供了一个
   使用ucos的平台。就在我昨天写帖子的时候,又听他讲linux下基于QT的组态软件的使用
   效果,那是他最近做的一款PLC的嵌入式平台的一部分。有这样的朋友我很开心。哈哈
这个小菜单就是老张当年专注于电力抄表项目的时候我给他做的。

3.当然,06年后半年我不少泡郑州大学新校区的图书馆。。。。《深入理解linux内核》也瞟过两眼,看着很困难。蹭过信息工程学院的《数据结构》收获很大,里面讲的那个循环队列至今都在使用中。那本道格拉斯的《嵌入式与实时系统开发》当时候看着就像天书。

红金龙吸味 发表于 2014-5-18 21:23

呵呵,界面设计是个痛苦的活吧。

P10810476 发表于 2014-5-18 21:27

牛叉

P10810476 发表于 2014-5-18 21:27

bBBBBB

P10810476 发表于 2014-5-18 21:28

没分只好灌水了 呵呵

keer_zu 发表于 2014-5-18 22:03

大师就是大师,Booch的总结太到位了,他简直就是在讲我本人啊,我又中招了。再回头看一下第二代和第三代前期的程序设计语言的特点。这次我唯一没有做到的是模块儿化,这个时候我还没有将C的特点发挥出来。继续对上面的代码做些分析吧。

如果从菜单的实现角度讲,这是一个很差劲的设计。主要是没有对显示内容本身做进一步的抽象,没有类似按钮,文本框,复选框等,窗口只有几行文字,被选中的行反显。因为没有真正意义上的“窗体”的概念,所以也没有真正意义上同窗口绑定的“事件”的概念,三个按键:上翻键,下翻键用来移动光标,确认键用来进入该项关联的窗口,关联关系被上面头文件里面的全局数组和全局结构体数组定义。

菜单本身如果改进的话,可以通过上面提到的做进一步抽象的方法。从窗口和窗口的组成元素(文本框,按钮,复选框等等)的独立实现上努力,再加上事件。

单单从程序设计的角度看:
1. 结构上,最主要的逻辑关系还是通过全局变量之间的组织关系来实现的。
2. 可读性很差,窗口内容很不直观,因为反映窗口(或窗口组成部分)属性的内容分散在各个
   数组里面。
3. 可扩展性差,添加或者修改一个窗口(或窗口组成部分)需要更改很多地方。
4. 没有一个统一的事件处理机制,按键的处理结果也是通过上面数组的关系反映的。

keer_zu 发表于 2014-5-18 22:08

红金龙吸味 发表于 2014-5-18 21:23 static/image/common/back.gif
呵呵,界面设计是个痛苦的活吧。

过后想想还真是痛苦

keer_zu 发表于 2014-5-18 22:10

下一个时代:青铜器时代。
-------模块儿化-------
敬请关注。

intermec 发表于 2014-5-19 00:50

菜鸟表示例子有点复杂,看不明白阿,,努力学习中`~~~

dong_abc 发表于 2014-5-19 01:31

keer_zu 发表于 2014-5-18 22:10 static/image/common/back.gif
下一个时代:青铜器时代。
-------模块儿化-------
敬请关注。

恩,我在关注。
21ic 近两年 有深度的帖子很少了!

weifengdq 发表于 2014-5-19 08:26

不管怎样,还在郑大上学的先给你支持一个

renqinglei 发表于 2014-5-19 08:31

期待继续上传啊

yayasoso 发表于 2014-5-19 10:47

楼主加油,楼主继续啊!!

frlop 发表于 2014-5-19 12:30

mark

corset 发表于 2014-5-19 13:02

总结的非常好,楼主赶紧写。我们等着学习!

z755924843 发表于 2014-5-19 14:25

楼主好人 ,愿意把多年的经验拿出来与大家分享

橙子0_0 发表于 2014-5-19 17:30

围观学习中

tee. 发表于 2014-5-20 11:41

后排。

lsh13726296587 发表于 2014-5-20 13:14

学习
页: 1 2 [3] 4 5 6 7
查看完整版本: 我的代码简史:楼主从单片机coder到嵌入式programer的简单历程