P1口接有8个发光二极管,要求编程使八个发光二极管从左到右轮流点亮,每个发光二极管点亮时间为100ms
单向导电啊,根据电流方向判断电流能否通过电阻功率的问题,通过焦耳定律和欧姆定律不难计算出,在没有普通二极管情况下,100k电阻的耗散功率为0.48W,选1/4W都小了,所以1/8W电阻不行,容易烧。
1个二极管(型号1N4007),1个电阻(51kΩ~100kΩ均可,1/4W),一个发光二极管,三个元件串联起来就可以了,注意二极管与发光二极管的极性要相同。
132个发光二极管串联起来,即使不串电阻,直接节220v,也不一定会亮,因为此时发光二极管平均电压只有1.67V;1.67V能点亮的发光二极管很少,多数在2.5V到3V之间。建议用 61个/ 组 串联,共2组,再将2组并联起来,串联一个电阻接220V。
拓展内容:
第二种万用表检测法。用万用表检测发光二极管时,必须使用“R&TImes;l0k”档。困为前面我们已经讲过。发光二极管的管压降为2V.而万用表处于“R&TImes;lk” 及其以下各电阻挡时.表内电池仅为1.5V。低于管压降.无论正、反向接入,发光二极管都不可能导通,也就无法检测。
档时表内接有9V(或 15V)高压电池,高于管压降,所以可以用来检测发光二极管。检测时.将表笔分别与发光二极管的两条引线相接,如表针偏转过半,同时发光二极管中有一发亮光点,表示发光二极管是正向接入,这时与黑表笔(与表内电池正极相连)相接的是正极;与红表笔(与表内电池负极相连)相接的是负极。再将两表笔对调后与发光二极管相接,这时为反向接入,表针应不动。如果不论正向接入还是反向接入,表针都偏转到头或都不动,则该发光二极管已损坏。
在实验板上写的,放心用吧.希望对你有帮助
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
方法一:查表法.
;;;;;;;;;;;;;;;;;;;;;;;;;;
;作者:w418781840.2008.6.5 */
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED EQU P1
FLAG BIT 00H ;定义标志位
ORG 0
LJMP MAIN
ORG 0BH
LJMP AGA
;;;;;;主程序;;;;;;;;;;;;
ORG 0030H
MAIN: CLR FLAG ;标志位清0
;; CLR P2.0;打开灯开关.
MOV TMOD,#01H ;赋值50MS
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#4 ;中断4*50=200MS
SETB EA
SETB ET0 ;开中断.
SETB TR0
WQ: LCALL LENG ;调用.
SJMP WQ
;;;;;;;;;中断服务程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;0.2S到否?否,返回
MOV R0,#4
SETB FLAG
LOOP: RETI
;;;;;;;;;;
LENG: MOV R1,#0
MOV DPTR,#TAB
LOP: MOV A,R1
MOVC A,@A+DPTR
MOV LED,A
JNB FLAG,$
CLR FLAG
INC R1
CJNE A,#0EEH,LOP
TAB: DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H;左渐亮
DB 080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH ;右渐亮
DB 7EH,3CH,18H,00H; 两边点亮值.
DB 0FFH,00H,0FFH,00H,0FFH,0EEH,;闪烁两次,0EEH为结束标志.
RET
END
;;;;;;;;;;;;;;;;;;;;;
方法二:不知道法,呵呵.
;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序功能:简单彩灯控制系统.
;作者:w418781840.2008.6.5 */
;;;;;;;;;;;;;;声明区;;;;;;;;;;;;;;;;;
LED EQU P1
FLAG BIT 00H ;定义标志位
ORG 0
LJMP MAIN
ORG 0BH
LJMP AGA
;;;;;;主程序;;;;;;;;;;;;
ORG 0030H
MAIN: CLR FLAG ;标志位清0
MOV TMOD,#01H ;赋值50MS
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#4 ;中断4*50=200MS
SETB EA
SETB ET0 ;开中断.
SETB TR0
WQ: LCALL LED1 ;调用.
LCALL LED2
LCALL LED3
SJMP WQ;;不断循环
;;;;;;;;;中断服务程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;0.2S到否?否,返回
MOV R0,#4
SETB FLAG
LOOP: RETI
;;;;;;LED子程序区;;;;;;;;;;
;;;;左移渐亮;;;;;;;;;;;
LED1: CLR C ;灯低电平亮.
MOV A,#0FFH
LOP1: RLC A
MOV LED,A
JNB FLAG,$ ;0.2不到,等待.
CLR FLAG ;清0,
CJNE A,#0,LOP1 ;不全亮,返回.
RET
;;右移渐亮;;;;;;;
LED2: SETB C
LOP2: RRC A
MOV LED,A
JNB FLAG,$
CLR FLAG
CJNE A,#0FFH,LOP2
RET
;;;;;两边亮.;;;;;
LED3: MOV R1,#0
MOV DPTR,#TAB
LOP3: MOV A,R1
MOVC A,@A+DPTR
MOV LED,A
JNB FLAG,$
CLR FLAG
INC R1
CJNE A,#0,LOP3
;;;闪烁;;;;;;;;;
MOV R2,#2
LOP4: CPL A
MOV LED,A
JNB FLAG,$
CLR FLAG
DJNZ R2,LOP4;;
TAB: DB 7EH,3CH,18H,00H; 两边点亮值.
RET
END
void init_t0(void);
void t0_int(void) interrupt 1;
int i = 8; //循环次数为8
void main()
{
P1 = 0xff; //初始化LED,8个LED全灭,(假设低电平点亮)
init_t0() ;
while(1); //循环等待定时中断
}
void init_t0() //定时器0初始化程序
{
TMOD = 0x01;
TH0 =0x3c; //晶振6MHz,每个机器周期2us,所需计数时间为100ms=100000us
TL0 =0xb0; //定时器T0工作于方式1,最大定时时间为65536*2=131072us
ET0 =1; //所需计数值=(131072-100000)/2=15536,转换为16进制即为0x3cb0
EA =1;
TR0 =1;
}
void t0_int() interrupt 1 //定时器0的中断处理函数
{
TH0 =0x3c;
TL0 =0xb0;
i = i-1;
if (i!=0)
{
P1 >>= 1;
}
else
{
ET0 =0; //8个灯已点亮,关中断,关定时器
EA =0;
TR0 =0;
}
}
C代码如下:
#include<reg51.h>
#include<intrins.h> //包含循环左移函数 _cro_l头文件
unsigned char tmp; //中间变量
//////////////////////////////////////////////////////////////////////////////////////////////////
// 延时子程序
////////////////////////////////////////////////////////////////////////////////////////////////
void delay(unsigned int cnt)
{
while(--cnt);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
// 主函数
////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
while(1) //外层循环
{
tmp = 0xfe;
P1 = tmp;
while(1) //内层循环,执行1、3、5、7亮灯循环
{
delay(30000); //延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp = _crol_(tmp,2);
P1 = tmp;
if(tmp == 0xbf) //判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环
{
break;
}
}
tmp = 0xfd;
P1 = tmp;
while(1) //内层循环,执行2、4、6、8亮灯循环
{
delay(30000); //延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp = _crol_(tmp,2);
P1 = tmp;
if(tmp == 0x7f) //判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环
{
break;
}
}
}
}
定时器T1每0.05秒中断一次,单片机P1口接8个发光二极管LED0~LED7...
while(1);} void timer1() interrupt 3 { statc unsigned char t;t++;TH1=0x3C; \/\/重装 TL1=0xAF;if(t==20)\/\/定时器为50000us,即进来定时器20次为1秒 { \/\/没说明LED另一端接地或接VCC,假设接地 P1=0x03;\/\/先亮前两个 temp=0x03;temp<<=2;\/\/temp左移两位给P1口循环点亮两个...
定时器T1每0.05秒中断一次,单片机P1口接8个发光二极管LED0~LED7...
include<reg51.h> unsigned char t,n,a[8]={0xfa,0xf5,0xaf,0x5f,0xaa,0x55,0x00,0xff};void t0_init(){ EA=1;ET0=1;TMOD=0X01;TH0=0X3C;TL0=0XB0;TR0=1;} void t0_col() interrupt 1 { TH0=0X3C;TL0=0XB0;if(++t>=20){ t=0;if(++n>7)n=0;P1=a[n];} }...
...构件建一个彩灯控制系统,系统用P1口外接8个发光二极管程序
SETB EA SETB ET0 ;开中断.SETB TR0 WQ: LCALL LED1 ;调用.LCALL LED2 LCALL LED3 SJMP WQ;;不断循环 ;;;中断服务程序;;;AGA: MOV TH0,#3CH MOV TL0,#0B0H DJNZ R0,LOOP ;0.2S到否?否,返回 MOV R0,#4 SETB FLAG ...
p1.3输出1\/0在单片机中是什么意思
P1口作输出口,接8只发光二极管LED1-LED8由 AT89C51 组成的单片机系统,通常情况下 P0 口分时复用作为地址、数据总线, P2 口提供 A15-A8 即高 8 位地址, P3 口用作第二功能,只有 P1 口用作 I\/O 口。 P1 口是 8 位准双向口,它的每一位都可独立地定义为输入或输出。既可作为 8 位的...
单片机点亮多个发光管问题
单片机 I\/O 口 如 P1 口 共有 8 个 I\/O 引脚 分别 为 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 如 指令“P1=0xaa”,就是 1 0 1 0 1 0 1 0 如果驱动发光管,可以是 1 3 5 7 亮 也可以是 0 2...
在单片机中如何用8个发光管演示出8位二进制数字自减过程?(用c语言...
while(1) { P1 = abc; \/\/在P1口外接8个LED,低电平发光.abc++; \/\/加,负逻辑将显示为自减.delay(500); \/\/延时,供观察现象.} } === 要求由最高位P0^0作为二进制的最高位。这个新要求,可以在焊接LED器件的时候进行调整。更改一下程序,也不难,如下:include "reg51.h"...
急求单片机流水灯程序及详解
8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I\/O口线、2个16位定时\/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶...
怎么写一个开关开关开,就显示八个流水灯闪烁,开关关八个流水灯全灭的...
2个方案:第一种:\/* 文件名:8bkey.asm?功能:AT89S51单片机的P1接8个发光二极管接了8个开关,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。入口参数:无 出口参数:无 硬件说明:1 接8位连接线。将led部份的数据口 JP32接到CPU部份的P0口JP51.2 接...
设置一个按键,功能是切换任务 任务1,8个发光二极管每隔1s依次点亮...
2、方案论证2.1 显示部分:显示部分是本次设计最核心的部分,对于LED8*8点阵显示有以下两种方案:方案一:静态显示,将一帧图像中的每一个二极管的状态分别用0 和1 表示,若为0 ,则表示L ED 无电流,即暗状态;若为1 则表示二极管被点亮。若给每一个发光二极管一个驱动电路,一幅画面输入以后,所有L ED 的状态保持...
请用C语言编写程序:让8只发光二极管第一次亮1只,第二次亮2只,直至8只...
应该是单片机吧 不知道你是要汇编还是要c 还有你那发光二极管是高电平亮还是低电平亮 还有你的输出引脚是哪个I\/O口 假设P0 高电平亮 define LED P0 int i = 0;int j = 0;unsigned char a = 0;char delay = 20;for (i = 0; i < 8; i++){ a = a*2+1;\/\/引脚电平 开始...
允张风寒: #include <reg51.h> #define LED P1 //宏定义,使用LED代替P1口(相当于LED=P1) #define uchar unsigned char //用uchar代替unsigned char方便操作 #define uint unsigned int /*------------------time ms延时函数-----------------*/ void delay_ms(uint ...
黄山区18894153707: 用单片机的p1口控制8个低电平有效的Led,要求8个LED 逐个循环点亮,画出电路图,编写对应c语 - ?
允张风寒: 单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4程序:ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP START可以检测单个按键,也可以同时检测多个按键过程:开始--读P1口数据到A--A中的数据右移4次--A中的内容和F0H相或--A中的数据送到P1口--回到开始
黄山区18894153707: c语言编制!!!!用P1口的工作原理,让P1口接8只发光二极管,使用各种方法实现某一只或几只发光二极管亮或灭 - ?
允张风寒: 好简单啦.P1有八条I/O线嘛,一条各接一个LED的负极,每个LED正极串一个510欧姆电阻接Vcc.程序:设P1为输出口,写一个8位数到P1,每一位对应一个LED,写“0”点亮LED,写“1”关上LED.比如:写P1“11111101”就点亮第二个LED.
黄山区18894153707: P1接8个发光二极管,编译程序使二极管从1亮到8,然后熄灭1个,2个直到8个全熄灭,循环进行 - ?
允张风寒: 以上代码中无延时程序看不出效果,现在更正如下:代码设置为低电平点灯,效果为从1-8点灯,再8-1灭灯,反复循环.注意:LED的正端通过一电阻后接至5Vnbsp;负端直接接I/O.电阻大小为500ohm-1K左右吧.ORGnbsp;0000Hajmpnbsp;...
黄山区18894153707: 单片机实验80C51 外中断 P1口接8个发光二极管,设计实验:S1加1键,S2减1键(INT0,INT1)要求:上电全灭,八个发光二极管显示的顺序为每按一次加... - ?
允张风寒:[答案] 既可用外部中断方式来实现; 也可以用查询方式读键处理. 灯的亮灭,就是对P1口的赋值操作, 每次多一盏,可以让初值为0xff.此后,每次左移或右移实现. 每次少一盏,可以与前面相反,右移或左移,并在移入位补1. 注意去抖动处理,好好写吧,...
黄山区18894153707: 设计用8031单片机P1口为输出口控制8只发光二极管循环点亮.1、 画出接口图. 2、 写出控制程序. - ?
允张风寒: /*-----------------------------------------------名称:流水灯编写:杨光楼日期:2009.5修改:无内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要...
黄山区18894153707: 80c51单片机P1端口上经驱动器接有8只发光二极管FOSC=6MHZ,试编写程序 - ?
允张风寒: #include "reg51.h" char i=0; void time0(void) interrupt 1 {TL0=(65536-50000)%0x100;//6M晶体此常数为100ms中断一次TH0=(65536-50000)/0x100;c++;if(c==10){c=0;P1=(1<i);if(++i==8)i=0;} } void main(void){TMOD=0x01;EA=ET0=RT0=1;while(1); }
黄山区18894153707: 单片机外部中断实验 p1口接八个发光二极管,实现:s1加1键,s2减1键(INT0,INT1).要求:上灯全灭,8个发光要求:八个灯一开始全灭,每按一次加一键... - ?
允张风寒:[答案] 很容易写的, 在INT0中断左移P1 在INT1中断右移P1 外部中断设为下降沿方式
黄山区18894153707: P1接8个发光二极管,编译程序使二极管从1个最终到8个都亮,然后熄灭1个,2个直到8个全熄灭,循环进行.(汇编语言) - ?
允张风寒: 别用乘了,一般单片机没有硬件乘法器,要12个周期以上(51系),左移一位,就是乘2,再加1就得了
黄山区18894153707: 利用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); //延时 } }纯手打,对你有帮助的话请采纳 谢谢