实验二 发光二极管流水灯制作
一、实验目的
1.学习单片机软硬件系统的设计方法。
2.学习用Protel绘制原理图和PCB。学习单片机电路制作和调试方法。
二、电路工作原理
三、软件设计
四、制作与调试
1.绘制原理图
2.绘制PCB图
3.制作印制板
4.烧写程序与调试
第二篇:实验一 LED流水灯
实验一 LED流水灯
一、实验目的
1、 学习LPC系列处理器GPIO口的使用方法;
2、 掌握在开发过程中程序工程模板的建立和使用编程方法。
二、实验要求
1、 了解LPC系列处理器GPIO口的功能原理;
2、 了解程序设计中多模块编程的方法;
三、实验原理
1、LPC系列处理器GPIO口的原理
参见《ARM原理与嵌入式应用——基于LPC2400处理器和IAR开发环境》中有关GPIO口的章节,重点要掌握GPIO口的初始化、数据的输入和输出。
2、实验板上的LED
(1)、原理图
实验板上LED的硬件连接参见原理图。
(2)、说明
实验板上的4个LED是利用GPIO口来直接控制的。图中的四个LEDPORT引脚分别对应的是P3.24、P3.25、P3.26、P3.27四个引脚。四根信号线经过74LVC244驱动以后连接到发光二极管LED上,引脚输出高电平则LED点亮,输出低电平则LED熄灭。
3、程序工程模板说明
(1)、工程目录说明
在程序开发中,尤其是涉及到的代码较多时,应该将不同的代码分别存放,这样做的好处是系统代码结构清楚,查找、管理和代码移植都容易。实验板提供的程序工程模板中,主要有以下几个目录:
1) Common:这个目录存放了几乎各个实验都要使用的公用代码、IAR配置宏和链接器命令文件。其中src目录下有四个源程序文件:cstartup.s79芯片的初始化汇编代码、target.c
目标板的初始化C语言代码、irq.c中断实现程序、timer.c定时器程序。这四个程序在大多数实验中都会用到,是实验板基本的程序代码。
2) Target:这个目录存放了目标板各个不同部件的驱动程序。例如:rtc.c提供的实时时钟的驱动程序;uart0.c是串口0的驱动程序等等。在编写自己的应用程序时,可将自己需要的部分代码加进自己的工程里。
3) Include:存放头文件的目录。
以上三个目录都已经提供。
4) Src:存放用户源程序的目录。在实验中,用户自己编写的源程序存放在此。
(2)、工程模板的建立
1) 建立一个名叫led的目录,将以上四个目录拷贝到该目录中;
2) 在该目录中创建一个名叫led的工程;
3) 在工程选项中右键,选择“…”,添加三个组:Common、Target和User。
4) 在Common组中选择“…”将Common\src目录中的四个文件添加进工程;
5) 在Target组中添加目标板驱动程序,本例中只需要添加fio.c;
6) 在User组中自己新建一个源程序,本例中取名为led_test.c;
7) 按照IAR EWARM设置章节中的内容对工程进行设置。
以上的程序开发流程应当牢记,以后我们的每个实验都采用这个流程进行。
4、驱动程序说明
(1)、fio.c说明
在本例中使用到的目标板驱动程序为fio.c,它提供了4个函数:
1) GPIOInit( ):对GPIO口的初始化,三个参数分别为端口组号、端口类型和端口方向;
2) LedsInit( ):对4个Led的初始化操作;
3) LedOn( ):点亮一个Led。参数为led灯的编号。如果给出的参数大于4,则按取余以后算出的值点亮;
4) LedOff( ):熄灭一个Led。
(2)、fio.h说明
fio.h是fio.c的配套头文件,内容主要有:SCS寄存器中GPIOM设置的参数、各GPIO寄存器的地址、几个参数宏、fio.c中的几个函数的extern外部函数声明。
四、实验内容与步骤
1、实验主程序:
int main (void)
{
DWORD counter=0,i;
TargetResetInit();
/* GPIOInit() need to be carefully called if you want to run some
other peripherals, it will set the PINSEL to default value and change
the direction of IOs. */
/*(1)补充1:调用GPIO口初始化函数GPIOInit( DWORD PortNum, DWORD PortType, DWORD PortDir ),
将P3组GPIO口配置为快速访问端口,方向为输出,要求调用函数时正确传递该函数的三个参数*/
GPIOInit(3,FAST_PORT,DIR_OUT);
LedsInit();
while ( 1 )
{
for(i=0;i<999999;i++)i=i;
LedOn(counter);
for(i=0;i<999999;i++)i=i;
LedOff(counter);
counter++;
/*(2)补充2:使用for循环语句产生延时,轮流点亮和熄灭Led灯,形成流水灯的效果。中间的一个循环实现一个简单延时的效果。调用 LedOn(counter)和LedOff(counter) 两个函数来点亮或熄灭LED。counter变量是while循环中不断累加的一个变量,用以控制每次点亮或熄灭一个LED。*/
}
2、初始化端口函数和灯亮、灯灭函数:
}
五、实验小结
通过本次实验,我理解了LPC系列处理器GPIO口的使用方法以及在开发过程中程序工程模板的建立和使用编程方法。在本次实验中,通过对主程序编写一个延时程序和调用灯点亮和灯熄灭函数实验了流水灯的操作等。