Ⅰ 單片機匯編語言,怎樣讓雙燈左移循環
led equ p1
org 0
jmp main
main:
mov a,#0xfc
mov led,a
call delay
rl a
rl a
jmp main
delay:
............
ret
end
Ⅱ 單片機用c語言編程,使led燈管從中間開始兩個燈向兩邊循環閃爍
//設是AVR單片機,為1表示LED亮,8個LED接在A上
a[]={0x18,0,0x24,0,0x42,0,0x81,0,0x42,0,0x24,0};
for (int i=0;i<12;++i)
{
PORTA=a[i];//A口接了8個LED
delay(500);//延時函數可自己寫
}
//如果是其它單片機就請自己修改了。
Ⅲ 請問我寫的單片機八個LED燈左移後再右移的程序錯在哪裡
主要是左移補0或者補1的問題。P1=>>1|0;P1=<<1|1; 補1是滅,補0是亮。
剛好之前寫過,看一下和你的不同之處。
#include"reg52.h"
#define uint unsigned int
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
//P1=0xff;
while(1)
{ P1=0x7f;
do{
P1=P1>>1|0;
delay(100);}
while(P1!=0x00);
do{
P1=P1<<1|1;
delay(100);}
while(P1!=0xff);
}
}
Ⅳ 求你89C52單片機流水燈移動的程序 第一次一個LED左移8次,第二次二個LED
#include<reg52.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2;//這里填你LED連接的埠(引腳),不一定是P2,也有可能是P3、P0
void delay(u16 i)
{
while(i--);
}
void shan1()
{
u8 i;
led=0x01;//我默認led輸入高電平1是亮,具體按照你實際情況,低電平亮就0xfe;
for(i=0;i<7;i++)//已經點亮一個了,所以剩7個。
{
led=_crol_(led,1);//左移1位
}
led=0x00;
}
void shan2()
{
u8 i;
led=0xc0;//我默認led輸入高電平1是亮,具體按照你實際情況
for(i=0;i<6;i++)已經點亮兩個個了,所以剩6個。
{
led=_cror_(led,1);//右移一位
delay(1000);
}
led=0x00;
}
void shan2()
{
u8 i;
led=0xc0;//我默認led輸入高電平1是亮,具體按照你實際情況
for(i=0;i<6;i++)
{
led=_cror_(led,1);
delay(1000);
}
led=0x00;
}
void main()
{
while(1)
{
shan1();
delay(1000);
shan2();
}
}
Ⅳ 單片機上電後8個led燈閃爍,按下k1一個燈從左右移動,按下k2兩個燈左右移動,
沒有具體的電路圖,就只以P1口作為基本輸驅動口進行說明。主程序需要一個delay函數進行led亮滅的延時。當然你首先要先進行P1口和開關按鍵的預定義,這個要看你板子的原理圖。
void delay(int l)
{
int
a,b;
for(a=0;a<l;a++)
{
for(b=0;b<10000;b++);
}
}
void main()
{
int m=0;
//設置開關為P3.7和P3.8,低有效
while(1)
{
if(P3.7 ==0)
{
m = 0;
}
else if(P3.8 ==0)
{
m = 1;
}
if (m == 0)
{
P1.0=1;
delay(10);
P1.0=0;
delay(10);
P1.1=1;
...//以此類推到P1.7
}
else if(m ==1)
{
P1.0=1;
P1.1=1;
delay(10);
P1.0=0;
P1.1=0;
delay(10);
P1.2 =1;
P1.3 =1;
delay(10);
...//同理以此類推即可
}
}
}
Ⅵ 燈光移位控製程序(單片機程序)
摘要:介紹了單片機實現多路燈光自動控制系統的軟、硬體設計。
關鍵詞:單片機自動控制可控硅抗干擾
利用單片機豐富的軟硬體資源實現對各種廣告牌多路燈光自動控制,與傳統的電子線路控制器相比,具有可編程、體積小、控制靈活、操作方便、控制時間可變可調等優點。
我們為呼市郵政局設計並安裝了上述單片機多路燈光自動控制系統。下面就該系統的軟、硬體設計作介紹。
1系統結構及工作原理
系統整體結構如圖1。
圖1系統結構
8031單片機是該系統的核心部件,其主要功能:(1)燈光控制的軟體編程;(2)干擾信號的處理及復位;(3)光強及時間定時的檢測及控制。
單片機的控製程序通過對光強或時間的檢測,自動開啟(夜間)或關閉(白天)燈光系統,每1路燈光設備與8031內存控制位相對應,單片機通過P3.0(RXD)和P3.1(TXD)多功能口,利用串列通信方式0實現不同控制代碼的輸出,從而完成了多路燈光設備各種變化的自動循環顯示。
28031單片機控制系統功能分析
2.1光強或時間定時的檢測及控制
如圖2所示,當8031單片機P1.4的控制開關撥到+5V時,系統的開啟或關閉由光強控制。這時,當光線較強時(白天),光耦二極體電阻變小,三極體Q1導通,P1.7為低電平;當光線暗時(夜間)光耦二極體變大,三極體Q1截止,P1.7為高電平。8031單片機控製程序每隔一定時間(約5ms)采樣P1.7端的狀態,然後根據其高低電平選擇開啟或關閉相應的燈光控制代碼發送。圖2中與光耦二極體並聯的可調電位器可以調整三極體Q1的截止導通狀態,從而實現對光控的微調。
圖2光耦電路
當P1.4撥至接地狀態時,8031單片機程序進入時間控制子程序,8031單片機把內部定時器0設置成日歷時鍾計數(其初值可以用按鈕設置),當程序查詢到表格內的開啟或關閉初值(表格的初值可通過按鈕及數碼管顯示來輸入或修改)與單片機時鍾當前值相同時,則自動發送相應的開啟或關閉輸出控制代碼。
2.2雙向可控硅控制電路
由於負載一般為大功率器件(電壓從幾百伏至上千伏,電流從幾安培至幾十安培),因此,8031單片機工作部分與可控硅觸發部分採用MOC3021雙向可控硅輸出型光電耦合器,圖3為1路可控硅觸發控制電路。
圖3可控硅觸發電路
可控硅TR的門極觸發電流為50mA,觸發電壓為2V,則最小觸發電壓為:
VT=R1,IGT+VGT+VTM=300×0.05+2+3=20V
對應的最小控制角α為:
其中:IGT為可控硅TR的最小觸發電流,VGT為可控硅TR的最小觸發電壓,VTM為MOC3021輸出壓降(3V),Vp為交流工作電壓的峰值。
在使用中發現,當感性負載時,有時會引起可控硅誤觸發。經分析發現,當感性負載時,由於電壓上升率dv/dt較大,在阻斷狀態下,可控硅的PN結相當於1個電容,當突然受到正向電壓、充電電流過門極PN結時,起到了觸發電流的作用,造成MOC3021的輸出迴路可控硅誤導通。為此,我們對上述電路進行了修正,如圖4所示。在輸出迴路中加入R2和C1組成RC迴路,降低dv/dt。按照MOC3021的技術指標,允許最大的電壓上升率dv/dt=10V/s,結溫上升時dυ/dt下降,在極端的工作條件下,dv/dt=0.8V/s。
圖4修改後的觸發電路
R2、R1之和與最小觸發電壓與可控硅門極電流的關系為:
C1取0.2μF。
同理,在TR輸出端加上RC濾波網路,從而使TR輸出電壓上升率下降。
2.3單片機工作迴路的干擾及解決措施
由圖1可知,光耦電路利用MOC4021將輸入弱信號與輸出強信號進行隔離,但在實際運行時,單片機系統仍有較強的干擾信號存在,常常出現死機或程序飛跑現象。分析認為,由於輸出的大電流及電壓均工作在開關狀態,輸出高次諧波通過電源迴路對8031單片機產生了較大的影響,因此,我們設計了電源濾波電路及硬體復位電路,對電路的干擾進行了有效的控制。其中,硬體復位電路如圖5所示。圖5中74LS123為雙路可再觸發單穩態多諧振盪器,通過外接阻容參數,可產生不同寬度的正負脈沖,其真值表如表1。
圖5復位電路
表174LS123真值表
輸入 輸出
deleteAB QQ
LXX LH
XHX LH
XXL LH
HL^
HIH
LH
由表1及圖5電路可知:由於1腳A接地,2腳B接8031單片機P1.0,正常運行時,循環程序不斷從P1.0發送代碼信號,使2腳不斷有上升沿出現,因此,13腳保持高電平,則5腳輸出低電平,保持8031RESET腳低電平的需要。當程序飛跑或死機時,2腳電位不再變化,使5腳產生一高電平脈沖,促使8031復位,重新啟動。
3系統結構特點及應用范圍
該系統軟硬體均採用模塊化結構,1塊控制板能控制16路輸出,輸出信號通過8031串列口RXD及TXD端經74LS164串入並出移位寄存器輸出,因此,軟體輸出代碼高達上千路信號,硬體控制板根據需要可以任意擴充,只要電源變壓功率相應增大即可。該系統可廣泛應用於霓紅燈,多路塑料管燈及多路色燈的控制。
另外,系統具有與微機串列口RS-232的通信介面,必要時可以與微機連接,這樣,多路燈光控制參數及時間控制參數在微機上可隨時修改,使控制變得更加靈活。
作者單位:呼和浩特內蒙古大學電子工程系(010021)
參考文獻
1餘永權.單片機應用系統的功率介面技術.北京:北京航空航天大學出版社,1992;104~108
2李樹華.IBM-PC微機與發光管顯示屏的連網通訊.內蒙古大學學報(自然科學版),1993;(4):441~443
3Xicor Inc.New Proct and Applications Information for Design engineers.EDN,1994;39(25):159~160
Ⅶ 51單片機,一個按鍵怎麼控制兩個燈輪流閃動,看詳細說明
先設置一個位變數,表徵現在是啟動還是停止。
再設置一個位變數,表徵應該是LED1亮還是LED2亮。
然後在檢測到按鍵的同時,啟動定時器,取反第一個變數,計時五秒後取反第二個變數。
Ⅷ 8個LED指示燈循環閃爍的程序(單片機)
1:設置一個變數i,它可以從0循環到3
2:檢測一個已取消緩沖的鍵。按「+1」
3:當I值為每個值時,執行相應的模式。
水量燈參考程序
#include
#include
#定義uchar無符號字元
Ucharj,溫度;
無效延遲(無符號整型ms)
{
Uchart;
(女士)
對於(t = 0;T < 123;T + +);
}
Voidmain()
{
P1=0XFF;
延遲(500);
Temp=0xfe;//奇怪,led連接在P2.3~P2.6
對於(j = 0;J < 4;J + +)
{
P1=temp;
延遲(500);
Temp=_crol_(Temp,1);
}
P1=0XFF;
(1);
}
(8)單片機雙燈閃爍左右移動程序擴展閱讀:
注意事項:
#include「reg52。這個文件為單片機定義了一些特殊的功能寄存器
Typedef無符號int在16以下;//以聲明的方式定義數據類型
無符號charu8;
//LED燈
Sbitleda=P0;
Sbitled1=P0^0;
Sbitled2=P0^1;
Sbitled3=P0^2;
Sbitled4=P0^3;
Sbitled5=P0^4;
Sbitled6=P0^5;
Sbitled7=P0^6;
Sbitled8=P0^7;
無效延遲(16歲以下)
{
,(我);
}
Voidmain()
{
而(1)
{
勒達=1;//所有的燈都亮著
//從左到右熄滅
Led1=0;
延遲(50000);//延遲時間約為450毫秒
Led2=0;
延遲(50000);//延遲時間約為450毫秒
Led3=0;
延遲(50000);//延遲時間約為450毫秒
Led4=0;
延遲(50000);//延遲時間約為450毫秒
Led5=0;
延遲(50000);//延遲時間約為450毫秒
Led6=0;
延遲(50000);//延遲時間約為450毫秒
Led7=0;
延遲(50000);//延遲時間約為450毫秒
Led8=0;
延遲(100000);//延遲大約900毫秒
//從右到左照明
Led8=1;
延遲(50000);//延遲時間約為450毫秒
Led7=1;
延遲(50000);//延遲時間約為450毫秒
Led6=1;
延遲(50000);//延遲時間約為450毫秒
Led5=1;
延遲(50000);//延遲時間約為450毫秒
Led4=1;
延遲(50000);//延遲時間約為450毫秒
Led3=1;
延遲(50000);//延遲時間約為450毫秒
Led2=1;
延遲(50000);//延遲時間約為450毫秒
Led1=1;
延遲(50000);//延遲時間約為450毫秒
勒達=1;//所有的燈都亮著
}
}
Ⅸ 在線等,急,用C語言編程,實現單片機控制兩個LED燈:當S1開關閉合時,兩個LED燈交替閃爍
判斷開關對應的埠電平,改變led對應埠即可。
交替閃爍就是在循環中讓兩個LED埠交替高低電平。
循環中加入延時。延時函數我用循環實現。題目沒有要求精準延時,如精準需用中斷。
#include <reg52.h>
#define uInt unsigned int
sbit D1=P2^0;
sbit D2=P2^1;
sbit S1=P3^2;
void mDelayuS( uInt us );
void main()
{
if(S1)
D1=D2=0;
while(S1==0) D1=!D2,mDelayuS(1000),D2=D1;
}
void mDelayuS( uInt us )
{
while ( us -- ); /* 24MHz MCS51 */
}
Ⅹ 單片機左右來迴流水燈程序,兩個兩個的燈亮能用keil生成.hex文件。
自己現成想的匯編的要不要啊哈哈
MOV A,#0011111
LOOP:
MOV P0,A
CALL DELAY
RR A
JMP LOOP
DELAY: ;延時程序
MOV R3,#20
D1:MOV R4,#20
D2:R5,#248
DJNZ R5,$
DJNZ R4,D2
DJNZ R2,D1
RET
這只是2個燈右移程序,如果達到你想要的效果還有計數8次然後進入計數左移動8次,懂基本原理什麼都好辦哎!糾結!!!!!!!!!