基于ARM的可调电子钟的设计.docx
- 文档编号:5133658
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:15
- 大小:62.14KB
基于ARM的可调电子钟的设计.docx
《基于ARM的可调电子钟的设计.docx》由会员分享,可在线阅读,更多相关《基于ARM的可调电子钟的设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于ARM的可调电子钟的设计
物理与电子信息学院嵌入式系统课程设计成绩评定表
专业:
电子信息工程班级:
1102电信学号:
XXXX姓名XXX
课题名称
基于ARM时钟显示
设计任务与要求
1、可以用按键调整时间
2、可用数码管显示时、分、秒
3、以用蜂鸣器实现闹钟的功能
4、用Protues实现仿真
5、完成课程设计报告
设计报告成绩
评分标准:
设计报告成绩:
电子
作品成绩
评分标准:
电子作品成绩:
课程设计成绩
总成绩:
指导教师:
XX
201X年6月27日
嵌入式系统课程设计报告
设计课题:
基于ARM时钟显示
专业班级:
电信1102
学生姓名:
XX
学 号:
XX
指导教师:
XX
设计时间:
201X年6月27日
基于ARM时钟显示
1、设计任务与要求
1、用数码管显示时、分、秒
2、可以用按键来调整时间
3、可以用蜂鸣器实现闹钟的功能
4、用Protues实现仿真
5、完成课程设计报告
二、方案设计与论证
基于ARM的时钟显示:
本课程设计是通过LPC2132ARM处理器而设计的显示时钟,由硬件和软件相配合使用。
硬件由数码管显示模块、按键模块、蜂鸣器三个模块。
实现电子时钟的功能,并在LED上显示类似的时钟界面,动态显示时间,时间包括时、分、秒。
1.方案一、
利用LPC2132内部定时器定时,把数据送到数码管,通过数码管显示时、分、秒。
设定八个按键,时、分、秒分别通过两个按键来控制加减,从而实现时间的调整。
通过蜂鸣器模块,当数码管显示达到设置的报警时间后,蜂鸣器蜂鸣,从而实现闹钟的功能。
至此,一个相对简单的基于ARM的时分秒时钟显示。
LPC2132
按键模块
数管显码示模块
蜂鸣器模块
图2-1基于LPC2132ARM时钟显示方案框图
2.方案二
本方案是基于LPC2106处理器而设计的时钟,综合性较强,涉及到RTC外部中断,引脚的GPIO功能,C语言编程等知识。
显示模块采用液晶模块模块LCD1602同时显示实时时间和报警时间。
从而实现电子时钟显示和报警。
NO
图2-2基于LPC2106ARM时钟显示方框流程图
通过课题的设计的要求,基于ARM的时钟显示,显示时、分、秒。
通过框图可以看出第二种方案过于复杂,第一种方案就可以实现简单的显示时、分、秒。
所以通过分析,结合设计电路性能指标、器件的性价比,本设计电路选择方案一。
三、软件设计与调试
通过Protues和keil实现程序的设计和仿真
程序设计
#include"config.h"
uint32second=0;//秒初始化
uint32minute=0;//分初始化
uint32hour=9;//时初始化
uint32keyr=1<<23;//定义P1.23为复位按键
uint32key=1<<16;//定义P1.16为停止按键
uint32keyadd1=1<<17;//定义P1.17为秒加按键
uint32keysec1=1<<18;//定义P1.18为秒减按键
uint32keyadd2=1<<19;//定义P1.19为分加按键
uint32keysec2=1<<20;//定义P1.20为分减按键
uint32keyadd3=1<<21;//定义P1.21为时加按键
uint32keysec3=1<<22;//定义P1.22为时减按键
uint32num_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管段选
uint32weis[]={0xfe00,0xfd00};//共阴极数码管秒位选
uint32weim[]={0xf700,0xef00};//共阴极数码管分位选
uint32weih[]={0xbf00,0x7f00};//共阴极数码管时位选
/*****************************
**函数名称:
delay()
**函数功能:
延时
******************************/
voiddelay(uint32dly)//延时函数
{uint32i;
for(;dly>0;dly--)
for(i=0;i<3400;i++);//初定为3400个自减变量,用于数码管延时显示
}
/*****************************
**函数名称:
IRQ_Timer0()
**函数功能:
定时器中断
******************************/
void__irqIRQ_Timer0(void)
{
if((hour==9)&(minute==30)&(second==0))//若时间为9点30分时,则执行下面程序
{
IO0SET=1<<16;//给P0.16口一个高电平,即使发声器响,从而实现闹钟功能
}
else
{
IO0CLR=1<<16;//否则不响
}
if((IO1PIN&keyr)==0)//当复位按键按下时,时分秒均为零,实现复位功能
{
second=0;
minute=0;
hour=0;
}
if((IO1PIN&key)!
=0)//当停止键没有按下时时间计数,否则时间停止计数
{
second++;
}
if((IO1PIN&keyadd1)==0)//当秒加按键按下时,秒开始加
{
second++;
}
if((IO1PIN&keysec1)==0)//当秒减按键按下时,秒开始减
{
second--;
if((IO1PIN&keyadd2)==0)//当分加按键按下时,分开始加
{
minute++;
}
if((IO1PIN&keysec2)==0)//当分减按键按下时,分开始减
{
minute--;
}
if((IO1PIN&keyadd3)==0)//当时加按键按下时,时开始加
{
hour++;
}
if((IO1PIN&keysec3)==0)//当时减按键按下时,时开始减
{
hour--;
}
if((second>60))//当秒加到大于60时,秒变为59
{
second=59;
}
if((minute>60))//当分加到大于60时,分变为59
{
minute=59;
}
if((second==60))//当秒等于60时,分加1,秒清零
{
minute++;
second=0;
}
if((minute==60))//当分等于60时,时加1,分清零
{
hour++;
minute=0;
second=0;
}
if((hour==24))//当小时为24时,时清零
{
hour=0;
}
T0IR=0x01;//打开定时器
VICVectAddr=0x00;//向量IRQ通道0的中断服务程序地址为0
}
/*****************************
**函数名称:
Time0Init()
**函数功能:
定时器0初始化
******************************/
voidTime0Init(void)
{
T0TC=0;//定时器设置为0
T0PR=0;//时钟不分频
T0MCR=0x03;//设置T0MR0匹配后复位T0TC,并产生中断标志
T0MR0=Fpclk/3;//设置匹配寄存器的值
T0TCR=0x01;//启动定时器0
VICIntSelect=0x00;//所有中断通道设置为IRQ中断
VICVectCntl0=0x20|0x04;//设置定时器0中断通道分配最高优先级
VICVectAddr0=(uint32)IRQ_Timer0;//设置中断服务程序地址
VICIntEnable=1<<0x04;//使能定时器0中断
}
/*****************************
**函数名称:
displays()
**函数功能:
秒显示程序
******************************/
voiddisplays(unsignedintsecond)
{
uint32i;
uint32dis_num[2];
uint32temp;
temp=second;
for(i=0;i<2;i++)//限定2位显示
{
dis_num[i]=temp%10;//把最低位的模取出来取余,显示个位数
temp=temp/10;//除法,显示十位数
IO0CLR=0xffff;//清显示
IO0SET=num_code[dis_num[i]];//送往P0.0-P0.8显示
IO0SET=weis[i];//位的切换
delay
(2);
}
}
/*****************************
**函数名称:
displaym()
**函数功能:
分显示程序
******************************/
voiddisplaym(unsignedintminute)
{uint32i;
uint32dis_num[2];
uint32temp;
temp=minute;
for(i=0;i<2;i++)//限定2位显示
{
dis_num[i]=temp%10;//把最低位的模取出来取余,显示个位数
temp=temp/10;//除法,显示十位数
IO0CLR=0xffff;//清显示
IO0SET=num_code[dis_num[i]];//送往P0.0-P0.8显示
IO0SET=weim[i];//位的切换
delay
(2);
}
}
/*****************************
**函数名称:
displayh()
**函数功能:
时显示程序
******************************/
voiddisplayh(unsignedinthour)
{
uint32i;
uint32dis_num[2];
uint32temp;
temp=hour;
for(i=0;i<2;i++)//限定2位显示
{
dis_num[i]=temp%10;//把最低位的模取出来取余,显示个位数
temp=temp/10;//除法,显示十位数
IO0CLR=0xffff;//清显示
IO0SET=num_code[dis_num[i]];//送往P0.0-P0.8显示
IO0SET=weih[i];//位的切换
delay
(2);
}
}
/**********************************************************************************************************
**函数名称:
main()
**函数功能:
使用定时器实现1秒钟定时,控并且在led数码管上显示。
中断方式。
**********************************************************************************************************/
intmain(void)
{
PINSEL0=0x00000000;//设置P0引脚连接为GPIO
PINSEL1=0x00000000;//设置P1引脚连接为GPIO
IO0DIR=0x000fffff;//设置P0.0-P0.20为输出,其他为输入
IO0CLR=0x0;
Time0Init();//定时器0初始化
IO0CLR=0x0;
second=0;
minute=0;
hour=9;
while
(1)
{
displays(second);//显示秒
displaym(minute);//显示分
displayh(hour);//显示时
}
}
程序设计完成后进行编译,程序编译成功。
经过多次对程序进行修改、完善,程序编译成功。
为了对程序的进一步调试,进行单步运行。
程序执行正常。
程序经过多次编译和单步调试,证明程序可靠性。
四、系统的仿真
图4-1基于ARM的时钟总的仿真原理图
图4-2数码管显示图
图4-3LPC2132芯片图图4-4按键功能图
图4-5发声器原理图
五、总结
本设计先后进行了一周的时间,万事开头难,最初决定方案的时候,大家意见不统一,经过激烈讨论最终才决定使用现在的设计方案。
在这次难得的电子钟设计实验中我锻炼了自己的思考能力和动手能力。
通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。
在方案设计选择和芯片的选择上,培养了我们综合应用ARM的能力,对ARM的各种功能也有了进一步的认识。
还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。
并且熟练掌握Protues和keil的使用。
六、参考文献
[1]代启化.基于Proteus的电路设计与仿真[J].现代电子技术.2006,第19期.
[2]曹洪奎.马莹莹基于Proteus单片机系统设计与仿真[J].辽宁工学院学报07年04期
[3]侯玉宝.基于Proteus的51系列单片机设计与仿真[M]电子工业出版社,2008.270~288
[4]蔡希彪.曹洪奎;单片机电子时钟系统的设计与仿真[J];中国科技信息;2007年04期
[5]刘焕平.单片机原理与应用[M].2007年8月第1版.北京:
北京理工大学出版社2007年.PP-232
[6]朝青.单片机原理及串行外设接口技术[M].2008年1月第1版,北京:
北京航空航天大学出版社,2008年。
PP-20~PP-65
[7]李军.51系列单片机高级实例开发指南北京航空航天大学出版社
[8]张天凡.完全手册51单片机c语言开发详解.北京:
电子工业出版社,2008.
[9]周立功.《ARM嵌入式系统实验教程一》北京北京航空航天大学出版。
[10]秦勃.无线嵌入式智能家居环境网关.计算机应用研究.2006年.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 可调 电子钟 设计