① 51单片机8位流水灯程序怎么写
以P1口的8位共阳极LED为例,
初始化:
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
delay函数:
void delay(int x)
{
int a,b;
for(a=0;a<x;a++)
{
for(b=0;b<10000;b++);
}
}
主程序
void main()
while(1)
{
P1_0=1;
delay(1000);
P1_0=0;
delay(1000);
P1_1=1;
delay(1000);
P1_1=0;
delay(1000);
//以此类推至P1_7
}
② 单片机的8位流水灯的问题,
哥们。你知道0xfe代表什么意思吗?51单片机的P1口有8个端口。0xfe表示最后一位为低电平也就是11111110.小灯当然会亮。然后a变量左移一位就是11111101,表示第二个灯亮其他灭。以此类推,不就是流水灯吗?还有,你的蜂鸣器和灯设置延迟50毫秒?那就相当于一直在响一直再亮。多延迟一会
③ 求一c51单片机,8位流水灯程序
下列程序调试成功。使用晶振为12M。
//软件延时,使P1口外接的8个发光二极管,以每秒1位的速度,轮流发光。
//发光顺序:0123,1234,2345,3456,4567,5670,6701,7012。循环。
//----------------------------
#include<reg52.h>
#include<intrins.h>
unsigned char a;
void main()
{
unsigned char i, j, k;
a = 0x0f;
while(1) {
P1 = a; //假设8个发光二极管接在P1口.
a = _crol_(a, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
}
//----------------------------
补充提问:0123不是同时亮,而是0 1 2 3 按顺序亮,再1234按顺序亮...
回答补充提问,改动如下:
#include<reg52.h>
#include<intrins.h>
void main()
{
unsigned char a, b, c, i, j, k;
a = 0xfe;
while(1) {
b = a;
for(c = 0; c < 4; c++) {
P1 = b;
b = _crol_(b, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
a = _crol_(a, 1);
}
}
④ 51单片机汇编控制8个流水灯
思路:
循环控制常亮状态的值,将其从最高位循环到最低位。这个用于最后状态的常亮
在常亮循环中,控制不是常亮的其它所有位进行再次循环,逐渐从最低位亮灭循环到最高位
代码如下:
#include<reg51.h>
unsignedcharPData;//整体结果
unsignedcharCurrData;//变化的最高位
//延时,本函数是非精确延时,若需要精确延迟则需要根据本函数的汇编语句进行精确计算后调整循环体次数
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全灭状态
for(i=8;i>0;i--){//控制常亮的位置,先从最高位开始,依次循环到最低位
for(j=0;j<i-1;j++){//从最低位循环到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位灭
delay(500);
}
PData=PData+(1<<(i-1));//置最高位为常亮状态
P1=~PData;
delay(500);
}
//停机
while(1){
;
}
}
⑤ 单片机的8位流水灯的问题,
P1口共有8个IO控制口,分别控制8个LED灯,你的目的是做流水灯,也就是让其依次循环点亮,第一次点亮第一个灯,即:P1.0=0,其余为1即P=0xfe;第二次点亮第二个灯,即:P1.1=0,其余为1即P=0xfd;依次类推。=_crol_(a,1)实现的功能就是循环左移,相当于汇编语言的RL
A;这样就可以实现a的值分别为:0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f。
⑥ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#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++);
}
(6)单片机八位流水灯扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
⑦ 如何用单片机简单制作一个流水灯
工具:STC系列51单片机、串口转换器(USB转TTL 或232转TTL)
材料:实验板一块(可以买现成的,也可以买面包板自己搭建),电阻、LED灯 若干,5V电源等。
以下程序可以直接用Keil C 直接编译执行。
//可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。
//具体实现方法可以参考如下程序:
#include<reg51.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uinta);
voidmain()
{
P1=0xfe;
while(1)
{
//向左循环点亮LED
for(i=0;i<7;i++)
{
P1=_crol_(P1,1);//左移一位,点亮下一位LED
delay(55);
}
//向右循环点亮LED
for(i=0;i<7;i++)
{
P1=_cror_(P1,1);//右移一位,,点亮上一位LED
delay(55);
}
}
}
//延时函数,延时a毫秒
voiddelay(uinta)
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
⑧ 单片机八个流水灯左右依次点亮
首先,打开proteus,可以看到界面上方有"库",点开,在库里选择做实验需要的元件。
如图所示,我们做流水灯实验所需要的元件,就是红色方框里面的元件,一定都要添加进来,要不然实验就做不成功。
接着,我们按照电路原理图,排布好元件,连好线,最后的电路如图所示。
我们把实验代码插入单片机,然后点击界面左下角的开始按钮,就可以运行电路。
如图所示,八个流水灯依次点亮。
⑨ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#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++);
}
(9)单片机八位流水灯扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}