Ⅰ 51單片機中如何用匯編語言編寫流水燈
流水燈就是51單片機控制led燈依次點亮的控制方式。具體程序如下:
ORG 0000H;復位啟動
AJMP START;
ORG 001BH;T1中斷
AJMP T1INT;
;定義變數========================
YSJSEQU 30H;延時計數器
LEDEQU 31H;LED控制緩沖器
;主程序==========================
START:MOV LED,#0FEH;初始化數據
MOV YSJS,#0;
MOV TMOD,#10H;定時器1工作於方式1,16位定時器
MOV TL1,#0B0H;設置定時初值
MOV TH1,#3CH;定時時間=50mS
SETB ET1;使能定時器1中斷
SETB TR1;啟動定時器1
SETB EA;開總中斷
MOV P1,LED;初始化流水燈
LOOP:JMP LOOP;循環等待中斷
T1INT:PUSH PSW;定時器1中斷程序
PUSH ACC;保護現場
MOV TH1,#3CH;定時時間=50mS
MOV TL1,#0B0H;
INC YSJS;
PUSH ACC;保護ACC
MOV A,YSJI;
CJNE A,#2,QT1;50mS*2=100mS
MOV P1,LED;
MOV A,LED;
RL A;累加器A的值循環左移1位
MOV LED,A;
MOV YSJS,#0;
QT1:POP ACC;恢復現場
POP PSW;
RETI;返回主程序
END;匯編程序結束
(1)51單片機流水燈編寫擴展閱讀:
實現流水燈的三個方法:
第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。
第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。
第三種,庫函數實現流水燈。利用左移函數進行。
Ⅱ 單片機流水燈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++);
}
(2)51單片機流水燈編寫擴展閱讀
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);
}
}
}
Ⅲ 51單片機流水燈程序
程序如下:
#include <reg52.h>
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3;
sbit led5 = P2^4;
sbit led6 = P2^5;
sbit led7 = P2^6;
sbit led8 = P2^7;
void main()
{
int i,j;
//點亮第一個燈
led1 = 1;
led2 = 0;
led3 = 0;
led4 = 0;
led5 = 0;
led6 = 0;
led7 = 0;
led8 = 0;
//延時1秒
for(i = 0;i < 110; ++i)
{
for(j = 0; j < 1000; ++j)
{
;//什麼也不做
}
}
//點亮第二個燈
led1 = 0;
led2 = 1;
led3 = 0;
led4 = 0;
led5 = 0;
led6 = 0;
led7 = 0;
led8 = 0;
//點亮剩餘的燈
//省略……
while(1);
}
流水燈幾點說明:
void:因為該延時函數不需要返回值,所以寫為void
delay1s:該函數的函數名,命名需要符合C語言的標識符命名規則。
(): 不需要傳入參數,所以括弧中為空
至此我們可以把流水燈程序寫為以下形式:
Ⅳ 如何用單片機實現流水燈,從一依次亮到八,再從八依次亮
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件。
#define uchar unsigned char //定義無符號字元。
#define uint unsigned int //定義無符號整數。
void delay(uint); //聲明延時函數。
硬體特徵
1、單片機的體積比較小, 內部晶元作為計算機系統,其結構簡單,但是功能完善,使用起來十分方便,可以模塊化應用。
2、單片機有著較高的集成度,可靠性比較強,即使單片機處於長時間的工作也不會存在故障問題。
3、單片機在應用時低電壓、低能耗,是人們在日常生活中的首要選擇, 為生產與研發提供便利。
Ⅳ 51單片機,要求是讓流水燈正常運行,要求是數碼管顯示學號流水燈運行,然後打開開關數碼管開始計數
#include "AT89X52.h"
#include "intrins.h"
#define LEG_LINE P2
#define LEG_DUAN P0sbit Button = P3^7;
unsigned long dispalyCount;
unsigned int mCount;unsigned char table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void display(unsigned long displaydata)
{
LEG_LINE = 0x01;
LEG_DUAN = table[displaydata / 10000000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
LEG_LINE = 0x02;
LEG_DUAN = table[displaydata % 10000000 / 1000000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
LEG_LINE = 0x04;
LEG_DUAN = table[displaydata % 10000000 % 1000000 / 100000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
LEG_LINE = 0x08;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 / 10000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
LEG_LINE = 0x10;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 % 10000 / 1000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
LEG_LINE = 0x20;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 % 10000 % 1000 / 100];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
LEG_LINE = 0x40;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 % 10000 % 1000 % 100 / 10 ];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
LEG_LINE = 0x80;
LEG_DUAN = table[displaydata %10 ];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;
}unsigned long displaydata = 11;
void Timer1init(void)
{
TMOD = 0X20;
TL1 = 0x00;//??????
TH1 = 0x4C;//??????
ET1 = 1;
TR1 = 1;//???1????
EA = 1;
}unsigned char KeyStatus;
void main(void)
{
Timer1init();
while(1)
{
if (Button == 0)
{
mCount = 100;
while(mCount--);
if (Button == 0)
{
KeyStatus = ~KeyStatus;
while(!Button);
}
}
if (!KeyStatus)
{
display(displaydata);
dispalyCount = 0;
}
else
{
display(dispalyCount);
}
}
}unsigned int count1,count2;
unsigned char Temp = 0xfe;
void Time1() interrupt 3
{
TL1 = 0x00;//??????
TH1 = 0x4C;//??????
if (count1++ == 1000)
{
count1 = 0;
Temp = _cror_(Temp,1);
P1 = Temp;
}
if (count2++ == 10)
{
count2 = 0;
if(dispalyCount++ >= 88888888)
{
dispalyCount = 0;
}
}
}
Ⅵ 51單片機流水燈用C語言編寫的設計程序
其實很簡單
就是用_cror_()函數或者 _crol_()函數,第一個是右移第二個是左移