课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx

上传人:b****1 文档编号:2406081 上传时间:2023-05-03 格式:DOCX 页数:35 大小:158.26KB
下载 相关 举报
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第1页
第1页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第2页
第2页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第3页
第3页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第4页
第4页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第5页
第5页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第6页
第6页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第7页
第7页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第8页
第8页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第9页
第9页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第10页
第10页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第11页
第11页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第12页
第12页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第13页
第13页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第14页
第14页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第15页
第15页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第16页
第16页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第17页
第17页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第18页
第18页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第19页
第19页 / 共35页
课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx

《课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx》由会员分享,可在线阅读,更多相关《课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx(35页珍藏版)》请在冰点文库上搜索。

课程设计论文基于arm7的电子万年历设计大学毕业设计论文.docx

课程设计论文基于arm7的电子万年历设计大学毕业设计论文

成绩评定表

学生姓名

班级学号

专业

通信工程

课程设计题目

基于ARM7的电子万年历设计

 

 

组长签字:

成绩

 

日期

2015年7月19日

课程设计任务书

学院

信息科学与工程学院

专业

通信工程

学生姓名

班级学号

1203060114

课程设计题目

基于ARM7的电子万年历设计

实践教学要求与任务:

1.学习ARM7的虚拟仪器原理、设计方法和实现技巧;

2.掌握简单ARM7程序的编程实现;

3.学会使用Proteus和Keil连接电路图和关联源代码;

4.采用ARM7语言,实现电子万年历设计;

(1)通过检索、查资料、调查研究、确定方案、画出组成系统结构方框图;

(2)采用ARM7实现电子万年历;

(3)系统调试与改进,调整系统参数,分析系统运行结果;

(4)写出设计总结报告。

工作计划与进度安排:

20周(上):

学习ARM7虚拟仪器原理、设计方法和实现技巧,掌握简单ARM7程序的编程实现,掌握简单通信系统设计和分析方法。

20周(下):

采用ARM7语言,实现电子万年历设计,并对万年历进行评估。

指导教师:

2015年7月13日

专业负责人:

2015年7月13日

学院教学副院长:

2015年7月13日

目录

1系统设计1

1.1电子显示屏特性1

1.2按键控制1

1.3LCD显示端1

1.4万年历调控电路2

1.5万年历的实现3

1.6LCD调试电路图3

2软件的具体功能和要求4

2.1基本要求4

2.2软件设计平台的介绍及实现方法4

2.3程序设计流程图4

3设计总结6

3.1proteus仿真电路图6

3.2Keil源代码7

3.3性能分析23

[参考文献]24

1系统设计

1.1电子显示屏特性

1>LED由计算机专用设备、显示屏幕、视频输入端口和系统软件等组成。

2>计算机及专用设备直接决定了系统的功能,可根据用户对系统的不同要求选择不同的类型

3>提供视频输入端口。

1.2按键控制

1>用于年月日的调控,复位。

2>用于时分秒的置换,清屏。

1.3LCD显示端

LCD显示端如图1所示。

图1LCD显示端

1.4万年历调控电路

万年历调控电路如图2所示。

 

图2万年历调控电路

1.5万年历的实现

使用调试功能,经过反复的调试终于实现了计时功能,然后通过查询资料,实现了计时过程中时钟实时更新功能及实现LED灯跟节奏闪烁。

再经过程序的改进,实现了实时时钟和闹钟调整功能。

添加了LED灯指示调整时间点(秒、分、时、星期、日、月、年)功能。

1.6LCD调试电路图

调试电路图如图3所示。

 

图3调试电路图

 

2软件的具体功能和要求

2.1基本要求

本课题所设计的系统要求:

(1)在理解基本实验代码的基础上,掌握万年历的工作原理,基于程序控制方式的驱动设计。

(2)在proteus中使用ARM7的LPC2106芯片并且结合Keil的源代码,实现万年历功能。

(3)编写基于万年历程序,实现代码编译。

2.2软件设计平台的介绍及实现方法

本设计中采用可编程逻辑设计环境ARM7进行设计,KeiluVsion5采用C语言进行编程。

2.3程序设计流程图

万年历程序流程图如图4所示。

 

 

图4万年历程序流程图

 

3设计总结

3.1proteus仿真电路图

仿真结果如图5所示。

图5仿真电路图

3.2Keil源代码

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

*功能:

LCD12864液晶显示驱动程序

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

#include"config.h"

#defineLCD12864_DIRIO0DIR//端口方向

#defineLCD12864_CLRIO0CLR//数据清零

#defineLCD12864_SETIO0SET//数据置一

#defineLCD12864_PINIO0PIN//端口状态

#defineLCD12864_BUSY(1<<26)//BUSY

#defineLCD12864_CTL_NO11//控制线起始端口

#defineLCD12864_DAT_NO16//数据线起始端口

