51单片机实验报告
实验一 点亮流水灯 实验现象
Led灯交替亮,间隔大约10ms。 实验代码
#include
void Delay10ms(unsigned int c); void main() {
while(1) {
P0 = 0x00; Delay10ms(50); P0 = 0xff; Delay10ms(50); } }
void Delay10ms(unsigned int c) {
unsigned char a, b;
for (;c>0;c--) {
for (b=38;b>0;b--) {
for (a=130;a>0;a--); } } }
实验原理
While(1) 表示一直循环。
循环体内首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。
实验2 流水灯(不运用库函数) 实验现象
起初led只有最右面的那一个不亮,半秒之后从右数第二个led也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程
#include
#include
void Delay10ms(unsigned int c); main() {
unsigned char LED; LED = 0xfe; while (1) {
P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00) {
LED = 0xfe; } } }
void Delay10ms(unsigned int c) {
unsigned char a, b; for (;c>0;c--) {
…… 此处隐藏0字 ……
for (b=38;b>0;b--) {
for (a=130;a>0;a--); } } } 实验原理
这里运用了C语言中的位运算符,位运算符左移,初始值的二进制为1111 1110,之后左移一次变成1111 1100,当变成0000 0000时通过if语句重置1111 11110.延迟函数在第一个报告已经说出了,不再多说。 实验3
流水灯(库函数版) 实验现象
最开始还是最右边的一个不亮,然后不亮的灯转移到最右边的第二个,此时第一个恢复亮度,这样依次循环。 实验代码
#include
void Delay10ms(unsigned int c); void main(void) {