导航:首页 > 操作系统 > 用单片机p1口控制8个灯一直亮

用单片机p1口控制8个灯一直亮

发布时间:2022-08-24 02:39:49

① 用AT89C51单片机端口P1控制8个LED灯的变化(左移2次右移2次闪烁2次延时一秒)的工作原理

基本方式就是:
P1=0X01;//或者别的数,看你想亮几个
DELAY_MS(500);//适当延时
P1=P1>>1;//左移或者右移
DELAY_MS(500);
P1=P1>>1;
DELAY_MS(500);
.....
代码按顺序执行就是了。P1口不同的输出对应不同的亮灯状态,不同的输出中间加上延时即可实现不同的效果。

② 使用单片机I/O口控制8只LED灯。 1)点亮8个中的的第任意个LED灯。 使任意一个或多个LED灯闪烁

举个简单的例子,8个LED灯的正级分别接在P1.0到P.7上面,负极分别接在P2.0到P2.7上面,

P1 = 0xff; (P1口全部高电平) P2 = 0x00; (P2口全部低电平),此时电流通过P1口经LED流向P2口,8个灯全部点亮,如果P1不变,P2 = 0XFF; 此时由于P1与P2的接口全部是高电平,没有电压差也就没有电流,LED全部熄灭,如果想让某一个灯点亮,可以根据8421法则,P2.7 P2.6 P2.5 P2.4是高8位,P2.4 P2.3 P2.2 P2.1 P2.0是低8位
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
8 4 2 1 8 4 2 1
当p1 = 0xff; p2 = 0xfe的时候,就是P2.0那个小灯点亮,其他7个灭,p2 = 0xfe的这个F就是8+4+2+1 =15,对应16进制里的f, 同理E=8+4+2+0 =14,对应16进制里的e。
闪烁的话需要用到定时器,时间到了把当前P2对应的引脚取反一下就行了,比如当前P2.0 = 1; 定时器时间到了以后 ~P2.0 当然实际写程序的时候不能直接这么写,自己多复习下吧

③ 用51单片机P1口驱动8个LED做循环点亮控制,每个LED占空比50%,周期两秒

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar Counter = 0;
uchar P1LEDBUF = 0x01;//P1口的灯如果亮了7个,就改成0xFE;

main()
{
P1=0x00; //如果灯全亮了,则全部改为0xFF
TMOD = 0x01; //T0工作在定时方式1
TH0 = 0x3C; //T0初值50ms
TL0 = 0xB0;
ET0 = 1; //开启定时器0中断
EA = 1; //开总中断
TR0 = 1; //启动定时器0
while(1);
}

/********************************************/
/* 定时器0中断服务程序 */
/********************************************/
void T0_Serve() interrupt 1
{
TH0 = 0x3c; //每次定时50ms
TL0 = 0xb0;
Counter++;
if(Counter == 20) //中断20次后进入函数,时间刚好1秒(误差可以忽略)
{
Counter = 0; //计数清0
P1 = P1LEDBUF ;
P1LEDBUF =_crol_(P1LEDBUF,1); //位移P1口LED,准备下一轮
//如果灯亮和灭的刚好反了(熄了一个灯,亮了7个)就把初值改了
}
if(Counter == 40)
{
Counter = 0;//计数清0,周期2秒
P1 = 0x00 ;//如果灯全亮了,则改为P1=0xFF;
}
}

④ 单片机编程,用一个开关控制8个灯轮流亮,再用一个开关控制两个灯一起亮一起灭

简单的啊。思路:8个LED接在一个口,如P1口。再将另外两个LED接在另外某个口(如P2)的两个引脚。然后将两个按键分别接在空闲的口的两个引脚。
按下一个按键,使8个LED的输出状态变化,0xFE循环移位实现,LED低电平亮。另外的按键按下,两个LED状态翻转。

⑤ 单片机程序:P1口接8盏LED灯,8盏LED灯循环点亮,间隔时间为50ms,用延时子程序实现

