嵌入式系统课程实验报告

  • 格式:doc
  • 大小:294.50 KB
  • 文档页数:9

嵌入式系统课程实验报告
实验一流水灯控制显示
一、实验目的:
1.了解基于ARM7核的LPC2106的管脚功能和特点,掌握I/O控制寄存器的设置方法;
2.掌握ARM7应用系统编程开发方法,能用C语言编写应用程序;
3.熟练掌握ADS1.2软件的使用以及PROTEUS仿真调试的方法;
二、具体任务:
1.采用PROTEUS完成流水灯控制的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106;
2.用ADS1.2编写C语言应用程序,完成流水灯控制显示;
3.采用PROTEUS将应用程序装载在LPC2106中,进行仿真验证
三、硬件电路设计。

(参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面)
附图:
四、源程序。

(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)
源程序:
#include "config.h"
#define LED1CON 0x000000ff *P0.0~p0.15输出*/
void delay(uint32 n)
{n--;}
int main(void)
{ uint32 i;
while(1){
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IODIR=0x000003ff;
for(i=0;i<11;i++)
{
IOCLR=0x000003ff;
IOSET=1<<i;
delay(500000000);
delay(500000000);
}
}
return(0);
}
五、仿真效果。

(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)
实验二计数器
一、实验目的:
1.了解基于ARM7核的LPC2106的向量中断特点,掌握向量中断控制寄存器的设置方法;
2.掌握ARM7应用系统编程开发方法,能用C语言编写应用程序;
3.熟练掌握ADS1.2软件的使用以及PROTEUS仿真调试的方法;
二、具体任务:
1.采用PROTEUS完成外部中断的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106;
2.用ADS1.2编写C语言应用程序,完成按键的向量中断控制(按下按键1,数码管加1;按下按键2,数码管清零;按下按键3,数码管减1;);
3.采用PROTEUS将应用程序装载在LPC2106中,进行仿真验证
三、硬件电路设计。

(参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面)
附图:
三、源程序。

(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)
源程序:
#include "config.h"
#define LED1CON 0x000000ff *P0.0~p0.15输出*/
void delay(uint32 n)
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码
static unsigned char second;//定义静态变量,退出该程序后内容不变
unsigned char Dis_Baiwei,Dis_Shiwei,Dis_Gewei;
void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延时124*8+10=1002us
}
delay10ms() //延时10ms
{
unsigned i,j;
for(i=0;i<50;i++)
for(j=0;j<100;j++);
}
void Key(void) //按键判断子程序
{
if(P1_7==0) //P1.7按键功能,计数器清零
{
delay10ms(); //软件去抖动
if(P1_7==0) //清零
{
Dis_Baiwei=0;
Dis_Shiwei=0;
Dis_Gewei=0;
}
}
else if(P1_6==0) //P1.6按键功能,计数增{
delay10ms();
if(P1_6==0)
{
second++;
}
}
else if(P1_5==0) //P1.5按键功能,计数减{
delay10ms();
if(P1_5==0)
{
second--;
}
}
}
void LED_Display() //显示,动态扫描
{
P1=0xfe; //P1.0=0,选通数码管第一位P2=Dis_Baiwei; //显示计数器的百位
delay1ms();
P2=0xff; //消隐
P1=0xfd; //P1.1=0,选通第二位
P2=Dis_Shiwei; //显示计数器的十位
delay1ms();
P2=0xff; //消隐
P1=0xfb; //P1.2=0,选通第三位
P2=Dis_Gewei; //显示计数器的个位
delay1ms();
P2=0xff; //消隐
}
//外部中断开始计数
void INT0_ISR(void) interrupt 0 using 1
{
second++;//加1
if(second==999)
second=0;
Dis_Baiwei=tab[second/100]; //百位显示处理
Dis_Shiwei=tab[second%100/10];//十位显示值处理Dis_Gewei=tab[second%10]; //个位显示处理
}
main()
{
EA=1;//全局中断开
EX0=1;//外部中断0开
IT0=1;//边沿触发
while(1)
{
Key();
LED_Display();
}
}
四、仿真效果。

(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)。