導航:首頁 > 操作系統 > 單片機試驗一

單片機試驗一

發布時間:2023-06-02 05:35:08

『壹』 單片機基礎實驗

1、

Loop:
mov a, #01h
mov r2, #8
Output:
mov P1, a
rl a
call Delay
djnz r2, Output
ljmp Loop

Delay:
mov r6, #0
mov r7, #0
DelayLoop:
djnz r6, DelayLoop
djnz r7, DelayLoop
ret

end
#include <reg51.h>

void delay()
{
unsigned int i;

for (i=0; i<20000; i++) {}
}

void main()
{
unsigned char index;
unsigned char LED;

while (1) {
LED = 1;
for (index=0; index < 8; index++) {
P1 = LED;
LED <<= 1;
delay();
}
}
}
2、
CS273 equ 8000h

mov dptr, #CS273
mov a,P1
movx @dptr, a
end

『貳』 急求:單片機實驗

:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最簡短、高效的排序程序.
MOV B, #7 ;第一輪排序時,比較7次.
S1: MOV R0, #30H ;數據區的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交換"標志位.
S2: MOV A, @R0 ;取前一個數.
INC R0
CLR C
SUBB A, @R0 ;減後一個數,前<後時,Cy=1
S3: JC S4 ;有借位時,不用交換,轉移.
MOV A, @R0 ;取後一個數,准備交換.
DEC R0
XCH A, @R0 ;交換到前一個.
INC R0
XCH A, @R0 ;交換到後一個.
SETB PSW.5 ;設定"交換"標志位.
S4: DJNZ R7, S2 ;繼續本輪比較.
JNB PSW.5, ENDS ;如本輪沒有進行過交換,可提前結束.
DJNZ B, S1 ;下一輪,比較次數少一次.
ENDS:
RET
;-----------------------------------------------------
END

『叄』 單片機實驗——數據傳送實驗

ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:
MOV R0 ,#4800H
MOV R1 ,#5800H
LOOP:
MOVX A ,@R0
MOV R1 ,A
INC R0
INC R1
DJNZ #10H,LOOP
END

『肆』 單片機實驗

你只要知道怎麼控制IO就可以了。不知道你的LED是採用什麼方式接入P1口的,如果是LED正極經過限流電阻接正電源,負極接P1口的話,那麼就是當P1口某個引腳為低電平時,LED點亮。
這樣的話,你這個1357,2468不知道是先亮1,然後1滅了換3,在3滅換5亮。。還是1357同時亮,然後2468同時亮,不過我告訴你思路你自己就編程

先使P1=0XFF這樣所有LED均熄滅。
然後因為1357實際對應的P1口IO是P1.0,P1.2,P1.4,P1.6, 那麼如果需要他們點亮,因為上面我說的是P1的某個IO為低電平,LED點亮,那麼給P1口我上面說的這幾個IO變為低電平就可以了。
即二進制的P1.7->P1.0(高->低)10101010.換算為16進制就是0XAA(如果是要1亮,然後變成1滅3亮。。。。這樣的話只需要P1.0先為低電平,即二進制的11111110 16進制的0xFE然後P1.0變為高電平P1.2為低電平,即二進制的11111011,16進制的0xFB,依次算出16進制對應的數,當7單獨亮時就是01111111,16進制的0x7F,2,4,6,8一樣,我就不在說了)
這樣讓P1口=0xAA就可以實現你所說的1,3,5,7亮了
同理,2,4,6,8就是P1.1,P1.3,P1.5,P1.7換算為二進制就是01010101即16進制的0x55.
讓P1口=0x55就可以了
另外因為單片機執行程序的速度很快,所以你如果是
P1=0XAA
P1=0X55這樣的話可以說你看來根本就是8個LED同時亮著。所以需要在每句下面加個延時函數使每個亮0.幾秒鍾,使眼睛可以看到他們的變化
所以要做個延時函數
void delay(unsigned char i)
{
unsigned char j,k;
for (j=i,j>0,j--)
{
for(k=255,k>0,k--);
}
}
調用時只需要給delay函數賦值就可以了
比如
P1=0XAA;
delay(200);
P1=0X55;
delay(200);
其他的就你自己寫了。。
我靠。。剛看你寫的是要匯編的。。
那麼上面P1=0XAA這些就要改成
MOV P1,#AAH
MOV P1,#55H
延時就需要這樣了
DELAY:
MOV R0,#200
DELAY1:
MOV R1,#255
DELAY:
DJNZ R1,DELAY
DJNZ R0,DELAY1
RET
這樣你上面就是
MAIN:
MOV P1,#AAH
CALL DELAY
MOV P1,#55H
CALL DELAY
SJMP MAIN

『伍』 單片機實驗

1、
MOV R0,#20H
MOVX A,@R0
MOV 20H,A
2、
MOV DPTR,#2000H
MOVX A,@DPTR
MOV 20H,A
3、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
4、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV B,A
MUL AB
MOV R7,A
MOV R6,B;(溢出部分送R6)
5、高八位?低八位?什麼意思?
地址高八位DPH,地址第八位DPL
MOV DPH,#20H
MOV DPL,#00H

『陸』 51單片機實驗,急

#include<reg52.h>


sbit Start = P3^0; //引腳聲明

sbit Pause = P3^1;

sbit Clear = P3^2;


