Reader's Digest

Digest your Internet

Archive for the 'Programming Area' Category

“Hello World!”的十个问题

我觉得,基本上可以说每个程序员都很熟悉“Hello World!”程序。依照惯例,它是学习编程语言、编译并运行你的首个程序的一种快速方法。然而,除此之外,它的价值不大。下面是我认为Hello World的十个问题。 我觉得,基本上可以说每个程序员都很熟悉“Hello World!”程序。依照惯例,它是学习编程语言、编译并运行你的首个程序的一种快速方法。然而,除此之外,它的价值不大。下面是我认为Hello World的十个问题。 10. 为什么是“Hello World”?为什么不叫“Hello Dave”或者“It Works!”?(Dave就是《2011太空漫游》中的HAL 9000) 我知道这个问题有点夸张。“Hello World”这种说法从何而来呢?除你之外,最后一次有人运行你的程序是什么时候?也许用“Hello <输入你的名字>”更合理些。 9. 它只适用于一件事情”? 我不是在发表“Hello World”一无是处的言论。然而,他们唯一擅长的就是合理性检查。 “Hello World”并不能帮你学习任何编程语言,它能做的只是帮你写一个能编译和运行的简单程序。 它可以帮助你检查其合理性,然后你便可以告诉你自己,“我成功了!” 8. 既不给力又不好玩 随着游戏中精细图形及互联网交互性的发展,几乎没有人再对那些在屏幕上输出一些字的应用程序感兴趣。 就像刚才说的那样,写一个“Hello World!”程序,除了你自己之外,不会给任何人留下印象。此外,它也不可能是你学习编程的动力。 7. 它不切实际 你最后一次编写仅要求将字符串显示到标准输出的程序是什么时候?有人可能会说,现在很少有程序不包含图形用户界面——不管是网页、窗口界面,或者甚至是对文件、数据库的操作。可能它在学术界很实用,在学术界可以始终如一地让程序显示运算或者数值,但专业领域并非如此。 6. 没有交互性 “Hello Word!”这个例子,除了需要终端用户验证“HelloWorld!”是否显示在屏幕上之外,不依赖用户做任何其它操作。它没有要求用户输入用户名、退 出程序或重新运行程序之类的交互。关于终端用户和程序之间如何进行交互,“Hello Word!”并没有涉及相关内容。 5. 没有逻辑和运算 计算处理非常依赖于逻辑结构(如:当这个条件为真时,打印这条语句)和运算。大多数程序的编写将运用一些标准下的决策逻辑。甚至计算机的基本组成部分(机器代码)也代表一种逻辑表达式:1=真,0=假。 4. 在不同语言下,太过相似 如果你观察一下不同语言编写的“Hello World!”程序,你会发现它们之间非常相似。 一旦你精通于用一种语言写出 “Hello World!”程序,那么你也差不多能用其他语言熟练地编写这个程序。 3. 只使用一个关键字 如果你看过各种Hello World范例,你会发现他们的共同点就是都只使用一个关键字。 一门编程语言有多少关键字:数百?上千?在编程语言的学习中,只学一个关键字是微乎其微的一步。   2. 忽略了变量和常量   […]

Read the rest of this entry »

真正的流水灯(渐暗渐明,脉宽变化)

(1)第1,3,5,7个灯半亮,其余的全亮。 (2)第1个亮1/8,第2个亮2/8,第3个亮3/8,第4个亮4/8,第5个亮5/8,第6个亮6/8,第7个亮7/8,第8个全亮。 (3)来点小难的,所有的灯逐渐从暗到全亮,再由全亮到暗。 (4)最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。这才是真正的流水灯。 思路: (1)第1,3,5,7个灯半亮,其余的全亮。 把显示时间分成2个时间段,半亮的灯只在一个时间段内点亮,另一个时间段关闭 (2)第1个亮1/8,第2个亮2/8,第3个亮3/8,第4个亮4/8,第5个亮5/8,第6个亮6/8,第7个亮7/8,第8个全亮。 和第一个类似,只是分成了8个时间段(多分点也无所谓),当然8个时间段加起来的时间最好小于20MS(满足刷新率大于50HZ) (3)来点小难的,所有的灯逐渐从暗到全亮,再由全亮到暗。 这个可以按照第二个例子来延伸一下,分成8个时间段,如果要明显一点可以多分几个时间段,所有灯同时工作就相当于一个LED一样。 (4)最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。这才是真正的流水灯。 #include <reg52.h> typedef unsigned char uchar; #define Ton 40 #define LED P1 sbit LED0 = P1^0; sbit LED1 = P1^1; sbit LED2 = P1^2; sbit LED3 = P1^3; sbit LED4 = P1^4; sbit LED5 = P1^5; sbit LED6 = P1^6; sbit LED7 = […]

Read the rest of this entry »

关于STC单片机RAM的问题

如果问你STC89C52RC单片机的RAM有多大?很多人可能直接回答256字节, 错了!   STC89C52RC单片机的RAM有512字节,然而这512字节怎么用呢? 很多人可能都不知道,这可是极大的资源浪费啊。RAM本来就宝贵,给 了这么多资源怎能不用呢?   我们都知道8051单片机有128字节RAM,后来8052单片机扩充到256 字节RAM,然而在使用上是有区别的。   在keil c默认情况下编译, char a=0x00;    a 会被存储在低128字节的RAM里,这部分RAM称为data 上述语句等效为: char data a=0x00; 那么如何使用高128字节的RAM呢,只要用 idata 关键词就可以了: char idata b=0x01;    b 会被存放在全部256字节RAM的位置。 有人定义一个char a[120]数组时,编译会出错,明明单片机有256字节 RAM,为什么定义一个120元素的数组还不够用呢?因为char c[120]等 同于char data c[120]  ;数据都挤在低128字节的RAM里当然不够用。 char idata c[120] ;就不会有问题,数组会被分配在全部256字节的RAM中   SCT为了增强单片机的性能,STC89C**RC单片机扩展了256字节的RAM ,总共达到512字节。STC89C**RD+单片机扩展了1024字节的RAM,总 共达到1280字节.   这些额外扩展的RAM怎么用呢?很简单,只要用 xdata 关键词就可以了。 STC89C**RC 单片机最大可以定义: char xdata d[256]; STC89C**RD+ 单片机最大可以定义: char xdata […]

Read the rest of this entry »