㈠ 51單片機匯編控制8個流水燈
思路:
循環控制常亮狀態的值,將其從最高位循環到最低位。這個用於最後狀態的常亮
在常亮循環中,控制不是常亮的其它所有位進行再次循環,逐漸從最低位亮滅循環到最高位
代碼如下:
#include<reg51.h>
unsignedcharPData;//整體結果
unsignedcharCurrData;//變化的最高位
//延時,本函數是非精確延時,若需要精確延遲則需要根據本函數的匯編語句進行精確計算後調整循環體次數
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全滅狀態
for(i=8;i>0;i--){//控制常亮的位置,先從最高位開始,依次循環到最低位
for(j=0;j<i-1;j++){//從最低位循環到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位滅
delay(500);
}
PData=PData+(1<<(i-1));//置最高位為常亮狀態
P1=~PData;
delay(500);
}
//停機
while(1){
;
}
}
㈡ 使用單片機I/O口控制8隻LED燈。 1)點亮8個中的的第任意個LED燈。 使任意一個或多個LED燈閃爍
舉個簡單的例子,8個LED燈的正級分別接在P1.0到P.7上面,負極分別接在P2.0到P2.7上面,
P1 = 0xff; (P1口全部高電平) P2 = 0x00; (P2口全部低電平),此時電流通過P1口經LED流向P2口,8個燈全部點亮,如果P1不變,P2 = 0XFF; 此時由於P1與P2的介面全部是高電平,沒有電壓差也就沒有電流,LED全部熄滅,如果想讓某一個燈點亮,可以根據8421法則,P2.7 P2.6 P2.5 P2.4是高8位,P2.4 P2.3 P2.2 P2.1 P2.0是低8位
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
8 4 2 1 8 4 2 1
當p1 = 0xff; p2 = 0xfe的時候,就是P2.0那個小燈點亮,其他7個滅,p2 = 0xfe的這個F就是8+4+2+1 =15,對應16進制里的f, 同理E=8+4+2+0 =14,對應16進制里的e。
閃爍的話需要用到定時器,時間到了把當前P2對應的引腳取反一下就行了,比如當前P2.0 = 1; 定時器時間到了以後 ~P2.0 當然實際寫程序的時候不能直接這么寫,自己多復習下吧
㈢ 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);
}
(3)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;//所有的燈都亮著
}
}
㈣ 鍗曠墖鏈哄彲鎺у埗8涓鐏浠涔堟按騫
鍗曠墖鏈哄彲鎺у埗8涓鐏鐨勬按騫沖彇鍐充簬鍏蜂綋鐨勫疄鐜版柟寮忓拰搴旂敤鍦烘櫙錛屼笅闈浠庡垵綰у埌涓楂樼駭姘村鉤鍒嗗埆浠嬬粛錛
1.鍒濈駭姘村鉤錛氬傛灉鍙鏄閫氳繃綆鍗曠殑寰鐜鎺у埗8涓鐏鐨勪寒鐏錛岃繖鍙鏄涓涓鍩烘湰鐨勫崟鐗囨満鎺у埗鎶鑳姐傚叿浣撳疄鐜版柟娉曞彲浠ラ氳繃鍗曠墖鏈虹殑I/O絝鍙d笌8涓鐏榪炴帴錛岀劧鍚庝嬌鐢ㄧ畝鍗曠殑寰鐜璇鍙ユ帶鍒舵瘡涓鐏鐨勪寒鐏鐘舵併備緥濡傦紝鍙浠ヤ嬌鐢–璇璦涓鐨刦or寰鐜錛屼緷嬈℃帶鍒舵瘡涓鐏鐨勪寒鐏錛屼粠鑰屽疄鐜版祦姘寸伅鐨勬晥鏋溿傝繖縐嶅疄鐜版柟寮忔瘮杈冪畝鍗曪紝鍙闇瑕佹帉鎻″熀鏈鐨勫崟鐗囨満緙栫▼鍜岀數璺榪炴帴鎶鑳藉嵆鍙銆
2.涓綰ф按騫籌細濡傛灉鑳藉熼氳繃緙栫▼瀹炵幇鏇村嶆潅鐨勬帶鍒墮昏緫錛屾瘮濡傚疄鐜版祦姘寸伅銆佽窇椹鐏絳夊氱嶆晥鏋滐紝閭d箞灝遍渶瑕佹洿楂樼駭鐨勫崟鐗囨満緙栫▼鎶鑳藉拰鐢佃礬璁捐¤兘鍔涖傚湪瀹炵幇榪欎簺鏁堟灉鏃訛紝鍙鑳介渶瑕佷嬌鐢ㄥ埌鏇村氱殑鍗曠墖鏈鴻祫婧愶紝濡傚畾鏃跺櫒銆佷腑鏂絳夈傚悓鏃訛紝涔熼渶瑕佽冭檻濡備綍浼樺寲紼嬪簭錛屼嬌寰楁帶鍒舵洿鍔犳祦鐣呫佺ǔ瀹氥傝繖縐嶅疄鐜版柟寮忛渶瑕佹湁涓瀹氱殑鍗曠墖鏈虹紪紼嬬粡楠屽拰鐢佃礬璁捐¤兘鍔涖
3.楂樼駭姘村鉤錛氬傛灉鑳藉熺粨鍚堜紶鎰熷櫒瀹炵幇鏅鴻兘鍖栨帶鍒訛紝閭d箞灝遍渶瑕佹洿楂樼駭鐨勫崟鐗囨満緙栫▼鎶鑳藉拰鐢佃礬璁捐¤兘鍔涖備緥濡傦紝鍙浠ヤ嬌鐢ㄦ俯搴︿紶鎰熷櫒銆佸厜浼犳劅鍣ㄧ瓑浼犳劅鍣ㄦ嫻嬬幆澧冨弬鏁幫紝鐒跺悗鏍規嵁榪欎簺鍙傛暟鎺у埗8涓鐏鐨勪寒鐏銆傝繖縐嶅疄鐜版柟寮忛渶瑕佽冭檻鍒板備綍涓庝紶鎰熷櫒榪涜岄氫俊銆佸備綍澶勭悊浼犳劅鍣ㄦ暟鎹銆佸備綍鏍規嵁鏁版嵁榪涜屾帶鍒剁瓑澶氫釜鏂歸潰錛岄渶瑕佹湁娣卞帤鐨勫崟鐗囨満緙栫▼鍜岀數璺璁捐¤兘鍔涖
㈤ 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(5)8個燈單片機擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈥ 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(6)8個燈單片機擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
㈦ 單片機怎麼實現一個開關控制八個燈按一下亮一個按八下八個燈都亮匯編語言程序
用一個寄存器做變數就可以。
假如按鍵是一個開個,接在P1.0,八個燈在P0,低電平燈亮
程序是這樣的
MOV 30H ,#00
LOP :
SETB P1.0
JNB P1.0, PRESS
AJMP LOP
PRESS:
INC 30H
MOV A,30H
CJNE A,#9,L_NEXT
MOV 30H,#1
L_NEXT:
JNB P1.0,$
MOV A,30H
CJNE A,#1 ,LED1_ON
CJNE A,#2, LED2_ON
CJNE A,#3, LED3_ON
CJNE A,#4, LED4_ON
CJNE A,#5, LED5_ON
CJNE A,#6, LED6_ON
CJNE A,#7, LED7_ON
CJNE A,#8, LED8_ON
LJMP LOP
LED1_ON: MOV P0,#0FEH //亮一個燈
LJMP LOP
LED2_ON: MOV P0,#0FDH //亮一個燈
LJMP LOP
LED3_ON: MOV P0,#0F8H //亮一個燈
LJMP LOP
LED4_ON: MOV P0,#0F0H //亮一個燈
LJMP LOP
LED5_ON: MOV P0,#0E0H //亮一個燈
LJMP LOP
LED6_ON: MOV P0,#0D0H //亮一個燈
LJMP LOP
LED7_ON: MOV P0,#080H //亮一個燈
LJMP LOP
LED8_ON: MOV P0,#00H //亮一個燈
LJMP LOP