
第5章C51基础-实例-流水灯
第5章 C 51 基础-实例-流水灯 1

【例5-1】制作流水灯,8个发光二极管LED0~LED7和STC15F2k60S2芯片。设计电路,并编写程序来控制发光二极管由上至下的反复循环流水点亮。Voc41、电路设计LEDOR1U1VCCSTC89C52RC110P10407LED1P1.0VCCP1139PO02R2C3PI.1PO.O(ADO)P12338P01P1.2PO.1(ADI)10UFP13437P02110P1.3PO.2(AD2)P1436P03LED2P1.4P0.3(AD3)S1RSTP15R3635P04P1.5P0.4(AD4)P1634P05P1.6P0.5(AD5)R3P17833P06110P1.7P0.6(AD6)10KRST932P07LED3RSTP0.7(AD7)R41031vccP3.0(RXD)EA(VPP3011P3.1(TXD)ALE(PROG)1229110P3.2(INTOPSEN28P2713LED4P3.3(INT))P2.7(A15)R5P341427P26P3.4(TO)P2.6(A14)C4P351526P25P3.5(T1)P2.5(A13)XTAL1P3625P2416110P3.6(WRP2.4(A12)P3724P23LED51Y1P3.7(RO)P2.3(A11)R630pXTAL21823P22XTAL2P2.2(A10)12M22P21XTAL119XTALIP2.1(A9)C521P2011020GNDP2.0(A8)XTAL2LED6R7130p110LED7R81102
【例5-1】 制作流水灯,8个发光二极管LED0~LED7和 STC15F2k60S2芯片。设计电路,并编写程序来控制发光二极管由上至下 的反复循环流水点亮。 1、电路设计 2

C1H30pFU1X1口19¥39XTAL1PO.O/ADO38P0.1/AD1C37VecPO.2IAD218L36XTAL2PO.3/AD34C35PO.4/AD43430pFLEDOP0.5IAD5R1D33R910kPO.6/AD6329RSTVocP0.7AD7110421LED1P2.0/A8EC22R2VocP2.1/A9服10uFD23DP2.2IA10429P24R10110PSENP2.3/A11300D25福LED2OoALEP2.4/A1230C26R31kEAP2.5/A13C27限中P2.6/A14C28110P2.7IA15LED31010R4P1.0P3.0/RXD2C11P1.1P3.1/TXD30C12110P1.2P3.2/NTO40D13P1.3LED4P3.3.ANT150D14R5P1.4P3.4/TO-60C15P1.5P3.5/T1ZC16P1.6110P3.6AR8C17LED5P1.7P3.7/RDR6AT89C51110LED6R7110LED7R8110图5-2单片机控制的流水灯3
图 5 - 2 单片机控制的流水灯 3

思考:1、>>与_cror_(m,n)实现时现象有何不同?2、请问如何实现由下到上的依次显示?3、请问如何实现步长两个灯的流水显示?4、请问如何实现先从上到下,再从下到上的依次显示?
思考: 1、>> 与_cror_(m,n)实现时现象有何不同? 2、请问如何实现由下到上的依次显示? 3、请问如何实现步长两个灯的流水显示? 4、请问如何实现先从上到下,再从下到上的依次显示? 4

思考:如果想要显示的花色很炫酷并不能用简单的左移右移实现呢?如:先两边到中间再中间到两边这种,怎么实现呢?【例5-2】电路见图5-2,制作由上至下再由下至上反复循环点亮显示的流水灯的第二种方法,数组的字节操作实现建立1个字符型数组,将控制8个LED显示的8位数据作为数组元素,依次送P1口。参考程序:uchar code tab[]=[0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,Oxbf,oxdf,0xef,0xf7,0xfb,0xfd,Oxfe);/*前8个数据为左移点亮数据,后8个为右移点亮数据*思考:为何用code?请掌握数组定义方法,很有用。5
5 思考:如果想要显示的花色很炫酷并不能用简单的左移右移实现呢? 如:先两边到中间再中间到两边这种,怎么实现呢? 【例5-2】电路见图5-2,制作由上至下再由下至上反复循环点亮显示的 流水灯的第二种方法, 数组的字节操作实现 建立1个字符型数组,将控制8个LED显示的8位数据作为数组元素,依 次送P1口。参考程序: uchar code tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd , 0xfe }; /*前8个数据为左移点亮 数据,后8个为右移点亮数据*/ 思考:为何用code?请掌握数组定义方法,很有用

思考:为何用code?请掌握数组定义方法,很有用。数组定义方法:数据类型[存储空间种类]数组名字[元素数目]=[X,X,X,X..];1、如果数组内容属于定义好了就不再变化时,一般放在code中,节省ram空间。2、假设定义一个inta[5],则各元素分别为a[0],a[1],a[2],a[3]a[4],为何要从0开始数呢,因为从1开始数,第五个为a[5],和数组名字重复了。3、完整的数组定义应包含元素数目n,和各元素取值。4、元素数目可以省略,此时应将每个元素的初始值均列举出来。5、可以不完全定义,只定义前面几个值,后面的值默认为0,例如:inta[5]=1,3],则a[0]=0,a[1]=3,其余值均为0。6、完全不定义时,所有值均为不确定的值
◼ 思考:为何用code?请掌握数组定义方法,很有用。 ◼ 数组定义方法: ◼ 数据类型 [存储空间种类] 数组名字[元素数目]={x,x,x,x.}; ◼ 1、如果数组内容属于定义好了就不再变化时,一般放在code中,节 省ram空间。 ◼ 2、假设定义一个int a[5],则各元素分别为a[0],a[1],a[2],a[3], a[4],为何要从0开始数呢,因为从1开始数,第五个为a[5],和数组 名字重复了。 ◼ 3、完整的数组定义应包含元素数目n,和各元素取值。 ◼ 4、元素数目可以省略,此时应将每个元素的初始值均列举出来。 ◼ 5、可以不完全定义,只定义前面几个值,后面的值默认为0,例如: ◼ int a[5]={1,3},则a[0]=0,a[1]=3,其余值均为0。 ◼ 6、完全不定义时,所有值均为不确定的值

请思考如下定义中数组元素个数和初始值。int a[ ]={1,2,3];int a[5]=[1,2,3]
请思考如下定义中数组元素个数和 初始值。 ◼ int a[ ]={1,2,3}; ◼ int a[5]={1,2,3};

思考:设计电路并编写程序实现8个LED灯先两边到中间再中间到两边的显示。:
思考:设计电路并编写程序实现8个LED灯先两边到中间再中 间到两边的显示。 8

按键与灯的组合11、P1.0~P1.1引脚接有2只开关S0、S1,2引脚上的高低电平共4种组合,4种组合分别两两点亮P2.0~P2.7引脚控制的8只LED,设计硬件并编程实现此功能
◼ 按键与灯的组合 ◼ 1、P1.0~P1.1引脚接有2只开关S0、S1,2引脚 上的高低电平共4种组合,4种组合分别两两点亮 P2.0~P2.7引脚控制的8只LED,设计硬件并编 程实现此功能

作业:1、P1.0~P1.1引脚接有两只开关S0、S1、S2,两引脚上的高低电平共8种组合,8种组合分别点亮P2.0~P2.7引脚控制的8只LED,花色如下:(1)从0到7依次逐个点亮(2)从7到0依次逐个点亮(3))从两边到中间依次逐个点亮(4)从中间到两边依次逐个点亮(5))从0到7依次全点亮(6)从7到0依次全点亮(7)从两边到中间依次全点亮(8)从中间到两边依次全点亮设计硬件编程实现此功能。123页4.7.4.8
◼ 作业: ◼ 1、P1.0~P1.1引脚接有两只开关S0、S1、S2,两引脚上 的高低电平共8种组合,8种组合分别点亮P2.0~P2.7引 脚控制的8只LED,花色如下: ◼ (1)从0到7依次逐个点亮 ◼ (2)从7到0依次逐个点亮 ◼ (3)从两边到中间依次逐个点亮 ◼ (4)从中间到两边依次逐个点亮 ◼ (5)从0到7依次全点亮 ◼ (6)从7到0依次全点亮 ◼ (7)从两边到中间依次全点亮 ◼ (8)从中间到两边依次全点亮 ◼ 设计硬件编程实现此功能。 ◼ 123页4.7,4.8