51单片机流水灯C语言源程序

发布者:平安幸福最新更新时间:2015-10-27 来源: eefocus关键字:51单片机  流水灯  C语言 手机看文章 扫描二维码
随时随地手机看文章
**************************************************************
文件名称:flash_led.c
文件说明:流水灯C程序
编写日期:2006年10月5日
程序说明:MCU采用AT89S51,外接12M晶振,P1口输出
 
*************************************************************/
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
uint i;
uchar temp; 
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
}
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
 
 
 
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define TimeDelay 60000
void delay(uint n);
void Flash0a(void);
void Flash0b(void);
void Flash1a(void);
void Flash1b(void);
void Flash2a(void);
void Flash2b(void);
void Flash3a(void);
void Flash3b(void);
 
void main(void)
{
while(1)
{
Flash1b();
Flash1a();
 
delay(TimeDelay);
delay(TimeDelay);
 
Flash0b();
Flash0a();
 
Flash2b();
Flash2a();
 
Flash1b();
Flash1a();
 
Flash3b();
Flash3a();
}
}
 
void delay(uint n)
{
while(n!=0)
{
n--;
}
}
void Flash0a(void)
{
uchar i;
uchar Temp;
Temp = 0x80;
for(i=0;i<8;i++)
{
P0 = ~Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P0 = 0xff; 
}
void Flash0b(void)
{
uchar i;
uchar Temp;
Temp = 0x80;
for(i=0;i<8;i++)
{
P0 = Temp; 
delay(TimeDelay);
Temp = Temp >> 1;
}
P0 = 0;
}
void Flash1a(void)
{
uchar i;
uchar Temp;
P1 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P1 = ~Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P1 = 0xff;
}
void Flash1b(void)
{
uchar i;
uchar Temp;
P1 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P1 = Temp; 
delay(TimeDelay);
Temp = Temp >> 1;
}
P1 = 0;
}
void Flash2a(void)
{
uchar i;
uchar Temp;
P2 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P2 = ~Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P2 = 0xff;
}
void Flash2b(void)
{
uchar i;
uchar Temp;
P2 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P2 = Temp; 
delay(TimeDelay);
Temp = Temp >> 1;
}
P2 = 0;
}
void Flash3a(void)
{
uchar i;
uchar Temp;
P3 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P3 = ~Temp;
delay(TimeDelay);
Temp = Temp >> 1;
}
P3 = 0xff;
}
void Flash3b(void)
{
uchar i;
uchar Temp;
P3 = 1;
Temp = 0x80;
for(i=0;i<8;i++)
{
P3 = Temp; 
delay(TimeDelay);
Temp = Temp >> 1;
}
P3 = 0;
}
 
===========
;P1口八个LED灯做三路流水灯实验
;***************************************************************
;* Date : 2004.4.20 *
;***************************************************************
ORG 0000H
LJMP MAIN
ORG 030H
MAIN:MOV P1,#0DBH ;11011011--0为亮,1为灭
ACALL DELAY
MOV P1,#06DH ;01101101
ACALL DELAY
MOV P1,#0B6H ;10110110
ACALL DELAY
AJMP MAIN 
DELAY:MOV R7,#255 ;延时子程序
D1: MOV R6,#255
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
关键字:51单片机  流水灯  C语言 引用地址:51单片机流水灯C语言源程序

上一篇:51单片机延时函数
下一篇:51单片机C语言程序(三)数码管

推荐阅读最新更新时间:2024-03-16 14:37

