电子秒表式计数器 ARM嵌入式_基于嵌入式的电子秒表

2020-02-28 其他范文 下载本文

电子秒表式计数器 ARM嵌入式由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于嵌入式的电子秒表”。

ARM嵌入式系统基础课设

基于LPC2106的电子秒表式计数器

I

目 录

1.引言...............................................................................................1 2.系统设计.......................................................................................1 2.1 课题目标及总体方案...........................................................1 2.2 元器件的选择和连线...........................................................2 2.3 程序和芯片的初始化...........................................................3 3.实验(软硬件测试)结果...........................................................4 3.1 ADS1.2 软件的编译,连接和运行.....................................4 3.2 protues 仿真软件的联合调试..............................................6 3.3 总原理图...............................................................................7 4.心得体会.........................................................................................7 5.参考文献.........................................................................................8 6.附录.................................................................................................8

II

1.引言

近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。

秒表是日常生活中比较常用的精确计时工具,特别是在体育竞技以及生产科研中,跳动精确的秒表更是有着不可替代的作用。过去机械秒表的设计制作极为复杂,而且成本高、不稳定给使用者带来了不少的困扰。但是随着电子技术的飞速发展,电子秒表的出现彻底改变了这一局面,电子秒表以其成本低廉、工作稳定、走时精确、操作简单在人类的工作生活中得到了广泛的应用。本次实训任务是依托嵌入式系统设计一个电子秒表,能实现记录3个时间节点,误差小于0.5秒,并能完成暂停启动功能。

2.系统设计

2.1 课题目标及总体方案

课程设计目标

1、培养综合运用知识和独立开展实践创新的能力;

2、培养学生的编程能力、用计算机解决实际问题的能力。总体方案

利用LPC2106芯片和LCD显示器,通过汇编和C语言编译,完成实时秒

表的显示。

1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;

2、使用ADS1.2编译汇编语言和C语言,连接生成Hex文件。

3、联合Protues仿真,选用ARM7 LPC2106 芯片,导入Hex文件,实现模拟

秒表显示。

2.2 元器件的选择和连线

选用嵌入式ARM 7系列的LPC2106芯片和LCD lm016l显示器:

根据使用的需要配置端口连线:

2.3 程序和芯片的初始化

程序中包括:

1、Lcd的初始化:

2、中断向量的初始化:

3、定时器0初始化:

4、中断初始化:

5、芯片Lpc2106基础配置:

中间使用了上接正电源配合电容的交流特性,为芯片提供电源和复位功能。其他引脚根据芯片要求配置连接。

3.实验(软硬件测试)结果

3.1 ADS1.2 软件的编译,连接和运行

构建完整的程序:

1、添加头文件,中断处理汇编程序段,初始化函数和主函数:

2、编译所有的文件:

编译器提示:成功生成所需Hex文件,将得到的Hex文件导入仿真芯片 Lpc 2106中,观察实时秒表。

3.2 protues 仿真软件的联合调试

为Lpc 2106 芯片选择Hex文件路径:

连接芯片与LCD端口,运行程序,观察效果。显示如下秒表界面:

3.3 总原理图

4.心得体会

通过ARM嵌入式课程和实验的学习,我完成了这个课程设计题目。在课程设计的过程中,我发现我们在这半个学期里所学的嵌入式课程的知识点仅仅是基础,要完成一个有实用价值的设计是需要一定努力和学习的,于是我首先上网搜集了许多相关的资料,学习了ADS1.2 软件的编译、连接和运行以及 Protues软件的仿真和联合调试,根据搜集到的嵌入式知识,接下来完成设计方案和程序修改调试,实现了课程设计的基本要求,最终完成了课程设计报告。

通过这次课设,我发现了自己在课本知识上掌握的不足,同时把以前所学过的知识重新温故,巩固了所学的知识。让我很好的锻炼了理论联系实际,与具体项目、课题相结合开发、设计产品的能力。既让我懂得了怎样将理论应用于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决。在设计过程中,总是会遇到这样或那样的问题如程序的修改,调试,编译等,这就需要我冷静、耐心和细心等心理素质。另外,这次课设的独自完成,给了我日后毕业设计宝贵的经验,使我受益匪浅。

5.参考文献

[1] 周立功,ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社 2008 [2] 周立功,深入浅出ARM7-LPC213X/214X[M].北京:北京航空航天大学出版社2006 [3] 周立功,从51到ARM-32位嵌入式系统入门[M].北京:北京航空航天大学出版社2006 [4] 王田苗,嵌入式系统设计与实例开发[M].北京:清华大学出版社,2003 [5] 杜春雷,ARM 体系结构与编程[M].北京:清华大学出版社.2003 [6] 桑楠.嵌入式系统原理及应用开发技术,北京:北京航空航天大学出版社, 2002