unsigned char code Ledchar[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//共陽極 0 - 9

unsigned char Ledbuf[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//顯示緩沖區


unsigned char hour = 0;

unsigned char min = 0;

unsigned int sec = 0;

unsigned char Bms = 0;


unsigned char XH = 12; //學號 後兩位 , 你可以更改

unsigned char num = 18; //計數


char cnt = 0; //數碼管點亮位置


unsigned char index = 0;


void ConfigTimer0()

{

TMOD = 0x01;

TL0 = 0x18; //設置定時初值

TH0 = 0xFC; //設置定時重載值

ET0 = 1; //打開定時器0 中斷允許

TR0 = 1; //啟動定時器0

EA = 1; //打開總中斷

}

void main()

{

ConfigTimer0();


while(1)

{

Ledbuf[0] = 0xFF; //轉換成BCD碼 放入顯示緩沖區

Ledbuf[1] = Ledchar[num%10];

Ledbuf[2] = Ledchar[num/10%10];; // "-"

Ledbuf[3] = Ledchar[num/100];


Ledbuf[4] = 0xBF; // "-"


Ledbuf[5] = Ledchar[XH%10]; //學號

Ledbuf[6] = Ledchar[XH/10];

Ledbuf[7] = 0xFF;

}

}

void StartScan()

{

static unsigned char t = 0;

static bit Lock = 0;


if(Start == 1)

{

t = 0;

Lock = 0;

}

else if(Lock == 0)

{

t++;

if(t >= 10)

{

if(index == 0)

{

num += 2;

if(num >= 22)

{

num = 22;

}

}

else if(index == 2)

{

cnt++;

if(cnt >= 8)

{

cnt = 0;

}

}

Lock = 1;

}

}

}

void PauseScan()

{

static unsigned char t = 0;

static bit Lock = 0;


if(Pause == 1)

{

t = 0;

Lock = 0;

}

else if(Lock == 0)

{

t++;

if(t >= 10)

{

if(index == 0)

{

num -= 2;

if(num <= 14)

{

num = 14;

}

}

else if(index == 2)

{

cnt--;

if(cnt <= 0)

{

cnt = 7;

}

}

Lock = 1;

}

}

}

void ClearScan()

{

static unsigned char t = 0;

static bit Lock = 0;


if(Clear == 1)

{

t = 0;

Lock = 0;

}

else if(Lock == 0)

{

t++;

if(t >= 10)

{

index++;

if(index >= 3)

{

index = 0;

}

Lock = 1;

}

}

}

void KeyScan()

{

ClearScan();

PauseScan();

StartScan();

}

void LedScan()

{

static unsigned char i = 0;


P0 = 0xFF;


if(index == 0)

{

switch(i)

{

case 0: P2 = 0x01; P0 = Ledbuf[7]; i++; break;

case 1: P2 = 0x02; P0 = Ledbuf[6]; i++; break;

case 2: P2 = 0x04; P0 = Ledbuf[5]; i++; break;

case 3: P2 = 0x08; P0 = Ledbuf[4]; i++; break;

case 4: P2 = 0x10; P0 = Ledbuf[3]; i++; break;

case 5: P2 = 0x20; P0 = Ledbuf[2]; i++; break;

case 6: P2 = 0x40; P0 = Ledbuf[1]; i++; break;

case 7: P2 = 0x80; P0 = Ledbuf[0]; i=0; break;

default : break;

}

}

else

{

switch(cnt)

{

case 0: P2 = 0x01; P0 = Ledbuf[7]; break;

case 1: P2 = 0x02; P0 = Ledbuf[6]; break;

case 2: P2 = 0x04; P0 = Ledbuf[5]; break;

case 3: P2 = 0x08; P0 = Ledbuf[4]; break;

case 4: P2 = 0x10; P0 = Ledbuf[3]; break;

case 5: P2 = 0x20; P0 = Ledbuf[2]; break;

case 6: P2 = 0x40; P0 = Ledbuf[1]; break;

case 7: P2 = 0x80; P0 = Ledbuf[0]; break;

default : break;

}

}

}

void interruptTimer0() interrupt 1

{

static unsigned int tt = 0;


TL0 = 0x18; //設置定時初值

TH0 = 0xFC; //設置定時重載值


KeyScan();

LedScan();


if(index == 1)

{

tt++;

if(tt >= 500)

{

tt = 0;

cnt++;

if(cnt >= 8)

{

cnt = 0;

}

}

}

}


用的共陽極數碼管,, 滿足要求, 最下面的按鍵按一下 進行 數碼管切換點亮, 再按一下, 可以通過上面兩個按鍵選擇顯示那個數碼管

再按最下面的 就會回到剛開始顯示頁面,就是學號什麼的,全部顯示, 此時 上面兩個按鍵 就是對計數值進行加減2 ,

閱讀全文

與單片機試驗一相關的資料

熱點內容
安卓i怎麼查找蘋果手機 瀏覽:947
雲伺服器宕機概率 瀏覽:227
在線買葯用什麼app知乎 瀏覽:810
ubuntu解壓xz文件 瀏覽:674
宏傑加密時電腦關機 瀏覽:388
自己寫單片機編譯器 瀏覽:598
單片機按鍵閃爍 瀏覽:380
為什麼icloud總是顯連接伺服器失敗 瀏覽:888
如何設置域控伺服器 瀏覽:738
想在上海租房子什麼app好 瀏覽:184
編譯程序各部分是必不可少的嗎 瀏覽:885
編程不超過十行 瀏覽:763
數電編譯器的作用 瀏覽:337
時間演算法與現在有什麼區別 瀏覽:164
7zip解壓後沒文件夾 瀏覽:903
為什麼安卓送玫瑰ios收不到 瀏覽:10
美篇文章加密是什麼意思 瀏覽:84
ilasm編譯dll 瀏覽:40
呼吸燈單片機程序 瀏覽:954
linux域socket 瀏覽:250