51单片机舵机控制程序
不记得多久没接触过程序这东东了,C++是完全忘了,因为第一个VC的hello world是编译不出来的,虽然后来确认了是设置路径的问题。也在怀疑自己是否曾经读过大学,因为虽然知道那玩意叫微积分,但已经不知道哪个叫微分,哪个是积分了。好吧,虽然有点夸张,但绝对是不过份的!^o^ 买了个单片机开发板确实是明智的,因为那玩意确实好玩,也依然兴趣不减,因为编程的心依然不死,觉得那东西是必须要学会并熟练的,否则太对不起我那夭折的第二学历了。虽然那就只差三科就过了。好吧,我得承认那是最难的也是最主要的三科:数据结构、数据库原理、信息系统开发与管理。出来也曾经想过要去考的,但后来东奔西跑的还是没去成。现在已是完全放弃了,也觉得没那个必要了,
[单片机]
基于AT89C51单片机设计的简易智能机器人
引言 随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。 1 设计思想与总体方案 1.1 简易智能机器人的设计思想 本机器人能在任意区域内沿引导线行走,自动绕障,在有光源引导的条件下能沿光源行走。同时,能检测埋在地下的金属片,发出声光指示信息,并能实时存储、显示检测到的断点数目以及各断点至起跑线
[单片机]
【自学51单片机】10 --PWM介绍、51单片机RAM区域划分
1、PWM介绍 PWM (Pulse Width Modulation) ,中文名为脉冲宽度调制,它能使用数字信号达到一个模拟信号的效果,脉冲宽度调制就是改变脉冲宽度来实现不同的效果。下面看图10-1三组脉冲信号。 它是一个周期为10ms,频率为100Hz的波形,每组高低电平脉冲宽度各不相同,也就是占空比(指高电平的时间占整个周期的比例)不同。 在数字电路中,只有0和1两种状态,在小灯中,0熄灭,1点亮。当让小灯亮灭间隔运行时,并且间隔时间不断减小,频率大于100Hz,肉眼看起来为一直保持亮状态,每个周期内不断改变小灯亮和灭的时间,小灯亮度也会发生变化,这就达到模拟电路的效果,不再是纯粹的0和1,还有亮度的不断变化。
[单片机]
【自学<font color='red'>51单片机</font>】10 --PWM介绍、<font color='red'>51单片机</font>RAM区域划分
单片机入门篇之流水灯
我用的开发板是天翔电子的TX-1C,单片机是STC89C52RC。 下面就以八个发光二极管与单片机的硬件连接图开始: 图1 要使得发光二极管点亮,就需要有电流通过它,5mA左右电流即可(电流越大,其亮度越强,但电流过大,会烧坏二极管,一般控制在3~20mA之间。)。 由上图可知:Q0~Q7端为低电平时,发光二极管就会被点亮。发光二极管与单片机P1口通过锁存器74HC573相连。 所以要使得74HC573的输出端Q0~Q7输出低电平,就得先了解锁存器的原理,其真值表如下: 图2 从真值表可以知道:当OE(输出使能)端为低电平,LE(锁存允许)端为高电平时,输出端Q0~Q7与D0~D7的状态一致。
[单片机]
单片机入门篇之<font color='red'>流水灯</font>
51单片机的程序计数器PC
PC的作用是用来存放将要执行的指令地址,共16位,可对64K ROM直接寻址,PC低8位经P0口输出,高8位经P2口输出。也就是说,程序执行到什么地方,程序 计数器 PC就指到哪里,它始终是跟蹿着程序的执行。我们知道,用户程序是存放在内部的ROM中的,我们要执行程序就要从ROM中一个个字节的读出来,然后到CPU中去执行,那么ROM具体执行到哪一条呢?这就需要我们的程序 计数器 PC来指示。 程序计数器PC具有自动加1的功能,即从存储器中读出一个字节的指令码后,PC自动加1(指向下一个存储单元)。
[单片机]
51单片机定时器中断控制灯1S亮的程序
#include AT89X51.H unsigned char i=0,j=0; void main() { TMOD=0X01; TH0=0X4c; TL0=0X00; TR0=1; ET0=1; EA=1; P0_3=1; while(1) {}; } timer0() interrupt 1 { TR0=0; TH0=0X4c;//5000us TL0=0X00; i++; if(i =20) { i==0; j++; if(j =20) { j=0; P0_3= ~P0_3; } } TR0=1; } //注意此处必须用两个变量i,否则程序不会通过。
[单片机]
制作和使用自定义C语言库文件
目标 1.制作一个库文件libGetMax.a ,其中包含一个外部函数GetMax 。 函数GetMax的作用是判断两个输入参数(int型)中的最大值,并返回最大值。 2.制作一个应用范例,使用库libGetMax.a中包含的GetMax函数。 库文件的生成   为叙述方便,请在C盘根目录中新建一目录,并将其命名为libtest。以下将C:libtest简称为工作目录。   在ICCAVRIDE环境中新建两个文件,分别命名为 GetMax.c 和 GetMax.h,并保存至工作目录中。两文件内容如下所示: //------GetMax.h的内容如下:------ #ifndef__GETMAX_LIB #
[单片机]
AT89C2051单片机对双路路灯照明控制器的设计
通常我们常见的路灯、通道灯、广告灯箱等公共场所用照明灯具往往彻夜通明,或者说在白天不应照明时工作了,造成了电能的浪费。还有些因为采用了定时控制方式,随着季节的变化未能及时设置好控制器,造成了控制不适时,如天已暗灯未明等现象,影响了照明效果。本文介绍采用AT89C2O5l单片机制作的双路路灯照明控制器,仍然采用光控式,但与一般的光控开关相比由于采用了单片机,具有较强  的抗干扰性能,一路为夜间全明,另一路可设置晚上照明时间,到时自动关闭。 硬件电路介绍 本路灯控制器原理图如下图所示,它主要由光敏电阻、8421数码开关、AT89C2051单片机、输出继电器等几部分组成。 3W微型变压器T、整流桥IC2、三端稳压器78LO5等构
[单片机]
AT89C20<font color='red'>51单片机</font>对双路路灯照明控制器的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved