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