1、4 广告灯的左移右移 1 实验任务 做单一灯的左移右移,硬件电路如图 4.4.1 所示,八个发光二极管 L1 L8分别接在单片机的 P1.0 P1.7 接口上,输出 “0” 时,发光二极管亮,开始时 P1.0P1.1P1.2P1.3P1.7P1.6P1.0 亮,重复循环。 2 电路原理图 图 4.4.1 3 系统板上硬件连线 把 “ 单片机系统 ” 区域中的 P1.0 P1.7 用 8 芯排线连接到 “ 八路发光二极管指示模块 ” 区域中的 L1 L8 端口上,要求: P1.0 对应着 L1, P1.1 对应着 L2, ,P1.7 对应着 L8。 4 程序设计内容 我们可以运用输出端口指令 M
2、OV P1, A或 MOV P1, DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。 每次送出的数据是不同,具体的数据如下表 1 所示 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 说明 L8 L7 L6 L5 L4 L3 L2 L1 1 1 1 1 1 1 1 0 L1 亮 1 1 1 1 1 1 0 1 L2 亮 1 1 1 1 1 0 1 1 L3 亮 1 1 1 1 0 1 1 1 L4 亮 1 1 1 0 1 1 1 1 L5 亮 1 1 0 1 1 1 1 1 L6 亮 1 0 1 1 1 1 1 1 L7 亮 0 1
3、 1 1 1 1 1 1 L8 亮 表 1 5程序框图 图 4.4.2 6 汇编源程序 ORG 0 START: MOV R2,#8 MOV A,#0FEH SETB C LOOP: MOV P1,A LCALL DELAY RLC A DJNZ R2,LOOP MOV R2,#8 LOOP1: MOV P1,A LCALL DELAY RRC A DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#20 ; D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 7 C语言源程序 #include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) unsigned char m,n,s; for(m=20;m0;m-) for(n=20;n0;n-) for(s=248;s0;s-); void main(void) while(1) temp=0xfe; P1=temp; delay(); for(i=1;i(8-i); P1=a|b; delay(); for(i=1;ii; b=temp(8-i); P1=a|b; delay();