8盏LED灯循环点亮,间隔时间为50ms,你能分辨不?
还是给你改为间隔时间为1s,用定时器延时子程序实现
org 0000h
jmp start
org 0030h
start:
mov A,#0FEH;
mov R2,#8;
LOOP1: mov p1,A; 左边4个LED每隔1S亮1个。从P1.0到P1.7。
call delay1s; 调用定时1s程序
RL A;
djnz R2,LOOP1
jmp start

delay1s:
mov r7,#20
lpr7: call delay50ms;
djnz r7,lpr7
ret

delay50ms:
mov TMOD,#01H
mov TH0,#(65536-50000)/256;
mov TL0,#(65536-50000) mod 256;
setb TR0;
jnb TF0,$
clr TF0;
ret

jmp $
end

⑥ 利用单片机控制8个发光二极管,实现8个灯同时闪烁的控制程序

以51位例,使用P1的八个IO口控制。
先定义:
sbit
LED0=P1^0;
sbit
LED1=P1^1;
........
以此类推,定义八个。
然后在主循环中:
LED0=0;
延时一段时间;
LED0=1;
就可以看到闪烁了。

⑦ 编程:使用单片机P1口控制8个LED。显示方式:自上而下逐个点亮,再自下而上逐个点亮,如此循环

摘要 给你个简单点的

⑧ AT89C51单片机的P1口控制8盏LED流水灯

# include "reg51.h" // 包含头文件

#define uchar unsigned char

void delay02s(void) // 延时0.2s子程序

{

unsigned char i,j,k;

for ( i=2;i>0;i-- )

for (j=200;j>0;j-- )

for (k=250;k>0;k-- );

}

void main (void) // 主函数

{

uchar i,j;

while (1) // 死循环

{

j=0x01; // j初始化为0x01,左移初始值

for(i=0;i<8;i++) // for循环语句,完成8个循环

{

P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出

delay02s( ); // 延时0.2s

j= j<<1; // 左移1位

}

j=0x80; // 设置右移初始值j为0x80

for (i=0;i<8;i++)

{

P1= ~ j;

delay02s( );

j= j>>1; // 右移1位

}

}

}

这只是延时的方法实现的。

⑨ 利用89C51单片机的P1口控制8个发光二极管LED编程

这是只是百点亮P1口的程序
#include<reg51.h>
void
main()
{
while(1)
{
p1=0x00;
}
}
这是闪烁度P1口回程序
#include<reg51.h>
void
delay(unsigned
int
i)
//延时函数
{
unsigned
int
k;
for(k=0;k<i;k++);
}
void
main()
//主函数
{
while(1)
//循环函数
{
P1=0x00;
//点亮P1口
delay(2000);
//延时
P1=0xff;
//熄灭P1口
delay(200);
//延时
}
}
纯手打,答对你有帮助的话请采纳
谢谢

⑩ 使用51单片机的p1端口控制8个发光按照顺序轮流点亮,并画出51单片机与外接图并

咨询记录 · 回答于2021-10-24

阅读全文

与用单片机p1口控制8个灯一直亮相关的资料

热点内容
云服务器华硕 浏览:711
sublime3运行python 浏览:186
怎么把安卓视频传到苹果上面 浏览:81
手机拍鬼片用什么app 浏览:640
爬山虎app是干什么用的 浏览:505
有哪些写给程序员的歌 浏览:49
成都市命令 浏览:993
建立系列文件夹 浏览:983
苹果开机白屏带文件夹问号 浏览:733
体验服为什么服务器会关闭 浏览:41
酒店命令 浏览:750
中走丝线切割编程视频 浏览:80
衣服压缩袋手泵原理 浏览:714
通达信编程书籍 浏览:981
车用压缩天然气瓶阀 浏览:971
鞋的程序员 浏览:259
车的压缩比是什么意思 浏览:202
网站源码怎么传到文件夹 浏览:914
海南压缩机在哪里 浏览:491
电脑文件夹清晰的文件结构 浏览:839