#defineLCD12864_RS(1<<(LCD12864_CTL_NO+2))//命令/数据

#defineLCD12864_RW(1<<(LCD12864_CTL_NO+3))//读/写

#defineLCD12864_EN(1<<(LCD12864_CTL_NO+4))//使能位

#defineLCD_DispOn0x3F//开显示命令

#defineLCD_STARTROW0xC0//设置起始行指令,0xC0为第0行

#defineLCD_PAGE0xB8//设置页指令。

10111000

#defineLCD_COL0x40//设置列指令。

#defineLCD_LINE0x40//设置列指令

#defineSINGLE_SCREEN_COL64//左右屏,每屏64列

#defineLCD12864_CSA(1<<(LCD12864_CTL_NO))//控制线端口定义,选中左部屏幕

#defineLCD12864_CSB(1<<(LCD12864_CTL_NO+1))//选中右部屏幕

#defineLCD12864_WIDTH128//宽度

#defineLCD12864_HIGH64//高度

#defineLCD12864_PAGE8//页数

//引用外部字模

externuint8sytx[8][32];

externuint8snum[][16];

externuint8hytx[8][32];

externuint8Nums[10][16];

externuint8week[][16];

externuint8menu1[];

externuint8menu0[];

externuint8degree[];

//externuint8dianqiguan[];

externuint8menu2[];

externuint8menu3[];

externuint8menu4[];

uint8tm[6];//获取时间存在数组中

uint8year[6];//获取日期存在数组中

uint8day;//获取星期号

uint8dis_buf[22];//数据缓冲区

//uint8dayoder;

//延时函数

voidDelay(uint32x);

//初始化函数

voidRTCInit(void);

voidLCDInit2(void);

voidvCheckBusy(void);

voidvWriteCMD2(uint8ucCMD);

voidWriteData2(uint8ucData);

voidClearAll2(void);

//显示字符函数

voidDisplayByte(uint8ucPage,uint8ucCol,uint8ucData);//显示字符

voidvDisplayByte(uint8ucPage,uint8ucCol,uint8ucData);//反选显示字符

//显示数字函数

voidDisplaynum(uint8ucPage,uint8ucCol,uint8*pDisTable);//显示数字

//显示汉字、字符串函数

voidDispOneChinese(uint8ucPage,uint8ucCol,uint8*pDisTable,uint8Col);//一个汉字

voidDispChinese(uint8ucPage,uint8ucCol,uint8pDisTable[][32],uint8Num,uint8Col);//多个汉字

//全屏显示图片

voidDisPicture(uint8*pDisTable);

voidvDisPicture(uint8*pDisTable,uint8sur);

//刷新屏幕函数---只刷新其中一部分

voidDateupdated(uint8numcode[]);

voidWeekupdated(uint8oder);

voidTimeupdated(uint8numcode[]);

voidSetTimeRtc(void);//填充时间变量

//刷新屏幕函数

voidfresh(void);

//定时器中断处理函数,其中调用屏幕刷新函数fresh

void__irqRTC_Int(void);

//主函数入口

intmain()

{

LCDInit2();//初始化后清屏

RTCInit();//初始化实时时钟

DispChinese(0,0,hytx,8,16);//显示"欢迎同学止步的风"

VICIntSelect=0x00;//设置所有中断连接IRQ中断

VICVectCntl0=0x20|13;//分配通道0

VICVectAddr0=(int)RTC_Int;//设置中断服务程序地址

VICIntEnable=(1<<13);//使能RTC中断

SetTimeRtc();

Timeupdated(tm);

Dateupdated(year);

Weekupdated(day);

while

(1)

{

while(0==(ILR&0x01));//等待RTC增量中断

ILR=0x01;//清除中断标志

}

//WriteData2(0xff);

//DispChinese(1,0,Nums,10,8);//显示"0123456789"

//ClearAll2();

//Displaynum(6,2+8*2,*(snum+10));

//DispChinese(1,0,Nums,10,8);//显示"0123456789"

//DispOneChinese(6,96,*(week+6),16);//每次循环,显示一个汉字

//ClearAll2();

//Displaynum(2,32+8*4,*(snum+year[4]));

//Displaynum(0,0,*(snum+year[4]));

//Displaynum(0,0,*(snum));

//vDisPicture(menu4,0);//反选8块中的一块区域

//DisPicture(menu4);

}

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

//*名称:

Delay()

//*功能:

延时函数

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

voidDelay(uint32x)

