❶ 单片机 控制 发光二极管
还是比较简单的,但你没即电路图,又没介绍说明你这设计到底是什么原理,怎么写呀。
哥们,学机的就搞不定电了?偶当初也是学机的,现在照样一边设计机器,一边搞嵌入式系统。学习须努力呀,呵呵。
=[兄弟,继续顶你]==========
你没说明白,我自己假设一个情况吧:就假设你有10个阀,10个发光二级管,每个阀对应一个管子,要是1号阀开,则1号管亮,要是1,2号阀一起开,则1,2号管一起亮,要是有关的阀了,则相应的管子也灭。
设阀开时反馈给单片机高电平,阀关时则给单片机低电平。
二级管是在单片机输出低电平时点亮相应的管子。
单片机是标准40脚或44脚,有全部三总线的(比如AT89S52)
1-8 号阀接到P0.0 - P0.7
9,10号阀接到P1.0 - P1.1
1-8 号管接到P2.0 - P2.7
9,10号阀接到P3.0 - P3.1
=[最原始的程序]===========
ORG 0000H
SJMP MAIN
ORG 0020H
MAIN:
NOP ; 其实这里应延时约5ms稳定上一周期
MOV P0,#0FFH ; 51的机子要读入须先写高(其实P0可不用)
NOP
MOV A,P0
CPL A ; A取反,准备给P2送去
MOV P2,A ; P0状态写给P2
NOP
MOV P1,#0FFH ; 51的机子要读入须先写高
NOP
MOV A,P1
CPL A ; A取反,准备给P3送去
MOV P3,A ; P0状态写给P3
NOP
lJMP MAIN
END
================================================
❷ 基于单片机的水塔水位控制中的水位检测传感器,应该怎样做呢或者应选择那样的水位传感器呢
位式的就选浮球式液位传感器。要是连续的液位测量,有投入式的,差压式的,电容式的,磁翻板的,浮筒式的,等等。
❸ 用51单片机控制八个发光二极管
// 51单片机控制八个发光二极管 左右循环。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; // 改变这里 LED 各种花样
uchar t,i;
void main()
{
TMOD=0x10;
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
EA=1;
ET1=1;//开定时器1中断
TR1=1;//启动定时器1
t=0;
i=0;
while(1)
{
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
t++;
if(t==20)
{
t=0;
P2=TAB[i];
i++;
if(i==18) { i=0;}
}
}
❹ 51单片机控制两个发光二极管的电路图 和程序
你好!很高兴能为你回答!如有疑问可以联系!如图所示:在P1.0、P1.1端口上各接一个发光二极管L1、L2,使L1、L2在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
如图所示的石英晶体为12MHz,因此,1个机器周期为1微秒
机器周期
微秒
MOV
R6,#20
2个机器周期
2
D1:
MOV
R7,#248
2个机器周期
22+2×248=49820×
DJNZ
R7,$
2个机器周期
2×248
498
DJNZ
R6,D1
2个机器周期2×20=4010002
因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:
DELAY:
MOV
R5,#20
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
(2).
输出控制
如图所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。P1.1同理;
5.
程序框图
如图4.1.2所示
图4.1.2
6.
汇编源程序
ORG
0
START:
CLR
P1.0SETB
P1.1
LCALL
DELAY
SETB
P1.0CLR
P1.1
LCALL
DELAY
LJMP
START
DELAY:
MOV
R5,#20
;延时子程序,延时0.2秒
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
END
7.
C语言源程序
#include
<AT89X51.H>
sbit
L1=P1^0;sbit
L2=p1^1;
void
delay02s(void)
//延时0.2秒子程序
{
unsigned
char
i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void
main(void)
{
while(1)
{
L1=0;L2=1;
delay02s();
L1=1;L2=0;
delay02s();
}
}
❺ 单片机控制发光二极管闪烁
#include<reg51.h> // 头文件 ;
sbit LED =P0^7; // 定义LED接至P0.7 ;
#define uint unsigned int
void delay(uint x); // 声明延时函数;
/*主函数*/
void main()
{
while(1)
{
LED = 0; // 输出低电平,点亮LED;
delay(50); // 延时;
LED = 1; // 输出高电平,熄灭LED;
delay(50); // 延时;
}
}
/*延时函数*/
void delay(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<1200;j++);//大约10 ms;
}
❻ 急求~~单片机如何通过i o端口控制发光二极管的亮灭
首先把IO端口设为输出模式,若IO端口接led的正极,led负极接地,让单片机输出高电平led就能亮,输出低电平led就灭了。当然还要考虑led两端电压和流过led的电流要合适。
❼ 单片机一个按键控制一个发光二极管
以下是用C语言实现的:
#include<reg51.h>
sbit KEY=P1^0;
sbit LED=P1^1;
void delay();
void main()
{
while(1) //不断循环
{
if(KEY==0) //判断键盘是否被按下
{
delay(); //调用延时函数,作用消抖
if(KEY==0) //再次读键盘,以判断刚才判断到的是否为抖动
LED=~LED; //取反P1.1电平状态,也就是改变发光管的状态
}
}
}
void delay()
{
unsigned int i=50000;
while(i--); //不断循环的自减,直到i变为0
}
以下是用汇编实现的:
ORG 0000H
AJMP MAIN ;跳转到主程序
ORG 0100H
MAIN:JB P1.0,MAIN ;判断P1.0是否被按下,若不是则再判断,是则向下执行
CALL DELAY ;调用延时子程序,延时一段时间,用于键盘消抖
JB P1.0,MAIN ;再次判断按键状态,用于判断是否为抖动,不是则向下执行
CPL P1.1 ;取反P1.1,也就是改变一次发光二极管的状态
JNB P0.0,$ ;等待按键释放(等待P1.0电平变高)
AJMP MAIN
DELAY:
MOV R0,#200
LOOP: MOV R1,#200
DJNZ R1,$
DJNZ R0,LOOP
RET
END
这些都是刚刚写好的,希望能令你满意,有问题可以hi我!
❽ 怎么使单片机直接控制发光二极管 没有锁存器~ 谢谢
可以用锁存器74hc573锁存数码管的段选。我可以送你一个原理图,你看看硬件。挺简单的电路。程序是你每次写完数码管的数据后,锁存一下,p0口就可以做别的工作了,数码管不会受影响