A. 用stm32单片机编写一个程序,一个灯一直亮,另一个亮两秒,灭两秒
#include<reg52.h>
unsigned int num;
sbit led1=P3^1;
sbit led2=P3^2;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256
EA=1;
ET0=1;
TR0=1;
while(1)
{
led1=0;
while(1);
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==40)
{
num=0;
led2=~led2;
}
}
B. 单片机的点亮一盏灯程序
MAIN: MOV P1,#11111110B;点亮P1.0所接的灯
ACALL YS ;调用延时子程序,让P1.0所接的灯亮一小段时间
MOV P1,#11111101B;点亮P1.1所接的灯
ACALL YS ;调用延时子程序,让P1.1所接的灯亮一小段时间
MOV P1,#11111011B;点亮P1.2所接的灯
ACALL YS ;调用延时子程序,让P1.2所接的灯亮一小段时间
MOV P1,#11110111B;点亮P1.3所接的灯
ACALL YS ;调用延时子程序,让P1.3所接的灯亮一小段时间
MOV P1,#11101111B;点亮P1.4所接的灯
ACALL YS ;调用延时子程序,让P1.4所接的灯亮一小段时间
MOV P1,#11011111B;点亮P1.5所接的灯
ACALL YS ;调用延时子程序,让P1.5所接的灯亮一小段时间
MOV P1,#10111111B;点亮P1.6所接的灯
ACALL YS ;调用延时子程序,让P1.6所接的灯亮一小段时间
MOV P1,#01111111B;点亮P1.7所接的灯 ACALL YS ;调用延时子程序,让P1.7所接的灯亮一小段时间
LJMP MAIN ;循环.这回用长调用指令LJMP,当程序比较长的时候就用
LJMP YS: ;延时子程序YS,功能是能让LED亮起来或者灭掉一小段时间
MOV R1,#200 ;让灯亮灭时间的长短也就是延时的长短跟#号后面的数据有关
D: MOV R2,#200 ;延时长点#号后面的数据就大点,延时短点#号后面的数据
T: MOV R3,#200 ;就小点,但#号后面最大的数据是255
DJNZ R3,$
DJNZ R2,T
DJNZ R1,D
RET ;子程序返回指令,子程序的设计一般都是因为主程序要调用它, ;调用完是要返回到主程序继续运行下一个语句的
END
C. 单片机间隔点亮一led灯的C语言程序
以下是一个单片机间隔点亮一LED灯的C语言程序,以8051单片机为例:
c
Copy code
#include
//包含了AT89C51的寄存器定义
void delay(unsigned int xms) //延时函数,xms为要延时的毫秒数
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
P1=0x00; //将P1口全部置为0,防止其它引脚影响
while(1)
{
P1=0xff; //点亮P1口第0个引脚上的LED灯友念行,0xff为二进制的11111111
delay(1000); //延时1秒
P1=0x00; //将P1口全部置好哗为0,熄灭LED灯
delay(1000); //延时1秒
}
}
上述程序的作用是在单片机的P1口上间隔高迟点亮一盏LED灯,每隔1秒钟灯的状态会发生一次变化,即由点亮状态变为熄灭状态,再由熄灭状态变为点亮状态。
D. 求教如何用单片机控制LED灯的亮度
控制ked亮度不难,你硬件直接连连接好led灯,串个限流电阻。如果引脚一直给电平那么灯肯定最亮,那你如果改变给灯的时间灯就能调亮度了,如你用定时器或者延时多少个时间引脚电平取反一次。例如每间隔1毫秒电平取反一次就可以改变亮度。那你在用个变量值来给这个时间赋值。就能调亮度了啊,比如你接个电位器电位器值改变你程序你就让定时器时间也相应跟着变动
程序名称:一只按键控制两只LED灯十种亮度显示
编程人:xx
备注:此程序简单
#include<stc12c2052ad.h>
*** it d1=P1^7;、、 定义LED灯1
*** it d2=P1^6; 定义LED灯2
*** it key1=P3^0; 定义按键灯
void delay(unsigned int a){ 延时程序
unsigned int i;
while( a-- != 0){
for(i = 0; i < 100; i++);
}
}
void main(){
while(1){
unsigned int a,b,c,d;
if(key1==0)d++; 按键判断
switch(d) 按键信息比较
{
case 1: b=9;;a=1;break;
case 2: b=8;;a=2;break;
case 3: b=7;;a=3;break;
case 4: b=6;;a=4;break;
case 5: b=5;;a=5;break;
case 6: b=4;;a=6;break;
case 7: b=3;;a=7;break;
case 8: b=2;;a=8;break;
case 9: b=1;;a=9;break;
}
while(key1==0); 判判断按键是否松开
if(d==10)d=0; 按键9种亮度判断,是否是第9种,如果是,则d=0
for(c=0;c<2;c++){ 亮度模式循环显示
d1=0;
d2=1;
delay(a);
d1=1;
d2=0;
delay(b);
}
}
}
、2010.10.05 20;06修改
此程序是我写的简单程序,已做过实验,并且通过!
用pic的脉宽调制功能就可以了,只需要给单片机不同的占空比的值,单片机就可以产生不同占空比的信号,将这个信号用三极管放大驱动LED就行了。还有什么问题可以给我留言
第一,要理解中断在这里的作用是固定的“一小段”时间进入一次。 第二,PWM_ON在程序中的作用很大,它会由0------>CYCLE------>0并且一直循环下去。可以把它看成一个有规律的变化的量。 第三,每进入中断一次count++,满足条件count==PWM_ON或coun..
接好单片机的硬件电路,然后编写程序,再然后烧写程序,然后就可以程序了,没问题的话就可以按你的要求点亮了
# include<reg51.h>
void delay(unsigned int j)
{
unsigned int i;
for (;j>0;j--)
{
for(i=0;i<1000;i++)
;
}
}
void main()
{
while(1)
{
P1^0=0;
delay(100);
P1^0=1;
delay(100);具体数值根据你单片机晶振频率而定
}
}
原理是PWM波占空比不同,其功率亦不同,只要PWM频率很大,人眼分辨不出其闪烁,就可通过控制占空比(高电平时间和周期之比)的大小来控制其亮度。
才用PWM调制
LED灯不好控制亮度,在电流变化较大的范围中,亮度变化不明显
如果是电灯泡还可以的
控制LED灯的亮度 这个其实有难度的, 先练习声音控制开关灯,成功后再考虑控制亮度
LED亮度是通过的电流决定的,控制亮度其实就是控制电流.这一点至今没办法做到便宜又简单.
当然,也有种简易的办法是PWM控制亮关比,优点是容易,缺点是闪烁.
还有就是目前灯亮度有几种控制方式,连续变化的贵,高中低分档位的便宜些.
void main()
{
unsigned int temp,i;
temp=1;
while(1)
{
P1=temp&0x00ff; 取temp低8位
P2=(temp&0xff00)>>8; 取temp高8位
for(i=0;i<65535;i++)
{} 延时
if(temp!=0x8000)
temp<<=1; temp左移一位
else temp=1;
}
}
如果不需要控制转速,一个三极管一个继电器就可以控制马达了。
E. 求89C51单片机32个LED循环亮的汇编程序
ORG0000H
AJMPMAIN
ORG0030H
MAIN:MOVR0,#8
MOVA,#0FEH
P_0:MOVP0,A
ACALLDLY200
RLA
DJNZR0,P_0
MOVP0,#0FFH
MOVR0,#8
MOVA,#0FEH
P_1:MOVP1,A
ACALLDLY200
RLA
DJNZR0,P_1
MOVP1,#0FFH
MOVR0,#8
MOVA,#0FEH
P_2:MOVP2,A
ACALLDLY200
RLA
DJNZR0,P_2
MOVP2,#0FFH
MOVR0,#8
MOVA,#0FEH
P_3:MOVP3,A
ACALLDLY200
RLA
DJNZR0,P_3
MOVP3,#0FFH
MOVR0,#8
AJMPMAIN
DLY200:;延时200us,误差0us
MOVR7,#04H
DL1:
MOVR6,#74H
DL0:
MOVR5,#0D6H
DJNZR5,$
DJNZR6,DL0
DJNZR7,DL1
NOP
RET
F. 单片机点亮一盏led灯代码
用MCS51单片机汇编语言编写的点亮一只LED灯源程序LED1.ASM,代码如下:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:MOV A,#FEH
MOV P1,A
AJMP $
END