① 怎麼控制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 循環右移一位
② 如何實現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已經算是非常優越的了。
③ 單片機中移位指令D1燈到D8燈依次點亮怎樣編程
#include<reg52.h>
#include <intrins.h>
void main()
{
unsigned int a;
P0=0xfe;
while(1)
{
for(a=30000;a>0;a--);
P0=_crol_(P0,1);
}
}
其中使用這個#include <intrins.h>頭文件,就是後面P0=_crol_(P0,1) 要用的移位指令 。
④ 單片機 RRC右移 指令的用法
RRC指令就是帶進位累加器循環右移。舉例說明:
C =1,A=1100 1100B,
執行RRC A後,C=0,A=1110 0110B(A的最低位移給C,並且C原來的值移給A的最高位。)
SETB C(cy=1)
XCH A,R2(兩數交換R2=54H,A=C2H)
JB A.7 , ELSE(若A的最高位為1,則轉至else)
CLR C
ELSE: RRC A(帶進位位右移A=1110 0 001B=E1H Cy=0)
XCH A ,R2(兩數交換後,R2=E1H,A=54H)
RRC A(帶進位位右移A=0010 1 010B=2AH Cy=0)
所以,最終(R2)=E1H,(A)=2AH
(4)單片機右移指令亮燈擴展閱讀:
控制轉移類指令還包括以下:
1、無條件轉移指令 AJMP addrll (2位元組指令),2K(地址211)位元組范圍內的無條件跳轉指令。64K程序存儲器空間分為32個區,每區2K位元組,轉移的目標地址必須與AJMP下一條指令的地址高5位地址碼A15-A11相同。
指令執行時,先PC加2,然後把addrll送入PC.10~PC.0,PC.15~PC.11保持不變,程序轉移到目標地址。注意:轉移目標首地址必須在AJMP指令下一條指令地址(PC+2)的2KB范圍內。
2、長跳轉指令 LJMP addr16 (3位元組指令),64K位元組范圍內的無條件跳轉指令。指令執行時,把指令的第二和第三位元組分別裝入PC的高位和低位位元組中,無條件地轉向addr16指出的目標地址。
目標地址可以在64K程序存儲器地址空間的任何位置。注意:短跳轉、長跳轉指令中addrll、addr16直接寫上要轉向的目標地址標號(即符號地址)就可以。
3、相對轉移指令 SJMP rel (雙位元組),rel為8位帶符號二進制補碼數(-128~+127),實現程序的雙向轉移。在編寫程序時,直接寫上要轉向的目標地址標號就可以。
4、間接跳轉(散轉)指令JMP @A+DPTR (三位元組),由A中8位無符號數與DPTR的16位數內容之和來確定。以DPTR內容作為基址,A的內容作變址。
5、條件轉移指令 (雙位元組)
JZ rel ; 如果累加器為「0」,則轉移
JNZ rel; 如果累加器非「0」,則轉移
⑤ 單片機設置流水燈顯示效果,具體流水效果為兩位彩燈右移
咨詢記錄 · 回答於2021-12-10
⑥ 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位
}
}
}
⑦ 單片機右移到左移,左移到右移的花樣流水燈程序問題
LED燈右移到最右邊後向左移時是這樣的:右移一位→第二個延時程序→第一個延時程序→右移右移一位→第二個延時程序→第一個延時程序,這樣不斷循環,循環到最左邊,就開始了右移的程序。
這樣左移的延遲大一點的!
⑧ 51單片機用右移做流水燈
你把i 定義成無符號型unsigned char i ,然後 if 語句裡面不要判斷P0,改成判斷 i
⑨ 關於單片機流水燈左移右移的問題
51單片機的左移右移,首先在開始要調用"intrins.h"的文件包,這個文件包含_cror_(右移),_crol_(左移);然後通過for語句來控制;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(k=250;k>0;k--);
理解這三句,第一句是指:m=20;m>0然後m--是真就執行:
for(n=20;n>0;n--)
for(k=250;k>0;k--);
這兩句,m--一直減,減一次,裡面就執行一次,這里是20次。
流水燈的左右移,第一用"intrins.h"的文件包,第二要要會定義賦值變數,第三延時,這是關鍵。