单片机控制左右来回循环的流水灯
51单片机流水灯程序

51单片机流水灯程序51单片机是一种广泛使用的微控制器,具有丰富的IO端口和定时器资源。
流水灯程序是51单片机入门的基础示例之一,通过多个LED灯按照一定顺序逐个亮起或熄灭,形成流水灯的效果。
下面详细介绍51单片机流水灯程序的编写。
一、硬件连接要实现流水灯效果,需要将多个LED灯连接到51单片机的IO端口上。
一般使用P1端口作为输出端口控制LED灯的亮灭,P2端口作为输出口控制LED灯亮起的顺序。
具体连接方式如下:•将LED灯的阳极通过限流电阻连接到VCC。
•将每个LED灯的阴极通过限流电阻连接到P1端口。
•将P2端口的每个引脚依次连接到每个LED灯的阴极。
二、程序实现#include <reg52.h> //包含51单片机头文件#define LED P1 //定义LED为P1端口#define ORDER P2 //定义顺序控制为P2端口void delay(unsigned int t); //延时函数声明void main(){unsigned char i;while(1) //循环控制流水灯效果{for(i=0; i<8; i++) //控制8个LED灯{LED = 0x01<<i; //将第i个LED灯置亮delay(10000); //延时一段时间,使LED灯亮起后延时熄灭LED = 0x01>>(i+1); //将第i个LED灯置灭}}}void delay(unsigned int t) //延时函数定义{unsigned int i, j;for(i=0; i<t; i++){for(j=0; j<1275; j++);}}该程序首先定义了LED和ORDER两个变量,分别对应P1和P2端口的输出口。
在主函数中,使用一个while循环控制流水灯效果。
在循环内部,使用一个for循环控制8个LED灯的状态。
在每次循环中,先将第i个LED灯置亮,延时一段时间后将其置灭,然后进入下一个循环。
左右来回循环的流水灯实验报告

青 岛 科 技 大 学微机原理与接口技术综合课程设计(报告)题 目 __________________________________指导教师__________________________ 学生姓名__________________________ 学生学号_________________________________________________________院(部)____________________________专业________________班______年 ___月 ___日直流电机控制综合实验 周艳平宋雪英 01信息科学技术学院 计算机科学与技术0961 2012 12 27摘要 (2)1、单片机概述 (2)2、仿真软件介绍 (2)3、需求分析 (3)一、课程设计目的 (3)二、课程设计要求 (4)三、实验内容 (4)1、设计任务与要求 (4)2、系统分析 (4)1).硬件电路设计(画出原理图、接线图) (5)2)软件框图 (7)3、用keil建项目流程 (8)4、程序清单 (9)4、系统调试 (11)四、设计总结(结论) (12)摘要近年来,随着电子技术和微型计算机的发展,单片机的档次不断提高,起应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到广泛的应用、成为现代电子系统中最重要的智能化的核心部件。
而AT89C51就是其中一种,它是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMO8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
本课程设计介绍一种LED小灯控制系统的设计方法,以单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。
能够通过按键控制8个LED小灯从左到右依次点亮。
关键字:单片机、LED流水灯1、单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。
2.8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。
3.8 个发光管来回流动,第个管亮100ms 。
4.用8 个发光管演示出8 位二进制数累加过程。
5.8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。
重复此过程。
6.间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。
7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。
1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a; delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay() {uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main() {uchar a,i;while(1)a=0xfe; for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a) { uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}void main() {uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main() { uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe; for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa; delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300); a=_crol_(a,1);}}P1=0xff; for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd; delay(300);P1=0xdb; delay(300);P1=0xe7; delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。
单片机控制左右来回循环的流水灯

