1. 利用单片机控制8个发光二极管,实现8个灯同时闪烁的控制程序
以51位例,使用P1的八个IO口控制。
先定义:
sbit LED0=P1^0;
sbit LED1=P1^1;
........
以此类推,定义八个。
然后在主循环中:
LED0=0;
延时一段时间;
LED0=1;
就可以看到闪烁了。
2. 某单片机控制系统有8个发光二极管.试画8051与外设的连接图并用汇编语言编程使它们从左到右轮流点亮
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#7FH
LOOP:
MOV P0,A
LCALL DELAY
RR A
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY
RET
3. 用单片机控制8个发光二极管依次发光,产生跑马灯的效果,3种效果循环,要求通过按钮切换效果!
这个程序的关键点是要在显示子程序执行的过程中,多对按键进行检测。检测到有按键按下时,即退出子程序,返回到主函数的按键检测,对num
加一。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^5;
uchar temp;
uchar num;
void delay(uint z)//延时程序
{
uint x ,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display0()//显示效果1
{
uchar i;
temp=0xfe;
for(i=0;i<8;i++)
{
if(key1==0) break;//对按键进行检测
P1=temp;
temp=_crol_(temp,1);
delay(50);
}
P1=0xff;
temp=0x7f;
for(i=0;i<8;i++)
{
if(key1==0) break;//对按键进行检测
P1=temp;
temp=_cror_(temp,1);
delay(50);
}
}
void display1()//显示效果2
{
uchar i;
temp=0xf8;
for(i=0;i<8;i++)
{
if(key1==0) break;//对按键进行检测
P1=temp;
temp=_crol_(temp,1);
delay(50);
}
P1=0xff;
temp=0x1f;
for(i=0;i<8;i++)
{
if(key1==0) break;//对按键进行检测
P1=temp;
temp=_cror_(temp,1);
delay(50);
}
}
void display2()//显示效果3
{
uchar i;
temp=0x99;
for(i=0;i<8;i++)
{
if(key1==0) break;//对按键进行检测
P1=temp;
temp=_crol_(temp,1);
delay(50);
}
P1=0xff;
temp=0xcc;
for(i=0;i<8;i++)
{
if(key1==0) break;//对按键进行检测
P1=temp;
temp=_cror_(temp,1);
delay(50);
}
}
void anjian()
{
if(key1==0)//按键检测
{
delay(5);//按键消抖延时
if(key1==0)
{
num++;
if(num==3) num=0;
}
while(!key1);
}
}
void main()
{
while(1)
{
anjian();//按键检测并赋num值
switch(num)
{
case 0:display0();break;
case 1:display1();break;
case 2:display2();break;
}
}
}
4. 利用单片机控制8个发光二极管,设计8个灯同时闪烁的控制程序
方法:
1:设定一个变量i,可以从0到3循环的变化
2:检测一个经过消抖处理的按键,按一下,i+1
3:当i值为各个值时,执行相应的花样。
流水灯参考程序
#include
#include
#define uchar unsigned char
uchar j,temp;
void delay(unsigned int ms)
{
uchar t;
while(ms--)
for(t=0;t<123;t++);
}
void main()
{
P1=0xff;
delay(500);
temp=0xfe; //有点怪,led接在P2.3~P2.6
for(j=0;j<4;j++)
{
P1=temp;
delay(500);
temp=_crol_(temp,1);
}
P1=0xff;
while(1);
}
5. 用单片机控制8个发光二极管如流水般先从右往左再从左往右依次亮灭,每个状态持续0.5秒,循环3次后
#include <reg52.h>
#define uchar unsigned char
uchar sum;
uchar a;
/*void delay void()
{
uchar i,j;
for(i=0;i<119;i++)
{
for(j=0;j<50;j++){;}
}
}
*/
void mian(void)
{
a=0x01;
P1=a;
TMOD=0X01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-50000)/256; //0.05秒,后面增加十倍以达到0.5s
TL0=(65536-50000)%256;
while(1)
{
;
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
sum++;
if(sum==10)
{
sum=0;
a=a>>1;
P1=a;
}
}
这是无限第一个循环,再在main里加些控制语句就能左右三次最后全亮
6. 哪位大神帮忙写下程序 利用单片机控制8个发光二极管,设计8个灯同时亮的控制程序怎么写
八个灯接在单片机的P1口(P0,P2,P3,P4都一样)
while(1)
{
delay(你想要延时的时间);
P1=0xff;
delay(你想要延时的时间);
P1=0;
}
注意led最好加驱动,不然单片机会坏的。
7. 用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;}
}
}
8. 某单片机控制系统有8个发光二极管。试画出89c51与外设的连接图并编程使它们由左向右轮流点亮。
void dly(void)
{unsigned long cnt=2e5;
while(cnt--);
}
void main(void)
{unsigned char flag,cnt=0;
while(1)
{cnt++;
if(cnt>=8)cnt=0;
flag=(0x1<<cnt);
P1=~flag;
dly();
}
}
9. 用单片机控制8个LED发光二极管,从右到左依次亮,时间间隔0.5秒,最后用BCD码表示16
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
MOV R2,#8
LOOP:
MOV P1,A
CLR C
RLC A
LCALL DELAY
DJNZ R2,LOOP
MOV P1,#16
SJMP $
DELAY:
MOV R3,#10
DLY1:
MOV R4,#200
DLY2:
MOV R5,#248
DJNZ R5,$
DJNZ R4,DLY2
DJNZ R3,DLY1
RET
END