A. 單片機左右來迴流水燈程序,兩個兩個的燈亮能用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次,懂基本原理什麼都好辦哎!糾結!!!!!!!!!
B. 51單片機左右循環移動的流水燈功能,求解答每一句具體含義!
#include<reg52.h>//頭文件包含,包括51硬體寄存器的宏定義,延時函數等
#define uchar unsigned char//宏定義,uchar被定義成unsigned char的簡寫
#define uint unsigned int//同上,uint被定義成unsigned int 的簡寫
#define DataPort P0//dataport(數據埠)被定為成P0口
sbit P21=P2^0;sbit是設置埠的某一位為一個變數,這樣就可以直接對變數進行操作(等價於對埠該位的操作),如sbit led1=P1^1;如果P1^1接的是led的話,led1=1;就可以使led燈點亮了!
uchar code ScanCode[ ]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
code表示讓單片機把這個定義的ScanCode的值存在ROM(程序存儲區)
定義一個無符號的字元型變數數組ScanCode,其值存放在程序存儲區,寫入之後不可更改
void DelayMs(uint n)//毫秒延時函數,通過設置循環次數,來設定時間
{
uchar j;
while(n--)//直到n減為0退出循環
{
for(j=0;j<113;j++);空循環114次,即延時114個指令周期
}
}
void main(void)主函數
{
uchar i;
P21=1;p2口第1位引腳置高電平
while(1)無限循環
{
for(i=0;i<8;i++)以下大括弧中兩句代碼循環8次,即將ScanCode數組中8位元組數據依次送到p0口
{
DataPort=ScanCode[i];向數據口(即p0口)送數據,數據為ScanCode數組中第i個元素
DelayMs(500);延時500毫秒
}
for(i=0;i<8;i++)同上,將scancode數字的8位元組數據按相反順序再送一次
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
}
C. 關於流水燈左移和右移的程序問題
LED燈右移到最右邊後向左移時是這樣的:右移一位→第二個延時程序→第一個延時程序→右移右移一位→第二個延時程序→第一個延時程序,這樣不斷循環,循環到最左邊,就開始了右移的程序。
這樣左移的延遲大一點的!
D. 如何實現51單片機的按鍵k1按下,LED流水燈向右移動,按鍵k2被按下,LED流水燈向左移動
51單片機實現方法:
按鍵控制標志位flag取反。
然後把下面的代碼放到循環里:
U8 temp0 = 1。
U8 temp1 = 0x80。
U8 i = 0。
if(flag == 1)。
{。
for(i=0;i<8;i++)。
{。
P1=temp0<<i。
}。
}。
else。
{。
for(i=0;i<8;i++)。
{。
P1=temp1>>i。
}。
}。
}。
對控制LED口的寄存器進行位操作,按k1左移,按K2就是右移了。
51單片機是對兼容英特爾8051指令系統的單片機的統稱。51單片機廣泛應用於家用電器、汽車、工業測控、通信設備中。因為51單片機的指令系統、內部結構相對簡單,所以國內許多高校用其進行單片機入門教學。
51單片機的特點:
同樣的一段程序,在各個單片機廠家的硬體上運行的結果都是一樣的,如ATMEL的89C51(已經停產)、89S51,PHILIPS,和WINBOND等,我們常說的已經停產的89C51指的是ATMEL公司的AT89C51單片機。
同時是在原基礎上增強了許多特性,如時鍾,更優秀的是由Flash(程序存儲器的內容至少可以改寫1000次)存儲器取代了原來的ROM(一次性寫入),AT89C51的性能相對於8051已經算是非常優越的了。
E. 單片機流水燈設計,使八個led燈右移
#include <AT89X52.h> //調用51單片機的頭文件
void main(void) //主函數,單片機開機後就是從這個函數開始運行
{
unsigned int a; //定義一個int型變數,做延時用
P0=0;
while(1) //死循環,單片機初始化後,將一直運行這個死循環
{
for(a=0;a<20000;a++); //延時若干時間,具體時長暫不理會
if(P0==0)
P0=0x01;
else
P0=P0<<1; //將PO左移
}
}
F. 怎麼控制51系列單片機流水燈先左移再右移最好有分析
#include<reg52.h>
#include <intrins.h> 頭文件
#define uchar unsigned char 宏定義
uchar a,b;
uchar b=1;
uchar a=0xfe; 變數定義和初始化
void main() 主函數
{
EA=1;IT1=1;ET0=1;中斷允許設置
TH0=-5000/256;
TL0=-5000%256; 賦值
TMOD=0x01;
TR0=1; 啟動
while(1); 等待中斷產生
}
void timer0(void) interrupt 1 using 1 中斷函數
{
TH0=-5000/256;
TL0=-5000%256; 重新賦值
b=b+1; 計算時間
if(b==40) 0.5秒時間到
{
b=0; 清0
P1=a; P1口賦值 0XFE 二進制11111110 也就是第一盞亮其他滅
a=_crol_(a,1); 庫函數實現循環
P1=a; 把循環後的值重新付給P1口
}
}
以上只是單方向的循環 還缺少延時函數 加在賦值後面
雙向循環 可以用左移右移指令
賦值 P1口 A=A<<1 循環左移一位 A=A>>1 循環右移一位
G. 請問52單片機中流水燈實現左移,全亮,右移,兩邊向中間亮要怎麼寫程序啊,最好有-crol-的程序,謝謝啦
;左移
LOOP1:
MOV R7,#8
MOV A ,#01
RL A
MOV P1,A
CALL DELAY
DJNZ R7,LOOP1
;全亮
MOV P1,#0FFH
CALL DELAY
;右移
LOOP2:
MOV R7,#8
MOV A ,#01
RR A
MOV P1,A
CALL DELAY
DJNZ R7,LOOP2
;不想寫了
H. 51單片機的c語言 左移右移怎麼用想用來控制流水燈,請幫忙寫個完整的c程序,參考下,埠隨意
# include "reg51.h" // 包含頭文件
#define uchar unsigned char
void delay02s(void) // 延時0.2s子程序
{
unsigned char i,j,k;
for ( i=2;i>0;i-- )
for (j=200;j>0;j-- )
for (k=250;k>0;k-- );
}
void main (void) // 主函數
{
uchar i,j;
while (1) // 死循環
{
j=0x01; // j初始化為0x01,左移初始值
for(i=0;i<8;i++) // for循環語句,完成8個循環
{
P1= ~ j; // 對變數j 中的值按位取反後,從P1口輸出
delay02s( ); // 延時0.2s
j= j<<1; // 左移1位
}
j=0x80; // 設置右移初始值j為0x80
for (i=0;i<8;i++)
{
P1= ~ j;
delay02s( );
j= j>>1; // 右移1位
}
}
}