流水灯c语言及汇编程序,流水灯C语言及汇编程序.doc
一、51單片機流水燈C語言源程序
文件說明:流水燈C程序程序說明:MCU采用AT89S51,外接11.0592M晶振,P2口輸出
?? #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個流水燈逐個閃動??? {???? P2=~temp;???? delay(100);?? //調用延時函數???? temp<<=1;??? }
temp=0x80;for(i=0;i<8;i++) //8個流水燈反向逐個閃動?? {??? P2=~temp;??? delay(100);?? //調用延時函數??? temp>>=1;?? }??? temp=0xFE;for(i=0;i<8;i++) //8個流水燈依次全部點亮??? {???? P2=temp;???? delay(100);?? //調用延時函數???? temp<<=1;??? }?? temp=0x7F;?? for(i=0;i<8;i++) //8個流水燈依次反向全部點亮??? {???? P2=temp;???? delay(100);?? //調用延時函數???? temp>>=1;??? }}
}void delay(uint t)?? //定義延時函數????? {register uint bt;??????? for(;t;t--)??????? for(bt=0;bt<255;bt++);????? }
二、匯編程序:(同樣P2為輸出端口)
左移依次循環:
ORG 0000H
SJMP MAIN
ORG 0030H 主程序開始的地址
MAIN: MOV R2,#08H 設置循環次數
MOV A,#0FEH 賦初值
NEXT: MOV P2,A 把初值送到P2口
LCALL DELAY 延時
RL A 左移一位
DJNZ R2,NEXT 判斷循環次數是否到,沒有跳轉到NEXT繼續執行
SJMP MAIN 重復循環
DELAY: MOV R3,#0FFH 延時程序
DEL2: MOV R4,#0FFH
DEL1: NOP
DJNZ R4,DEL1
DJNZ R3,DEL2
RET
END 結束
二邊散開后縮進(查表指令)
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#TAB 把表首地址送到DPTR
MOV R2,#06 設置循環次數
LOOP: CLR A 清零A
MOVC A,@A+DPTR 查表指令
MOV P1,A 把A中的值送到P1口
LCALL DELAY
總結
以上是生活随笔為你收集整理的流水灯c语言及汇编程序,流水灯C语言及汇编程序.doc的全部內容,希望文章能夠幫你解決所遇到的問題。