(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 »Archive for the 'SCM' Category
关于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 »