一、 实验目的
(一) 熟悉单片机最小系统;
(二) 熟悉开发板上单片机 I/O 口与 LED 灯的电路连接, 学会读原理
图;
(三) 掌握 keil C 软件的使用、 程序的调试;
(四) 通过编程控制 8 个 LED 灯循环点亮, 熟悉单片机 I/O 口的输出
控制;
(五) 掌握点亮 LED 灯的控制方法。
二、 主要仪器设备及耗材
(一) 电脑一台;
(二) 单片机开发板一套。
三、 实验原理
根据所学的单片机知识及电路知识, 采用 C 语言编程实现单片机 I/O
口输出控制 8 个 LED 灯循环点亮。单片机最小系统如图 1.1 所示, 8 个 LED
灯由单片机 P2 口控制, 其电路原理图如图 1.2 所示。
四、 实验内容及步骤
(一) 实验内容
采用三种方法编程控制 8 个 LED 灯间隔 500ms 循环点亮。
方法 1: 采用特殊功能位声明的方式使 8 个 LED 灯间隔 500ms 循环点第 4 页 共 58 页
亮;
方法 2: 采用调用函数(总线) 的方式使 8 个 LED 灯间隔 500ms 循环
点亮;
方法 3: 采用数组(总线) 的方式使 8 个 LED 灯间隔 500ms 循环点亮。
(二) 实验步骤
1.根据电路原理图编写 C 程序, 调试并烧写入单片机;
#include <reg51.h>
#include <intrins.h>
//方法2:采用调用函数(总线)的方式使8个LED灯间隔500ms循环点亮;
sbit temp = P2;
code char led[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xef, 0xdf, 0xbf, 0x7f,
0x7e, 0xbd, 0xdb, 0xe7,
0xdb, 0xdb, 0xe7, 0x7e,
0x00};
void delay(unsigned int ms)
{
int i;
while(ms--)
{
for(i=110; i>0; i--);
}
}
void main()
{
//自己调用方法
......
}
void method_1()方法1:采用特殊功能位声明的方式使8个LED灯间隔500ms循环点亮;
}
while(1)
{
P2 = 0xfe;
delay(500);
P2 = 0xfd;
delay(500);
P2 = 0xfb;// 1111 1011
delay(500);
P2 = 0xf7; //1111 0111
delay(500);
P2 = 0xef; //1110 1111
delay(500);
P2 = 0xdf;
delay(500);
P2 = 0xbf;
delay(500);
P2 = 0x7f;
delay(500);
}
}
void method_2()//方法2:采用调用函数(总线)的方式使8个LED灯间隔500ms循环点亮;即左移或右移的方式
{
while(1)
{
temp = _cror_(temp,1);
delay(500);
}
}
void method_3()//方法3:花式流水灯
{
int i;
while(1)
{
for(i=0; i<18; i++)
{
P2 = led[i];
delay(200);
}
}
}