6.附录

软件程序:

/**************************************************************************** * File: main.c * 功能:向LCD输出计数值

****************************************************************************/ #include “config.h” #define rs(1

uint8 BCD[6];//十位二进制的显示码分别是千百十个位的显示

uint16 count=0;/**************************************************************************** * File: enable_irq()

* 功能:中断使能函数

****************************************************************************/ __inline void enable_irq(){ uint8 tmp;__asm

{

MRS tmp,CPSR

BIC tmp,tmp,#0x80

MSR CPSR_c,tmp

} }

void delay(uint32 dly);void timer0_init(void);void __irq timerInt(void);void int_init(void);void ChkBusy(void);void WrOp(uint8 dat);void WrDat(uint8 dat);void lcd_init(void);void DisText(uint8 addr,uint8 *p);void ShowInt(uint8 addr,uint16 num);

/**************************************************************************** * File: main()* 功能:显示计数值

****************************************************************************/ int main(void){ IODIR=0x7ff;//设置为输出

IOCLR=0x7ff;lcd_init();

int_init();timer0_init();ShowInt(0x80,count++);enable_irq();while(1);} /**************************************************************************** * File:delay()* 功能:延时

****************************************************************************/

void delay(uint32 dly){ uint32 i;

for(;dly>0;dly--)

for(i=0;i

/**************************************************************************** * File:timer0_init * 功能:定时器0初始化

****************************************************************************/ void timer0_init(void){//定时器计数器0设置,晶振为12M,1秒要运行1000000个周期, T0PR=1000;//预分频寄存器

T0MR0=1000;//匹配值

T0MCR=0x00000003;//开放匹配0中断

T0TCR=0x00000003;//T0PC和T0TC复位

T0TCR=0x00000001;//T0PC和T0TC复位 } /**************************************************************************** * File:timerInt * 功能:中断处理程序

****************************************************************************/

void __irq timerInt(void){ ShowInt(0x80,count++);VICVectAddr=0;T0IR=0x00000001;

}

/**************************************************************************** * File:int_init()* 功能:中断初始化

****************************************************************************/ void int_init(void){ VICIntSelect=0x00000000;VICIntEnable=0x00000010;VICVectCntl0=0x00000024;VICVectAddr0=(int)timerInt;}

/****************************************************************************

* 名称:ChkBusy()* 功能:检查总线是否忙

****************************************************************************/ void ChkBusy(){ IODIR=0x700;while(1){

IOCLR=rs;

IOSET=rw;

IOSET=en;

if(!(IOPIN & busy))break;

IOCLR=en;} IODIR=0x7ff;} /**************************************************************************** * 名称:WrOp()* 功能:写函数

****************************************************************************/ void WrOp(uint8 dat){ ChkBusy();IOCLR=rs;//全部清零

IOCLR=rw;IOCLR=0xff;//先清零

IOSET=dat;//再送数

IOSET=en;IOCLR=en;} /**************************************************************************** * 名称:WrDat()* 功能:写数据函数

****************************************************************************/ void WrDat(uint8 dat){ ChkBusy();IOSET=rs;IOCLR=rw;IOCLR=0xff;//先清零

IOSET=dat;//再送数

IOSET=en;IOCLR=en;}

/**************************************************************************** * 名称:lcd_init()* 功能:lcd初始化函数

****************************************************************************/ void lcd_init(void){ WrOp(0x38);

WrOp(0x06);

//光标加1 WrOp(0x0c);

//开显示 } /**************************************************************************** * 名称:DisText()* 功能:显示文本函数

****************************************************************************/ void DisText(uint8 addr,uint8 *p){ WrOp(addr);while(*p!='')WrDat(*(p++));}

void ShowInt(uint8 addr,uint16 num)

//在addr处显示数字num {//将num转化成五个BCD码存放在全局数组BCD[5]中

uint8 i;for(i=5;i>0;i--)

//将NUM数据转化成ASCII码,如521会转化为00521 {

BCD[i-1]=(uint8)(num%10+0x30);

//取出最低位

num/=10;

//去掉最低位

}

i=0;while(BCD[i] ==0x30 && i

//NUM转换成数组存放,但还没有加上小数点

BCD[5]='';DisText(addr,BCD);}

《电子秒表式计数器 ARM嵌入式.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
电子秒表式计数器 ARM嵌入式
点击下载文档
相关专题 基于嵌入式的电子秒表 嵌入式 计数器 表式 基于嵌入式的电子秒表 嵌入式 计数器 表式
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文