at89c51单片机流水灯c语言程序及详解是什么
AT89C51单片机是学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法,这种方法比较适合初学者。
材料/工具
电脑 keill,proteus
方法
首先先在proteus画出仿真图,方便仿真程序。
通过编译软件来编写程序,先来写入头函数。
根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写
sbit p0=P1^0;
sbit p1=P1^1;
sbit p2=P1^2;
sbit p3=P1^3;
sbit p4=P1^4;
sbit p5=P1^5;
sbit p6=P1^6;
sbit p7=P1^7;
然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义
void mdelay(unsigned int t)
{
unsigned char n;
for(;t>0;t--)
for(n=0;n<125;n++)
{;}
}
下面就是主函数,包括流水灯的反复循环和j流水灯的方向。
检查没有错误,编译一下。就可以进行仿真了。
扩展阅读,以下内容您可能还感兴趣。
求个51单片机at89c51心形流水灯,程序
这是一个比较全的程序,花样较多,供参考。
#include<reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint k)
{
uinti,j;
for(i=k;i--;i>0)
for(j=100;j--;j>0);
}
void main()
{
uchartemp0,temp1;
ucharyi;
ucharyi0,yi1;
uinti,j,k,a,b;
j=k=a=b=3;
//全部亮
P0=P1=P2=P3=0x00;
delay(700);
P0=P1=P2=P3=0xff;
//每个io口独自亮
for(i=2;i--;i>0)
{
P1=P0=0x00;
delay(500);
P1=P0=0xff;
P3=P2=0x00;
delay(500);
P3=P2=0xff;
}
//闪烁3次
for(i=2;i--;i>0)
{
P0=P1=P2=P3=0x00;
delay(100);
P0=P1=P2=P3=0xff;
delay(100);
}
//P1、P2亮,P3、P0暗
for(i=3;i--;i>0)
{
P1=0x00,P2=0x00; P3=0xff,P0=0xff;
delay(500);
P1=0xff,P2=0xff,P3=0x00,P0=0x00;
delay(500);
}
//四个点的流水
while(j>0)
{
temp0=0xfe,temp1=0x7f;
P1=P3=temp0,P2=P0=temp1;
delay(100);
for(i=7;i--;i>0)
{
temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);
P1=P3=temp0,P2=P0=temp1;
delay(100);
}
j--;
}
//全部亮,闪三次
for(i=3;i--;i>0)
{
P0=P1=P2=P3=0x00;
delay(300);
P0=P1=P2=P3=0xff;
delay(300);
}
//四个IO口同样跟踪流水
while(k>0)
{
temp0=0xfe,temp1=0x7f;
P1=P3=temp0,P2=P0=temp1;
delay(60);
for(i=7;i--;i>0)
{
temp0=temp0<<1,temp1=temp1>>1;
P1=P3=temp0,P2=P0=temp1;
delay(60);
}
k--;
}
P0=P1=P3=P2=0xff;
while(k<3)
{
temp0=0x7f,temp1=0xfe;
P1=P3=temp0,P2=P0=temp1;
delay(60);
for(i=7;i--;i>0)
{
temp0=temp0>>1,temp1=temp1<<1;
P1=P3=temp0,P2=P0=temp1;
delay(60);
}
k++;
}
P3=P2=0xff;
//两边单个从上向下流水
yi=0xfe;
P1=P0=yi;
delay(50);
for(i=7;i--;i>0)
{
yi=_crol_(yi,1);
P1=P0=yi;
delay(50);
}
P1=P0=0xff;
yi=0xfe;
P3=P2=yi;
delay(50);
for(i=7;i--;i>0)
{
yi=_crol_(yi,1);
P3=P2=yi;
delay(50);
}
P3=P2=0Xff;
//两边单个返回流水
for(i=7;i--;i>0)
{
yi=_cror_(yi,1);
P3=P2=yi;
delay(50);
}
P3=P2=0xff;
for(i=7;i--;i>0)
{
yi=_cror_(yi,1);
P0=P1=yi;
delay(50);
}
//全部亮,闪三次
P0=P1=P3=P2=0xff;
for(i=3;i--;i>0)
{
P0=P1=P2=P3=0x00;
delay(100);
P0=P1=P2=P3=0xff;
delay(100);
}
//流水灯
yi0=0xfe,yi1=0x7f;
P3=P2=yi1,P1=P0=yi0;
delay(100);
for(i=7;i--;i>0)
{
yi0=yi0<<1, yi1=yi1>>1;
P1=P0=yi0,P3=P2=yi1;
delay(100);
}
P1=P2=P3=P0=0xff;
delay(200);
yi0=0x7f,yi1=0xfe;
P1=P0=yi0,P3=P2=yi1;
for(i=7;i--;i>0)
{
yi0=yi0>>1,yi1=yi1<<1;
P1=P0=yi0,P3=P2=yi1;
delay(100);
}
//大循环跟踪流水
P1=P2=P3=P0=0xff;
for(i=8;i--;i>0)
{
P1=P1<<1;
delay(50);
}
for(i=8;i--;i>0)
{
P3=P3<<1;
delay(50);
}
for(i=8;i--;i>0)
{
P2=P2>>1;
delay(50);
}
for(i=8;i--;i>0)
{
P0=P0>>1;
delay(50);
}
//逆向大循环跟踪流水
P1=P2=P3=P0=0xff;
for(i=8;i--;i>0)
{
P0=P0<<1;
delay(50);
}
for(i=8;i--;i>0)
{
P2=P2<<1;
delay(50);
}
for(i=8;i--;i>0)
{
P3=P3>>1;
delay(50);
}
for(i=8;i--;i>0)
{
P1=P1>>1;
delay(50);
}
//全部亮,闪三次
P0=P1=P3=P2=0xff;
for(i=4;i--;i>0)
{
P0=P1=P2=P3=0x00;
delay(100);
P0=P1=P2=P3=0xff;
delay(100);
}
//全部亮,只有一个暗的在流水
temp0=0x01,temp1=0x00;
P1=P0=temp0,P3=P2=temp1;
delay(100);
for(i=7;i--;i>0)
{
temp0=_crol_(temp0,1);
P1=P0=temp0;
delay(100);
}
P1=P0=0x00;
temp1=0x01;
P3=P2=temp1;
delay(100);
for(i=7;i--;i>0)
{
temp1=_crol_(temp1,1);
P3=P2=temp1;
delay(100);
}
//全部亮,逆向一个暗在流水
temp0=0x00,temp1=0x80;
P1=P0=temp0,P3=P2=temp1;
delay(100);
for(i=7;i--;i>0)
{
temp1=_cror_(temp1,1);
P3=P2=temp1;
delay(100);
}
P3=P2=0x00;
temp0=0x80;
P1=P0=temp0;
delay(100);
for(i=7;i--;i>0)
{
temp0=_cror_(temp0,1);
P1=P0=temp0;
delay(100);
}
//花样
temp0=0xaa,temp1=0x55;
P1=P3=temp0,P2=P0=temp1;
delay(500);
for(;a--;a>0)
{
for(i=7;i--;i>0)
{
temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);
P1=P3=temp0,P2=P0=temp1;
delay(500);
}
}
for(;b--;b>0)
{
temp0=0xee,temp1=0x77;
P1=P3=temp0,P2=P0=temp1;
delay(300);
for(i=7;i--;i>0)
{
temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);
P1=P3=temp0,P2=P0=temp1;
delay(300);
}
}
//环形逐个亮
P1=P2=P3=P0=0xff;
for(i=8;i--;i>0)
{
P0=P0<<1;
delay(50);
}
for(i=8;i--;i>0)
{
P2=P2<<1;
delay(50);
}
for(i=8;i--;i>0)
{
P3=P3>>1;
delay(50);
}
for(i=8;i--;i>0)
{
P1=P1>>1;
delay(50);
}
//逐个熄灭e799bee5baa6e78988e69d8331333339663961
for(i=7;i--;i>0)
{
P0=~P0<<1;
P0=~P0;
delay(50);
}
P0=0xff;
for(i=7;i--;i>0)
{
P2=~P2<<1;
P2=~P2;
delay(50);
}
P2=0xff;
for(i=7;i--;i>0)
{
P3=~P3>>1;
P3=~P3;
delay(50);
}
P3=0xff;
for(i=7;i--;i>0)
{
P1=~P1>>1;
P1=~P1;
delay(50);
}
P1=0xff;
}
单片机流水灯程序
最低0.27元/天开通百度文库会员,可在文库查看完整内容>
原发布者:蒋455033051
流水灯程序闲来没事,就总结一下流水灯的工作,用两种语言实验C语言和汇编e799bee5baa6e79fa5e98193e4b893e5b19e31333433623739语言。学习单片机的第一个程序就是流水灯实验!学习语言的输出的第一个程序就是helloword!这都是一个过程!我们知道单片机执行的机器语言!汇编就是其执行的根本的语言,任何程序的编译最终还是要生成HEX语言,汇编语言~~!来回显示,并且显示时还会发出蜂咛声!P1口接八个发光二极管,P2.3接一个蜂咛器!一.汇编语言movr7,#8main:movr0,#8;一个循环需要移动8位movp1,#01111111b;初始为P0.7灯点亮loop:clrp2.3acallds1ms;延时,以便人眼可以观察到setbp2.3acallds1msmova,p1;读P0口当前显示的数据送到Arra;将A中的数据循环右移1位movp1,a;再将A中右移过的数据送到P0djnzr0,loopdjnzr7,main;移动不够8位,跳到LOOP处循环,ljmprel;流动1遍跳转到MAIN处循环流。;---显示延时----------ds1ms:movr1,#1ds1lo:movr2,#200ds2lo:movr3,#200djnzr3,$djnzr2,ds2lodjnzr1,ds1loret;延时返回rel:end2.C语言#includeunsignedchari;unsignedchartemp;unsignedchara,b;voiddelay(void)//延时子程序{unsignedcharm,n,s;for(m=20;m>0;m--)for(n=20;n急求懂51单片机编程的C语言大神帮忙编一个AT89S52单片机有创意的8位流水灯程序
#include <reg51.h>
#define GPIO P1
#define uint8 unsigned char
#define uint16 unsigned int
void delay_ms(uint16 x)
{
uint8 i=110;
while(x--)
while(i--);
}
void main()
{
uint8 i;
while(1)
{ i=8;
GPIO=0x01;
do
{
delay_ms(1000);
GPIO=GPIO<<1;
i--;
}while(i);
}
}
一位百流水灯左移。前提度是你问的等给一答的时候才亮。否者回把答GPIO改为oxfe。追问设计的太简单了 设计要求是:依照所给单片机版,尽可能实现多种花样不同的流水灯、状态指示灯(例:按键一次,led1闪,按第二次,led2闪,led1点亮。以此类推),你能设计出来么?能的话给个QQ号呗追答这样啊,你的硬件不也没有键盘吗,再说按键你是要矩阵键盘还是独立键盘。我的qq2561999818,不过不常在。
51单片机:at89c51接74hc164写流水灯
#include "reg52.h"
#include "intrins.h"
int INTcount,flag;
sbit P1^1=CLK;
sbit P1^2=DAT;
void main()
{
EA=1;
ET0=1;
TR0=1;
DAT=1;
while(1)
{
CLK=0;
if(flag/7==0)DAT=1;
else DAT=0;
}
}
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TH0=(65536-50000)%256;
INTcount;
if(INTcount==20){CLK=1;INTcount=0;};
flag++;
}
74HC164就是个移zd位寄存器,假设你使用的版单片机是12M晶振,使用定时器1,并且LED是高电平点亮。那么程序如上,很简单,就是设置两个标志位再使用定时器中断,权你每隔一秒发送一个数据给74HC164就可以了。