51单片机实验报告
f实验一点亮流水灯实验现象Led灯交替亮,间隔大约10ms。实验代码i
cludereg51hvoidDelay10msu
sig
edi
tcvoidmai
while1
P00x00Delay10ms50P00xffDelay10ms50
voidDelay10msu
sig
edi
tc
u
sig
edcharab
fforc0c
forb38b0b
fora130a0a
实验原理While(1)表示一直循环。循环体内首先将P0的所有位都置于零,然后延时约5010500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。
实验2流水灯(不运用库函数)实验现象起初led只有最右面的那一个不亮,半秒之后从右数第二个led也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程
i
cludereg52h
fi
cludei
tri
shvoidDelay10msu
sig
edi
tcmai
u
sig
edcharLEDLED0xfewhile1
P0LEDDelay10ms50LEDLED1ifP00x00
LED0xfevoidDelay10msu
sig
edi
tcu
sig
edcharabforc0c
fforb38b0b
fora130a0a实验原理这里运用了C语言中的位运算符,位运算符左移,初始值的二进制为11111110,之后左移一次变成11111100,当变成00000000时通过if语句重置111111110延迟函数在第一个报告已经说出了,不再多说。实验3流水灯(库函数版)实验现象最开始还是最右边的一个不亮,然后不亮的灯转移到最右边的第二个,此时第一个恢复亮度,这样依次循环。实验代码i
cludereg51hi
cludei
tri
shvoidDelay10msu
sig
edi
tcvoidmai
void
fu
sig
edcharLEDLED0xFEwhile1
P0LEDDelay10ms50LED_crol_LED1voidDelay10msu
sig
edi
tcu
sig
edcharabforc0cforb38b0b
fora130a0a实验原理利用头文件中的函数,_crol_,可以比位操作符更方便的
f进行2进制的移位操作,比位操作符优越的是,该函数空位补全时都是用那个移位移除的数据,由此比前一个例子不需要if语句重置操作。
数码管实验实验现象单个数码管按顺序显示09和AF。i
cludereg51hvoidDelay10msu
sig
edi
tcu
sig
edcharcodeDIG_CODE160x3F0x060x5B0x4F0x660x6D0x7D0x070x7F0x6F0x770x7C0x390x5E0x790x71voidmai
void
u
sig
edchari0while1
P0DIG_CODEiiifi16
i0
fDelay10ms50voidDelay10msu
sig
edi
tcó0usu
sig
edcharabforc0cforb38b0b
fora130a0a实验原理根据数码管的点亮原理,依次找到代表09,AF的位码,用循环和延迟函数就可以达到要求了。
实验动态数码管i
cludereg51hdefi
eGPIO_DIGP0
fdefir