⑴ 51單片機從中間到兩邊逐個點亮再從兩邊到中間逐個點亮程序
這個流水燈程序最好用數組定義8個狀態的燈,這樣用for循環就可以實現了。簡潔明了,易讀性強,也容易理解。
#include<reg51.h>
#define uchar unsigned char
code uchar ledtab[10]=
{
0xff,0xe7,0xc3,0x81,0x00, //中間開始逐漸點亮
0xff,0x7e,0x3c,0x18,0x00 //兩邊開始逐漸點亮
}
void delay(int ms)
{
uchar i;
while(ms--)for(i=0;i<120;i++);
}
main()
{
uchar i;
while(1)
{
for(i=0;i<10;i++)P1=ledtab[i];
delay(1000);
}
}
⑵ 51單片機從左至右依次點亮
從左到右依次,可參考下列程序:
ORG 0000H
LOOP:
MOV R2, #255
MOV R3, #128
MOV P1, R2 ;全滅
MOV R4, #10
LP1:
CALL DL
DJNZ R4, LP1
;----------------------
MOV R5, #8 ;移位閃亮8次
LP2:
MOV A, R2
CLR C
RLC A
MOV R2, A
MOV A, R3
RL A
MOV R3, A
MOV P1, R2
MOV R4, #10
LP3:
CALL DL
XRL P1, A
DJNZ R4, LP3
DJNZ R5, LP2
;----------------------
MOV P1, #0 ;全亮
MOV R4, #10
LP4:
CALL DL
DJNZ R4, LP4
;----------------------
JMP LOOP
;----------------------
DL: ;精確延時應該使用定時器
DJNZ R7, $
DJNZ R7, $
NOP
DJNZ R6, DL
RET
END
;----------------------
看了這個,反向移位閃爍的程序,就可自己編寫了。
⑶ 單片機如下電路,讓顯示燈從上往下依次點亮,不斷循環。
/* 實驗目的:初步了解單片機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
⑷ 求一單片機程序 從兩邊倒中間依次點亮
是uart串口通訊的代碼哦看看main函數吧initiate_RS232();//串口初始化操作
EA = 1;//打開所有中斷
Uart_SendString("HELLO BKS !\r\n");//通過串口發送字元串
Uart_SendString("INPUT A CMD !\r\n");
Uart_SendString("Hello World");
while(1)//進入超循環
{
Dispose();
}
*讀數據*/
void Read(void) interrupt 4 //將Read函數連接到中斷4,也就是說一旦中斷4發生
//,就會執行Read函數。中斷4具體是什麼功能要看電路的設計
//從函數功能上看應該是串口讀中斷,當數據到達串口時產生中斷4
{
if (RI != 0)
{
RI = 0;
Uart_buf[DateNum] = SBUF;
Send_Byte(Uart_buf[DateNum]);
DateNum++;
if (DateNum>51) {
OVERFLOW();//溢出標志
}
}
}/*排序*/
void sort(void) //插入排序演算法,這個是數據結構課里講到的,作用是把一個數組
//中的數按順序排列
{
//插入排序演算法
unsigned char i,j;
for(i=2;i<=DateNum-2;i++)
if (Uart_buf[i]<Uart_buf[i-1]){
Uart_buf[0]=Uart_buf[i];
Uart_buf[i]=Uart_buf[i-1];
for(j=i-2;Uart_buf[0]<Uart_buf[j];--j)
Uart_buf[j+1]=Uart_buf[j];
Uart_buf[j+1]=Uart_buf[0];
}
Uart_buf[0]=0xaa;}/*檢測和處理*/
void Dispose()
{
unsigned char i=0;
if (Uart_buf[DateNum-1]==0xbb && DateNum!=1)
{
//測試標志
int time=3000;
BUZ=0;while(time--);BUZ=1;
sort();
for (i=0;i<DateNum;i++) Send_Byte(Uart_buf[i]); //向串口發送數據
DateNum=0;end=0;
}else if (Uart_buf[DateNum-1]==0xbb && DateNum==1) DateNum=0;
}
⑸ 51單片機數碼管如何依次點亮
51單片機數碼管依次點亮:選擇數碼管操作稱為位選,根據自己的開發板原理圖找到位選對應的管腳,以共陰極為例。要在編程時執行選中操作,只要給對應管腳低電平即可。段選同樣。如果每個單獨連接佔用管腳太多,很浪費硬體資源,所以採用多位串聯控制。
數碼管通常有兩種不同的接法,共陰極和共陽極,共陰極顧名思義就是講八個二極體的陰極連接在一起,這樣根據二極體導通原理,通過控制不同二極體陽極電平就可以控制數碼管顯示不同的數字。單個數碼管是由八個發光二極體連接而成,通過控制不同led點亮,可以使之顯示不同的數字。
注意區分兩個概念即段選和位選;位選指數碼管對應的位,例如圖共有八個數碼管,位選就是選中哪一個數碼管操作,段選則是控制數碼管顯示什麼數字。靜態顯示為了縮短代碼長度,一般都是採用匯流排式編程,顯示數字共陰共陽互為反。
⑹ 單片機流水燈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)單片機倒序點亮擴展閱讀
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);
}
}
}
⑺ 單片機八個led 從左到右依次單個點亮,從右到左再依次點亮;然後從左到右每次增加一個led 點亮
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
voiddelay(uchara)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
main()
{
uchari,led;
while(1)
{
led=0xfe;
for(i=0;i<8;i++)
{
P1=led;
delay(200);
led=_crol_(led,1);
}
led=0x7f;
for(i=0;i<8;i++)
{
P1=led;
delay(200);
led=_cror_(led,1);
}
led=0xfe;
for(i=0;i<8;i++)
{
P1=led;
led=led<<1;
delay(200);
}
led=0x00;
for(i=0;i<8;i++)
{
P1=led;
led=(led>>1)|0x80;
delay(200);
}
P1=0x7e;delay(200);
P1=0x3c;delay(200);
P1=0x18;delay(200);
P1=0x00;delay(200);
P1=0x18;delay(200);
P1=0x3c;delay(200);
P1=0x7e;delay(200);
P1=0xff;delay(200);
}
}
⑻ 51單片機C程序怎樣把LED燈從左到右點亮然後又從右到左點亮然後循環
#include<reg51.h>
unsigned char ledtab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++){P0=ledtab[i];delay(100);}
for(i=0;i<8;i++){P0=ledtab[7-i];delay(100);}
}
}
⑼ 單片機流水燈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++);
}
(9)單片機倒序點亮擴展閱讀
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單片機點亮LED燈。較快速度首先按順序點亮。再逆序熄滅。再由兩端往中間點亮。再逆序熄滅。整體循環
弄個位元組變數一次遞增,然後把這個變數放到你要點亮的埠就可以了,然後延時,接著繼續增加變數值,然後再放到埠