左右往返循环的流水灯设计要求8 个发光二极管 LED0~ LED7经限流电阻分别接至P1 口的~引脚上,阳极共同接高电平。
编程实现制作左右往返循环的节日彩灯,显示规律以下列图所示。
题 37 图节日彩灯的花式显示的规律为了使显示成效更为绚烂多彩, P1 端口 8 个引脚分别接有不一样颜色的发光二极管。
详细如题37 表所示。
题 37 表P1 口 8 个引脚的不一样颜色的发光二极管P1 口引脚发光二极管的颜色红色 LED蓝色 LED绿色 LED黄色 LED红色 LED蓝色 LED绿色 LED黄色 LED使用 C51 编流水灯程序以及设计相应的硬件电路十分简单,且有多种方法。
本方案力争程序最简化最清楚原则,用 NS 图(盒图)表示算法以下:程序中设置中间变量temp 用来给 P1 口赋值,命令 _crol_ 和_cror_ 用于使 temp 左移或右移,比如当 temp=B 时,履行 _crol_(temp,1) 以后 temp= ,应用此两条语句一定把头文件 <>包含进来。
所有代码以下:#include<> #include<>unsigned char temp; // 定义字符变量temp,temp 左移或右移并给连结LED 的 P1 口赋值int a;// 定义延缓函数 delay()void delay(void); void main() {temp=0xfe; // 给 temp 赋初值P1=temp; //temp 赋值给 P1 口,第一个 LED (红色)点亮 while(1) // 主程序,括号中的程序将向来循环{for(a=0;a<7;a++)// 左移部分, LED 从左到右挨次点亮{temp=_crol_(temp,1);//_crol_ 语句控制变量temp 左移delay();// 每个灯点亮以后延缓一会在点下一个灯P1=temp;}for(a=0;a<7;a++)// 右移部分,LED从右到左挨次点亮{temp=_cror_(temp,1);// 第8 个灯点亮后开始右移程序,LED从右向左点亮delay();P1=temp;}}}void delay(){// 延时子程序int i,j;for(i=200;i>0;i--)// 定义局部变量i,j//i,j 不停计数占用CPU 时间,达到延时目的for(j=1;j<150;j++); }电路连结以下:。
实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。
二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。
2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。
3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。
5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。
三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。
当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。
E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。
综上,画出实验电路原理图。
2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。
图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。
实验5程序流程图如图3-5,3-6所示。
图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。
例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。
单片机控制流水灯

