导航:首页 > 操作系统 > 单片机双灯左移右移

单片机双灯左移右移

发布时间:2024-09-18 05:49:11

① 怎么控制51系列单片机流水灯先左移再右移最好有分析

#include<reg52.h>
#include <intrins.h> 头文件
#define uchar unsigned char 宏定义
uchar a,b;
uchar b=1;
uchar a=0xfe; 变量定义和初始化
void main() 主函数
{
EA=1;IT1=1;ET0=1;中断允许设置
TH0=-5000/256;
TL0=-5000%256; 赋值
TMOD=0x01;

TR0=1; 启动
while(1); 等待中断产生

}

void timer0(void) interrupt 1 using 1 中断函数
{
TH0=-5000/256;
TL0=-5000%256; 重新赋值
b=b+1; 计算时间

if(b==40) 0.5秒时间到
{
b=0; 清0
P1=a; P1口赋值 0XFE 二进制11111110 也就是第一盏亮其他灭
a=_crol_(a,1); 库函数实现循环
P1=a; 把循环后的值重新付给P1口
}
}
以上只是单方向的循环 还缺少延时函数 加在赋值后面
双向循环 可以用左移右移指令
赋值 P1口 A=A<<1 循环左移一位 A=A>>1 循环右移一位

② 51单片机LED左移完右移为什么不行

22行在while 里面,必然会循环执行,P0=~(1<<8),结果是 0xff,也就是没灯亮。
也就是说,在执行右移的时候,是先灭,亮第1颗,再灭一段时间,再右移下一颗,再灭一段时间,右移下一颗…………
#define LED_Num 8
if(cnt<LED_Num) P0=~(1<<cnt);
else P0=~(1<<(LED_Num-1<<1)-cnt);
for(i=0;i<30000;i++);
cnt=++cnt%(LED_Num-1<<1);
另外,以后不要用 延时函数了。

③ 关于单片机流水灯左移右移的问题

51单片机的左移右移,首先在开始要调用"intrins.h"的文件包,这个文件包含_cror_(右移),_crol_(左移);然后通过for语句来控制;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(k=250;k>0;k--);
理解这三句,第一句是指:m=20;m>0然后m--是真就执行:
for(n=20;n>0;n--)
for(k=250;k>0;k--);
这两句,m--一直减,减一次,里面就执行一次,这里是20次。
流水灯的左右移,第一用"intrins.h"的文件包,第二要要会定义赋值变量,第三延时,这是关键。

④ 单片机点亮一个灯泡时,为什么要进行左移一个单位呢,这里有点不懂还望大神解答

这个是为了让时间长一点,单片机运行速度还是比较快的。你看只有led8_one的最高位是1,才点亮灯。其他的时间是关闭灯的。每次移位就是为了让led8_one的那个1向最高位动一次。

⑤ 单片机led左移然后右移循环亮灭的汇编语言

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
MOV R2,#8
LOOP1:
MOV P0,A
LCALL DELAY
RL A
DJNZ R2,LOOP1
MOV R2,#8
LOOP2:
MOV P0,A
LCALL DELAY
RR A
DJNZ R2,LOOP2
SJMP MAIN
DELAY:
MOV R2,#200
DLY:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY
RET
END

⑥ 利用51单片机某个端口实现:首先让LED灯 每两位循环左移8次,循环右移8

#include <reg52.h>
#include <intrins.h>
sbit LED7 = P1^7;
sbit LED0 = P1^0;
#define N 1000
//-------------------------------------------------------
//延时Z个ms
//-------------------------------------------------------
void delay(unsigned int z)
{
unsigned int x,y;
for(x = z; x > 0; x--)
for(y = 120; y > 0 ; y--);
}

void main()
{ unsigned int i,j;

while(1)
{
P1 = 0xfc;
for(i=0;i<8;i++) //循环左移
{
P1 =_crol_(P1,2);
delay(N);
}
for(i=0;i<8;i++) //循环右移
{
P1 =_cror_(P1,2);
delay(N);
}
for(i=1;i<=10;i++) //奇、偶交替闪烁10次
{
P1 = 0xaa; //奇数0xaa
delay(N);
P1 = 0x55; //偶数0x55
delay(N);
}

for(j=0;j<8;j++) // 循环左移
{ P1 = 0xfe;
P1 =_crol_(P1,1);
delay(N);
}
for(i=0;i<8;i++) //循环右移
{ P1 = 0x7f;
P1 =_cror_(P1,2);
delay(N);
}
}
}

阅读全文

与单片机双灯左移右移相关的资料

热点内容
打孔式文件夹怎么装视频 浏览:27
php怎么学比较好 浏览:379
python中关于函数调用 浏览:362
debian系统命令行如何排序 浏览:407
车压缩机保修几年 浏览:307
linux同步脚本 浏览:664
福建新唐集成硬件加密 浏览:943
空调压缩机被破坏 浏览:105
现在学php怎么样 浏览:90
linuxchttp下载 浏览:770
大数据虚拟机云服务器 浏览:57
java与嵌入式开发 浏览:20
minios如何搭建文件服务器 浏览:1000
华为为啥有些压缩包解压不开 浏览:563
oracle可以编译存储吗 浏览:475
机械男和女程序员创业 浏览:799
自己怎么制作软件app 浏览:214
javajson字符串转java对象 浏览:230
必修一数学PDF 浏览:775
javascriptphpjsp 浏览:811