很简的51单片机C语言流水灯程序
只是想写个流水灯,看来看去不知道为什么不出来。#include<reg52.h>#defineLEDP2voiddelay(chari);voidmain(){chari...
只是想写个流水灯,看来看去不知道为什么不出来。
#include<reg52.h>
#define LED P2
void delay(char i);
void main()
{
char i;
while(1)
{
LED = 0xfe;
delay(100);
for(i=0;i<8;i++)
{
LED = (LED << 1) | 0x01;
delay(100);
}
}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
确实是进了死循环,但改过来以后又有问题了,用位左移的话就是第一个灯闪,时间是流一次用的时间,但用数组或头文件里面的函数可以
想知道为什么用位左移不行~~~~很郁闷啊~~
#include<reg52.h>
#define LED P2
void delay(int x);
unsigned char code design[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{
int i;
while(1)
{
//LED = 0xfe;
for(i=0;i<8;i++)
{
delay(100);
//LED = (LED << 1) | 1;
LED = design[i];
}
}
}
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<250;j++);
} 展开
#include<reg52.h>
#define LED P2
void delay(char i);
void main()
{
char i;
while(1)
{
LED = 0xfe;
delay(100);
for(i=0;i<8;i++)
{
LED = (LED << 1) | 0x01;
delay(100);
}
}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
确实是进了死循环,但改过来以后又有问题了,用位左移的话就是第一个灯闪,时间是流一次用的时间,但用数组或头文件里面的函数可以
想知道为什么用位左移不行~~~~很郁闷啊~~
#include<reg52.h>
#define LED P2
void delay(int x);
unsigned char code design[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{
int i;
while(1)
{
//LED = 0xfe;
for(i=0;i<8;i++)
{
delay(100);
//LED = (LED << 1) | 1;
LED = design[i];
}
}
}
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<250;j++);
} 展开
展开全部
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h> //51单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
展开全部
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h> //51单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
2、51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash
rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
例程:
#include<reg51.h> //51单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
2、51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash
rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<reg52.h>
#include <intrins.h>
#define LED P2
void delay(char i);
void main()
{ unsigned char LedVablue=0xFE;
while(1)
{
LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h>
//里面的一个库函数,相当于汇编的带进位循环
LED=LedVablue;
delay(100);
}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
#include <intrins.h>
#define LED P2
void delay(char i);
void main()
{ unsigned char LedVablue=0xFE;
while(1)
{
LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是<intrins.h>
//里面的一个库函数,相当于汇编的带进位循环
LED=LedVablue;
delay(100);
}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符型char 默认为signed类型
所以你的延时子程序里j循环条件一直满足
程序调用第一个delay(100)时陷入死循环
此时led=11111110 所以只有第一个灯一直亮
就会这种解释了
你确认只把初值
LED = 0xfe改成~LED = 0?
所以你的延时子程序里j循环条件一直满足
程序调用第一个delay(100)时陷入死循环
此时led=11111110 所以只有第一个灯一直亮
就会这种解释了
你确认只把初值
LED = 0xfe改成~LED = 0?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//---------------------------------------
//头文件
#include<AT89X51.H>
//---------------------------------------
//---------------------------------------
//数据类型替代声明
#define u8 unsigned char
#define u16 unsigned int
//---------------------------------------
u8 led[8]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};
//---------------------------------------
//延时子函数 延时时间为n毫秒
void delay_ms(u8 n)
{
u16 i;
for(;n>0;n--)
{
for(i=114;i>0;i--)
{
;
}
}
}
//---------------------------------------
//---------------------------------------
//流水一次子函数
void liushui(void)
{
u8 i;
for(i=0;i<=7;i++)
{
P0=led[i];
delay_ms(240);
}
}
//---------------------------------------
//---------------------------------------
//主函数
void main(void)
{
while(1)
{
liushui();
}
}
//---------------------------------------
//头文件
#include<AT89X51.H>
//---------------------------------------
//---------------------------------------
//数据类型替代声明
#define u8 unsigned char
#define u16 unsigned int
//---------------------------------------
u8 led[8]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};
//---------------------------------------
//延时子函数 延时时间为n毫秒
void delay_ms(u8 n)
{
u16 i;
for(;n>0;n--)
{
for(i=114;i>0;i--)
{
;
}
}
}
//---------------------------------------
//---------------------------------------
//流水一次子函数
void liushui(void)
{
u8 i;
for(i=0;i<=7;i++)
{
P0=led[i];
delay_ms(240);
}
}
//---------------------------------------
//---------------------------------------
//主函数
void main(void)
{
while(1)
{
liushui();
}
}
//---------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询