导航:首页 > 操作系统 > 单片机试验一

单片机试验一

发布时间: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 ,

阅读全文

与单片机试验一相关的资料

热点内容
程序员涉黄 浏览:696
maven编译resources下的js 浏览:519
ubuntu文件移动命令 浏览:227
安卓i怎么查找苹果手机 浏览:949
云服务器宕机概率 浏览:229
在线买药用什么app知乎 浏览:813
ubuntu解压xz文件 浏览:674
宏杰加密时电脑关机 浏览:388
自己写单片机编译器 浏览:598
单片机按键闪烁 浏览:380
为什么icloud总是显连接服务器失败 浏览:888
如何设置域控服务器 浏览:738
想在上海租房子什么app好 浏览:184
编译程序各部分是必不可少的吗 浏览:885
编程不超过十行 浏览:763
数电编译器的作用 浏览:337
时间算法与现在有什么区别 浏览:164
7zip解压后没文件夹 浏览:904
为什么安卓送玫瑰ios收不到 浏览:10
美篇文章加密是什么意思 浏览:84