单片机控制流水灯前言随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯不断变化闪烁。
LED灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。
但目前市场上各式样的LED灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。
这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。
此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。
因此有必要对现有的彩灯控制器进行改进。
流水灯是一串按一定的规律像流水一样连续闪亮。
流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。
流水灯控制可用多种方法实现,但对现代可编程控制器而言,利用移位寄存器实现最为便利。
通常用左移寄存器实现灯的单方向移动;用双向移位寄存器实现灯的双向移动。
本案例利用价格低廉的AT89C52系列单片机控制基色LED灯泡从而实现丰富的变化。
目录前言 (1)1、课程设计的目的和要求 (3)1.1 设计目的 (3)1.2 设计要求 (3)2、设计方案选择 (4)3、硬件设计 (4)3.1 设计思路 (4)3.2 流水灯电路原理图 (4)3.2.1元件清单 (5)3.2.2 硬件电路模块分析 (6)3.3 主要元件说明 (9)3.3.3 振荡器特性 (12)3.3.4 芯片擦除 (12)4、软件设计 (12)4.1 主程序设计 (12)4.2 程序流程图 (15)5、使用keil、proteus软件调试仿真说明 (16)5.1仿真过程 (16)5.2仿真结果 (16)6、结束语 (16)7、参考文献 (17)1、课程设计的目的和要求1.1 设计目的近年来随着科技的发展,单片机的应用正在不断走向深入,同时带动传统控制检测日新月异更新,在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象点的软件结合,加以完善。
(完整版)51单片机流水灯程序
1.第一个发光管以间隔200ms 闪烁。
2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms。
3.8 个发光管来回流动,第个管亮100ms。
4.用8 个发光管演示出8 位二进制数累加过程。
5.8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁 5 次。
重复此过程。
6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}2#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p 仁P1A0;uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a;delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main(){uchar a,i;while(1)a=0xfe;for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);}}}4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a){uint x,y;for(x=a;x>0;x--) for(y=110;y>0;y--);}void main(){uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main(){uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a;delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa;delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300);a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd;delay(300);P1=0xdb;delay(300);P1=0xe7;delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。
单片机的流水灯实验原理
单片机的流水灯实验原理
单片机的流水灯实验原理主要包括以下几个步骤:
1. 硬件连接:将单片机的输出口连接到LED灯的驱动电路上,使得单片机可以控制LED灯的亮灭。
2. 软件编程:通过单片机的编程语言(如C语言)编写程序,实现流水灯效果。
一般采用循环控制语句和位操作指令来控制LED的亮灭。
3. 初始化:在程序的开始部分,需要对单片机的IO口进行初始化,设置为输出模式,以便能够控制LED灯的亮灭。
4. 流水灯效果:通过循环控制语句,依次将不同的IO口设置为高电平,即LED 亮起,然后延时一段时间。
再将前一个IO口设置为低电平,即LED熄灭,依次类推,实现LED的流水灯效果。
5. 循环控制:为了能够实现反复循环的流水灯效果,可以在程序末尾使用一个死循环语句,使得程序不断执行,从而实现流水灯不断闪烁。
总的来说,单片机的流水灯实验原理就是通过控制不同IO口的高低电平状态,控制LED的亮灭,从而实现LED灯的流水灯效果。
单片机控制流水灯
程序框架设计
01
主程序框架
主程序是单片机程序的核心,负 责程序的启动、初始化、中断处 理等任务。
02
中断服务程序框架
03
功能模块框架
中断服务程序用于处理外部中断 事件,如按键按下、定时器溢出 等。
功能模块是实现特定功能的程序 块,如LED灯控制、定时器计数 等。
程序功能模块设计
LED灯控制模块
该模块负责控制LED灯的亮灭状态, 可以通过编程实现流水灯效果。
物联网技术的应用
未来,单片机可能会更多地应用于物联网领域, 与互联网结合,实现更广泛的控制和应用。
3
人工智能与单片机的结合
未来,人工智能技术可能会与单片机结合,实现 更智能的控制和应用。
THANKS
[ 感谢观看 ]
02
包括主程序和中断服务程序,主程序负责循环控制LED灯,中断
服务程序负责处理外部中断。
调试过程
03
通过串口调试工具或示波器等工具对程序进行调试,确保程序
正确运行。
实际运行效果展示
流水灯效果
通过单片机控制LED灯的亮灭,实现流水灯效果 。
速度控制
通过程序延时控制LED灯亮灭的时间间隔,实现 流水灯的速度变化。
硬件连接
将单片机与LED灯连接,通过GPIO口控制LED灯的亮灭。
控制逻辑
通过编写程序控制单片机GPIO口的输出,实现LED灯的顺序亮 灭,形成流水灯效果。
延时控制
通过程序延时控制LED灯亮灭的时间间隔,实现流水灯的速度变 化。
控制程序编写及调试
编程语言
01
使用C语言或汇编语言编写单片机程序。
程序结构
电源管理优化
采用高效的电源管理方案,降 低流水灯的能耗。
任务二 单片机控制流水灯
任务二 单片机控制流水灯
国家级“十一五”规划教 材
(3)短转移指令
SJMP rel;(PC)←(PC)+2,(PC)←(PC) +rel
指令中rel是一个有符号数偏移量,其范围为-128~+127,以补码 形式给出。若rel是正数,则向前转移;若rel是负数,则向后转移。 1)一条带有FEH偏移量的 存储器 SJMP指令,将实现无限循环。 –128 这是因为FEH是-2的补码,目 的地址=PC+2-2=PC,结果转 PC 80H 向自己,无限循环,一般在程 PC+1 rel 序用SJMP $来表示SJMP PC+2 0FEH。 +127 2)该指令中寻址方式称相对 寻址方式。
任务二 单片机控制流水灯
国家级“十一五”规划教 材
(3) 循环控制转移指令ห้องสมุดไป่ตู้
DJNZ Rn, rel ;(PC) ←(PC)+2, (Rn)←(Rn)-1 当(Rn)≠0时, (PC) ←(PC) +rel; 当(Rn)=0时, 程序顺序执行。 DJNZ direct,rel;(PC)←(PC)+3,(direct)←(direct)-1 当(direct)≠0时, (PC) ←(PC) +rel; 当(direct)=0时, 程序顺序执行。 执行本指令时,将第一个操作数减1后判断结果是否为0,若 为0,则终止循环程序段的执行,程序往下顺序执行;若不为0, 则转移到目的地址继续执行循环程序段。用两条指令可以构成 循环程序,循环次数就是第一个操作数的值。rel为相对偏移量。
LP0: MOV DPTR, #TAB ; 取表头地址 MOV A, R0 ADD A, R0 JNC LP1 INC DPH ; R0内容乘以2 ; 无进位转移 ; 加进位位
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
左右来回循环的流水灯
设计要求
8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。
编程实现制作左右来回循环的节日彩灯,显示规律如下图所示。
题37图节日彩灯的花样显示的规律
为了使显示效果更加绚丽多彩,P1端口8个引脚分别接有不同颜色的发光二极管。
具体如题37表所示。
题37表P1口8个引脚的不同颜色的发光二极管
P1口引脚发光二极管的颜色
P1.0 红色LED
P1.1 蓝色LED
P1.2 绿色LED
P1.3 黄色LED
P1.4 红色LED
P1.5 蓝色LED
P1.6 绿色LED
P1.7 黄色LED
使用C51编流水灯程序以及设计相应的硬件电路十分简单,且有多种方法。
本方案力求程序最简化最清晰原则,用NS图(盒图)表示算法如下:
程序中设置中间变量temp用来给P1口赋值,命令_crol_和_cror_用于使temp左移或右移,例如当temp=11111110B时,执行_crol_(temp,1)之后temp=11111101,应用此两条语句必须把头文件<intrins.h>包含进来。
全部代码如下:
#include<reg51.h>
#include<intrins.h>
unsigned char temp; //定义字符变量temp,temp左移或右移并给连接LED的P1口赋值
int a; //定义延迟函数delay()
void delay(void);
void main()
{
temp=0xfe; //给temp赋初值
P1=temp; //temp赋值给P1口,第一个LED(红色)点亮
while(1) //主程序,括号中的程序将一直循环
{
for(a=0;a<7;a++) //左移部分,LED从左到右依次点亮
{
temp=_crol_(temp,1); //_crol_语句控制变量temp左移
delay(); //每个灯点亮之后延迟一会在点下一个灯
P1=temp;
}
for(a=0;a<7;a++) //右移部分,LED从右到左依次点亮
{
temp=_cror_(temp,1); //第8个灯点亮后开始右移程序,LED从右向左点亮
delay();
P1=temp;
}
}
}
void delay() //延时子程序
{
int i,j; //定义局部变量i,j
for(i=200;i>0;i--) //i,j不断计数占用CPU时间,达到延时目的
for(j=1;j<150;j++);
}
电路连接如下:
void delay()()
{
unsigned int i;
for(i=0;i<1500;i++)
}
void fun(void)
{
unsigned char i;
for (i=0;i<8;i++)
{
P0=1<<i;
delay()();
}
while(--i)
{
P0=1<<i;
delay()();
}
}
void main()
{
while(1)
{
fun();
}
}
void L_M()//左
{
unsigned char a,b,i,temp; unsigned int s;
temp=0xfe;
P1=temp;
for(s=0;s<300000;s++);
for(i=0;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
for(s=0;s<300000;s++);
}
}
void R_M()//右
{
unsigned char a,b,i,temp;
unsigned int s;
temp=0x7f;
P1=temp;
for(s=0;s<300000;s++);
for(i=0;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
for(s=0;s<300000;s++);
}
}
#include<reg52.h>
#include <intrins.h> //intrins.h库中含有循环移位函数#define uint unsigned int
#define uchar unsigned char
uchar temp; //定义全局变量temp
delay() //延时子函数
{
uint i,j;
for(i=1;i<400;i++)
for(j=1;j<400;j++);
}
void main() //主函数
{
temp=0xfe;
P0=temp;
while(1)
{
temp=_crol_(temp,1); //_crol_ 字符循环左移_cror_ 字符循环右移delay();
P0=temp;
}
}。