{

unsignedinti1,j1;

for(j1=0;j1<100;j1++)

{

for(i1=0;i1

}

}

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

//*名称:

vCheckBusy

//*功能:

检查LCD是否忙

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

voidvCheckBusy(void)

{

LCD12864_DIR&=0xF9FFFF03;//数据线为输入

while

(1)

{

LCD12864_CLR=LCD12864_RS;

LCD12864_SET=LCD12864_RW;

LCD12864_SET=LCD12864_EN;

LCD12864_CLR=LCD12864_EN;

if(!

(LCD12864_PIN&LCD12864_BUSY))

break;

}

LCD12864_DIR|=0x060000FC;//数据线为输出*/

}

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

//*名称:

vWriteCMD2

//*功能:

写命令

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

voidvWriteCMD2(uint8ucCMD)

{

vCheckBusy();

LCD12864_CLR=LCD12864_RS;//RS置L,数据格式为:

命令

LCD12864_CLR=LCD12864_RW;//RW置L,为写操作

LCD12864_CLR=0xFF<

LCD12864_SET=ucCMD<

LCD12864_SET=LCD12864_EN;//给EN一个高脉冲,发送数据

LCD12864_CLR=LCD12864_EN;//发送完成后,使能位置L,供以后继续使用

}

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

//*名称:

WriteData2

//*功能:

写数据

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

voidWriteData2(uint8ucData)

{

vCheckBusy();

LCD12864_SET=LCD12864_RS;//写数据时,RS为H,RW为L

LCD12864_CLR=LCD12864_RW;

LCD12864_CLR=0xFF<

LCD12864_SET=ucData<

LCD12864_SET=LCD12864_EN;//给EN一个高脉冲,发送数据

LCD12864_CLR=LCD12864_EN;//发送完成后,使能位置L,供以后继续使用

}

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

//*名称:

CleanAll2

//*功能:

清屏

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

voidClearAll2(void)

{

uint8ucPage,ucCol;//页号,列号

LCD12864_SET=LCD12864_CSA;//左右两屏都选中

LCD12864_SET=LCD12864_CSB;

for(ucPage=0;ucPage<8;ucPage++)

{

vWriteCMD2(LCD_PAGE+ucPage);//设置页号,从0行开始,光标位置

vWriteCMD2(LCD_COL);//设置列号,定位在第0列

for(ucCol=0;ucCol<64;ucCol++)//左右半屏都是64列,所以循环64次就可以啦,两边同时清屏

{

vWriteCMD2(LCD_PAGE+ucPage);//设置页号,从0行开始,光标位置

vWriteCMD2(LCD_COL+ucCol);//设置列号,从0列开始,到63列结束

WriteData2(0x00);//写零,表示清空当前列

}

}

}

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

//*名称:

LCDInit2

//*功能:

初始化

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

voidLCDInit2(void)

{

LCD12864_DIR|=0x00FFF800;//11-23为输出

LCD12864_CLR|=0x00FFF800;//清零11-23

vWriteCMD2(LCD_DispOn);//开显示

vWriteCMD2(LCD_STARTROW);//设置起始行地址,列地址和页地址是变化的

ClearAll2();

}

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

//*FunctionName:

DisplayByte

//Date:

*

//*Parameter:

ucPage

//ucData

voidDisplayByte(uint8ucPage,uint8ucCol,uint8ucData)

{

//先选择显示屏幕(左or右)

if(ucCol/SINGLE_SCREEN_COL==0)//为0说明ucCol小于64。

,在左半屏幕

{

LCD12864_SET=LCD12864_CSA;//左开

LCD12864_CLR=LCD12864_CSB;//右关

}

elseif(ucCol/SINGLE_SCREEN_COL==1)//为1说明ucCol大于64。

,在右半屏幕

{

LCD12864_CLR=LCD12864_CSA;//左关

LCD12864_SET=LCD12864_CSB;//右开

}

//设置坐标

vWriteCMD2(LCD_PAGE+ucPage);//设置开始的页号

vWriteCMD2(LCD_COL+ucCol%SINGLE_SCREEN_COL);//设置开始的列号

//显示数据

WriteData2(ucData);

}

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

//*名称vDisplayByte

//*功能反显一个字符

//*参数解释ucPage显示的起始页数ucCol显示的起始列数ucData要显示的数据

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

voidvDisplayByte(uint8ucPage,uint8ucCol,uint8ucData)

{

if(ucCol/LCD12864_HIGH==0)

{

LCD12864_SET=LCD12864_CSA;

LCD12864_CLR=LCD12864_CSB;

}

else{

LCD12864_CLR=LCD12864_CSA;

LCD12864_SET=LCD12864_CSB;

}

vWriteCMD2(LCD_PAGE+ucPage);

vWriteCMD2(LCD_LINE+ucCol%LCD12864_HIGH);

WriteData2(~ucData);

}

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

//*名称vDisPicture

//*功能显示一个被选中一部分的界面

//*参数解释*pDisTable图像数据的指针

//*sur值作用01234567分别为选中八块中的一块12243648分别为选中01页23页45页67页

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

voidvDisPicture(uint8*pDisTable,uint8sur)

{uint8ucPage=0;//起始页

uint8ucCol=0;//起始列

uint8width=128;//lcd宽度

uint8hight=64;//lcd高度

uint8i,j;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2