A. 單片機如下電路,讓顯示燈從上往下依次點亮,不斷循環。
/* 實驗目的:初步了解單片機I/O口的工作原理,進一步掌握51單片機的匯編指令。 * 實驗內容:用匯編指令對單片機I/O口進行編程,控制8個發光二極體的流水亮滅。 */ /* 程序詳細功能介紹: *做單一燈的左移右移,八個發光二極體L0-L7分別接在單片機的P0.0-P0.7介面上, *輸出「0」時,發光二極體亮,開始時P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重復循環。 */ ORG 0000H LJMP START ORG 0030H START: MOV R2,#8 ;左移次數 MOV A,#0FEH ;A的初始值,即 P0.0的L0 點亮 SETB C LOOP: MOV P0,A LCALL DELAY RLC A ;左移流水燈(帶進位的左移),即亮點向P0口的高位移動 DJNZ R2,LOOP MOV R2,#8 ;右移次數 LOOP1: RRC A ;右移流水燈 MOV P0,A LCALL DELAY DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#10 ;延時子程序,改變R5,R6,R7 的值,可以改變延時的時間,從而改變流水燈移動速度 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END
B. 單片機控制的循環彩燈控制系統的設計
剛剛寫過一個:
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/5adeb99112822680a877a415.html
C. 單片機實驗 :實現LED燈的循環依次閃爍
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
void delay(uint z)//延時2ms程序
{uint x,y;
for(x=z;x<z;x++)
for(y=0;y<110;y++);
}
void main()
{
while(1)
{
P1_3=1;
P1_0=0;
delay(250);
P1_0=1;
P1_1=0;
delay(250);
P1_1=1;
P1_2=0;
delay(250);
P1_2=1;
P1_3=0;
delay(250);
}
}
方法2:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
void main()
{ TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
while(1)
{if(j==5)
P0_0=0;
if(j==10)
{P0_1=0;
P0_0=1;}
if(j==15)
{P0_2=0;
P0_1=1;
}
if(j==20)
{P0_3=0;
P0_2=1;
j=0;
}
}
}
void timer0_init() interrupt 1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
j++;
}
D. 8051單片機,用P0口控制8個LED實現循環彩燈.循環顯示規律為:全亮,全滅,依次點亮全滅。 間隔時間1秒。
#include<reg51.h>
#define uchar unsigned char
uchar times,cnt;
uchar led[]={0x00,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=40)
{
times=0;
P0=led[cnt];
cnt++;
cnt%=11;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
//程序很簡單,你自己加註釋和完成其他工作吧。
E. 基於51單片機的循環彩燈控制設計
老兄,東西不復雜的,自己思考,別碰到1+1的問題也要來問。要給你畫流程,沒人有那麼多時間的,
硬體:51用p1口接電阻驅動三級管,用三極體驅動二極體動作。
軟體:網上很多現成的資料,自己去整理。
;************;
;小燈控製程序;
;************;
;
;************;
;中斷入口程序;
;************;
;
ORG 0000H ;程序執行開始地址
LJMP START ;跳至START執行
ORG 0003H ;外中斷0中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 000BH ;定時器T0中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 0013H ;外中斷1中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 001BH ;定時器T1中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 0023H ;串列口中斷入口地址
RETI ;中斷返回(不開中斷)
;
;************;
; 初始化程序 ;
;************;
;
CLEAR: MOV 20H,#00H ;20H單元內存清0(閃爍標志清0)
SETB 00H ;20H.0位置1(上電時自動執行閃爍功能1)
RET ;子程序返回
;
;************;
; 主 程 序 ;
;************;
;
START:ACALL CLEAR ;調用初始化子程序
MAIN: LCALL KEYWORK ;調用鍵掃描子程序
JB 00H,FUN0 ;20H.0位為1時執行FUN0
JB 01H,FUN1 ;20H.1位為1時執行FUN1
JB 02H,FUN2 ;20H.2位為1時執行FUN2
JB 03H,MAIN ;備用
AJMP MAIN ;返回主程序MAIN
;
;************;
; 功能程序 ;
;************;
;第1種閃爍功能程序
FUN0: MOV A,#0FEH ;累加器賦初值
FUN00:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
JNB ACC.7,MAIN ;累加器最高位為0時轉MAIN
RL A ;累加器A中數據循環左移1位
AJMP FUN00 ;轉FUN00循環
;
;第2種閃爍功能程序
FUN1:MOV A,#0FEH ;累加器賦初值
FUN11:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
JZ MAIN ;A為0轉MAIN
RL A ;累加器A中數據循環左移1位
ANL A,P1 ;A同P1口值相與
AJMP FUN11 ;轉FUN11循環
;
; 第3種閃爍功能程序
FUN2:MOV A,#0AAH ;累加器賦初值
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
CPL A ;A中各位取反
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
AJMP MAIN ;轉MAIN
;************;
; 掃鍵程序 ;
;************;
;
KEYWORK:MOV P3,#0FFH ;置P3口為輸入狀態
JNB P3.0,KEY0 ;讀P3.0口,若為0轉KEY0
JNB P3.1,KEY1 ;讀P3.1口,若為0轉KEY1
JNB P3.2,KEY2 ;讀P3.2口,若為0轉KEY2
JNB P3.3,KEY3 ;讀P3.3口,若為0轉KEY3
RET ;子程序返回
;
;閃爍功能0鍵處理程序
KEY0:LCALL DL10MS ;延時10毫秒消抖
JB P3.0,OUT0 ;P3.0為1,子程序返回(干擾)
SETB 00H ;20H.0位置1(執行閃爍功能1標志)
CLR 01H ;20H.1位清0
CLR 02H ;20H.2位清0
CLR 03H ;20H.3位清0
OUT0:RET ;子程序返回
;
; 閃爍功能1鍵處理程序
KEY1:LCALL DL10MS
JB P3.1,OUT1
SETB 01H ;20H.1位置1(執行閃爍功能2標志)
CLR 00H
CLR 02H
CLR 03H
OUT1:RET
;
;閃爍功能2鍵處理程序
KEY2:LCALL DL10MS
JB P3.2,OUT2
SETB 02H ;20H.2位置1(執行閃爍功能3標志)
CLR 01H
CLR 00H
CLR 03H
OUT2:RET
;
;閃爍功能(備用)鍵處理程序
KEY3:LCALL DL10MS
JB P3.3,OUT3
SETB 03H ;20H.3位置1(執行備用閃爍功能標志)
CLR 01H
CLR 02H
CLR 00H
OUT3:RET
;
;************;
; 延時程序 ;
;************;
;0.5毫秒延時子程序,執行一次時間為513微秒
DL512:MOV R2,#0FFH
LOOP1: DJNZ R2,LOOP1
RET
;
;10毫秒延時子程序(調用20次0.5毫秒延時子程序)
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
;
;延時子程序,改變R4寄存器初值可改變閃爍的快慢(時間為15×25毫秒)
DL05S:MOV R4,#0FH
LOOP3: LCALL DL25MS
DJNZ R4,LOOP3
RET
;
;25毫秒延時子程序,用調用掃鍵子程序延時,可快速讀出功能按鍵值
DL25MS:MOV R5,#0FFH
LOOP4:LCALL KEYWORK
DJNZ R5,LOOP4
RET
END ;程序結束
F. 8051單片機,用P0口控制8個LED實現循環彩燈。
跑馬燈。網上一大把。
我就解釋下間隔一秒的那個,時間常數。
看你用的定時器方式。一般用方式1。若頻率是24mhz,機器周期為0.5us。所以計數次數為1s/0.5us=200000次超過了范圍。所以用循環。可以50000循環4次或其他次數。算出技術初值。
G. 這是個單片機控制循環彩燈程序,哪位高手具體解釋下這個程序,實現的彩燈花樣有哪幾種
DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH DB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H 這個是彩燈循環花樣 其中把十六進制數換成二進制的 是一的位彩燈就亮。比如第一個01H換成二進制就是00000001,所以是第一個燈亮,依此可推出彩燈循環花樣
H. 基於單片機的彩燈循環控制器設計
由於工作比較忙,所以只能給你講個大概的思路!
循環發光,奇,偶發光,用三個鍵來分別控制,按下那個鍵就怎麼發光。
循環發光就是I/O埠依次有輸出就可以了,每個輸出埠延時就可以了。
奇發光和偶發光就是跳一個埠輸出就可以了,中間也用延時。這兩個程序要分開來寫,不要放在一起攪合,到時候自己都分不清楚了。
彩燈的顯示時間間隔可以設置2個鍵來控制,一個加,一個減。他們都是用來控制延時參數的。
I. 求單片機彩燈循環控製程序
ORG0000H
AJMPMAIN
ORG0100H
MAIN:JBP2.0,m1
JBP2.1,m2
JBP2.2,m3
JBP2.3,m4
JBP2.4,m5
JBP2.5,m6
JBP2.6,m7
JBP2.7,m8
SJMPMAIN
m1:MOVR1,#02H;四亮四閃
LOOP:MOVP1,#00H
XRLA,#0AAH
MOVP1,A
CALLDELAY
DJNZR1,LOOP
SJMPMAIN
m2:MOVR1,#08H;向右閃爍
MOVA,#0FEH
LOOP1:MOVP1,A
CALLDELAY
RLA
DJNZR1,LOOP1
SJMPMAIN
m3:MOVR1,#02H;整體閃爍
LOOP2:MOVP1,#00H
CALLDELAY
MOVP1,#0FFH
CALLDELAY
DJNZR1,LOOP2
SJMPMAIN
m4:MOVR1,#08H;奇數向右閃爍
MOVA,#0AAH
LOOP3:MOVP1,A
RRA
CALLDELAY
DJNZR1,LOOP3
SJMPMAIN
m5:MOVR1,#08H;兩邊中間
LOOP4:MOVP1,#3CH
CALLDELAY
MOVP1,#0C3H
CALLDELAY
;MOVP1,#7EH
;CALLDELAY
;MOVP1,#0BDH
;CALLDELAY
;MOVP1,#0DBH
;CALLDELAY
;MOVP1,#0E7H
;CALLDELAY
DJNZR1,LOOP4
SJMPMAIN
m6:MOVR1,#04H
LOOP5:MOVP1,#0F0H;亮一半滅一半
CALLDELAY
MOVP1,#0FH
CALLDELAY
DJNZR1,LOOP5
JMPMAIN
m7:MOVR1,#02H;中間往兩邊滅
LOOP6:MOVP1,#00H
CALLDELAY
MOVP1,#18H
CALLDELAY
MOVP1,#3CH
CALLDELAY
MOVP1,#7EH
CALLDELAY
MOVP1,#0FFH
CALLDELAY
DJNZR1,LOOP6
LJMPMAIN
m8:MOVR1,#01H;雙燈循環
LOOP7:MOVP1,#3FH
CALLDELAY
MOVP1,#0FCH
CALLDELAY
MOVP1,#0CFH
CALLDELAY
MOVP1,#0F3H
CALLDELAY
DJNZR1,LOOP7
JMPMAIN
DELAY:MOVR5,#10
DEL1:MOVR7,#200
DEL:MOVR6,#123
NOP
NOP
DJNZR6,$
DJNZR7,DEL
DJNZR5,DEL1
RET
就是沒有數碼管顯示!一共八種模式!