[C语言]

我的代码简史:楼主从单片机coder到嵌入式programer的简单历程

[复制链接]
楼主: keer_zu
手机看帖
扫描二维码
随时随地手机跟帖
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()
//zkq  2007.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[win_num].MAX_ROW_NUM < 4)
            f = Windows[win_num].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[win_num].Row_num + j),*(Windows[win_num].MENU_char + j),1);
            else               
                    display16x16RL(2*j,1,*(Windows[win_num].Row_num + j),*(Windows[win_num].MENU_char + j),0);
            }
        }
        else if(sel_row<8)
        {
            for(j=0;j<=Windows[win_num].MAX_ROW_NUM - 5;j++)
            {
                if(j==sel_row%4)
                    display16x16RL(2*j,1,*(Windows[win_num].Row_num + j + 4),*(Windows[win_num].MENU_char + j + 4),1);
            else               
                    display16x16RL(2*j,1,*(Windows[win_num].Row_num + j + 4),*(Windows[win_num].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
呵呵,界面设计是个痛苦的活吧。

过后想想还真是痛苦

使用特权

评论回复
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
下一个时代:青铜器时代。
-------模块儿化-------
敬请关注。

恩,我在关注。
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 | 显示全部楼层
学习

使用特权

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

本版积分规则