单片机课程设计多功能万年历.docx

上传人:b****6 文档编号:12115497 上传时间:2023-06-04 格式:DOCX 页数:13 大小:474.37KB
下载 相关 举报
单片机课程设计多功能万年历.docx_第1页
第1页 / 共13页
单片机课程设计多功能万年历.docx_第2页
第2页 / 共13页
单片机课程设计多功能万年历.docx_第3页
第3页 / 共13页
单片机课程设计多功能万年历.docx_第4页
第4页 / 共13页
单片机课程设计多功能万年历.docx_第5页
第5页 / 共13页
单片机课程设计多功能万年历.docx_第6页
第6页 / 共13页
单片机课程设计多功能万年历.docx_第7页
第7页 / 共13页
单片机课程设计多功能万年历.docx_第8页
第8页 / 共13页
单片机课程设计多功能万年历.docx_第9页
第9页 / 共13页
单片机课程设计多功能万年历.docx_第10页
第10页 / 共13页
单片机课程设计多功能万年历.docx_第11页
第11页 / 共13页
单片机课程设计多功能万年历.docx_第12页
第12页 / 共13页
单片机课程设计多功能万年历.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计多功能万年历.docx

《单片机课程设计多功能万年历.docx》由会员分享,可在线阅读,更多相关《单片机课程设计多功能万年历.docx(13页珍藏版)》请在冰点文库上搜索。

单片机课程设计多功能万年历.docx

单片机课程设计多功能万年历

1需求分析

本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。

系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。

万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。

此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。

2概要设计

主程序:

 

Ds18b20子程序:

Ds1302子程序:

12864LCD子程序:

定时器定时设定子程序:

 

在年份显示中设置了闰年判断语句:

//判断闰年,leap=1表示闰年

leap=(nian%4==0&&nian%100!

=0)||(nian%400==0)?

1:

0;

//整点自动报时

if((fen1==0&&fen2==0&&miao1==0&&miao2==0)&&kaiguan==1)

3运行环境

Protues软件仿真。

4开发工具和编程语言

通过PROTEUSISIS软件的VSM(虚拟仿真技术),用户可以对模拟电路、数字电路、模数混合电路,以及基于微控制器的系统连同所有外围接口电子元器件一起仿真。

用PROTEUSISIS设计硬件电路的过程

①选择设计图纸的到小

根据设计所使用到元器件的多少,选择合适大小的设计图纸,操作是单击菜单栏上的System→SetSheetSize,然后弹出如图5-1所示的对话框,从中选择合适大小的图纸,也可以选择User进行图纸的自定义设置。

在设计过程中也可以通过此方法调整图纸的大小。

图5-1

②选取仿真所需的元器件

选取元器件的方式是,单击如图5-2所示的按钮“P”。

会弹出如图5-3所示的窗口。

图5-2

图5-3

从此窗口的左上角的“Keywords”中输入电子万年历设计用到的器件,如输入“AT89C51”,在中间会列出带有输入关键字的元器件,选择合适的元器件并双击它,则已经选择好了该元器件。

然后再在“Keywords”中输入其他所需的元器件,用同样的方法进行操作。

最后选择好所有的元器件如图5-4所示。

图5-4所用器件

其中74LS174表示三个串行接口,AT89C51代表单片机会,DS1302代表时钟芯片,RESPACK-8代表八排电阻。

③把元器件放到图纸的合适位置,进行布线

单击如图5-4所示的元器件AT89C51,再在右边图纸上单击,就把元器件放入到了图纸上。

再用同样的方法把ds1302放入到图纸的合适位置。

如果元器件放置错误,这可通过两次右击删除所放置的元器件,如果位置放得不理想,可以先右击该器件,然后按住左键进行移动。

在布线之前,如果觉得元器件的引脚的方向不好布线,则可以通过单击

这四个按钮进行调整,这四按钮的意思分别是:

顺时针旋转90°,逆时针旋转90°,沿Y轴对称,沿X轴对称。

通过这样的调整,可以使整个布局合理一些。

接着进行布线,由于PROTEUSISIS有自动布线的功能,比如要把AT89C51的P2口连到74LS164的OUT8口,只要先在P2引脚上单击一下,再在OUT8引脚上单击,则ISIS自动将两个引脚连上线。

图5-5at89c51与ds1302的连接

ISIS还提供了网络布线,即不使用线连接也可以把两个引脚虚拟的连接了起来。

具体操作是:

单击要连线的一个引脚,连出适当的距离后双击,另一个引脚也同样操作,在单击如图6-5所示的“LBL”按钮,再在图中P0.1引脚的A处单击,在弹出的窗口中的“String”中填入名称,如“A”,对OUT7引脚进行同样的操作,在“String”中也填入名称“A”,这样就完成了P3.4引脚与RES引脚的网络连接,这个好处避免两个距离比较远的器件进行真实线的连接,使布线美观。

④编辑窗口连接端子

要让最后的设计成功仿真时,必须放置并连接端子。

选择

,从中可以选择电路原理中的两个通用的端子,一个是接地,一个是电源。

如图5-6所示。

图5-6连接端子

用PROTEUSISIS进行电子万年历的仿真测试

①添加Keil中编写的代码文件

单击工具栏中的Source→Add/RemoveSourcefiles...,弹出一个对话框,分别单击“New”,然后选择在Keil中编写的数字电压表.ASM汇编语言程序,单击“OK”,完成添加代码文件。

②编译源程序,生成.HEX目标代码文件

单击Source→BuildAll。

如果编译结果没有错误,会出现如图5-8所示的结果。

图5-8

③加载.HEX目标代码文件

通过如图5-9所示的对话框,选择刚才编译生成的.HEX文件。

设置使单片机的运行频率为6MHz。

图5-9

⑤PROTEUS的调试功能

由于使用的是汇编语言编写的程序,如果在测量的时候测量值显示错误,说明程序中存在问题,这个问题只用在仿真测量的时候才能被发现,这时可以使用PROTEUS对程序进行调试。

单击

按钮,再单击菜单栏中的Debug,可以在最下面选择打开内存观察窗口,寄存器值观察窗口,汇编语言源代码窗口等等。

在汇编语言源代码窗口中,也可以在所需要设置断点的语句前双击设置断点,当设置断点的时候,程序运行到所设断点处停止,从而可以在内存、寄存器等的值的变化,从而找出程序出错的地方。

5详细设计

源程序名列表。

main.c文件:

voiddelay_ms(t)/*对于12M时钟,约延时1ms*/

voidMusic(z)//语音芯片驱动程序

voidmain()//主函数

LCD12864.c文件(液晶显示)

voiddelayNOP()//延时4us

bitlcd_busy()//检查LCD忙状态

voidwrite_cmd(ucharcmd)//写指令数据到LCD

voidlcd_wdat(uchardat)//写显示数据到LCD

voidlcd_init()//LCD初始化设定

voidlcd_pos(ucharX,ucharY)//设定显示位置

voiddisplay()//主显示程序

DS18B20.c文件(温度检测)

voiddsreset(void)//DS18B20复位,初始化

bittempreadbit(void)//读一位数据

uchartempread(void)//读一字节(8位)

voidtempwritebyte(uchardat)//向DS18B20写一个字节数据

voidtempchange(void)//开始获取温度并转换

uintget_temp()//获取温度

voiddisplay2(uinti)//数据格式转换

voidtemper()//显示温度

DS1302.c文件(时钟芯片)

voiddelay(intms)//延时xms

voidWriteByte(ucharCommand,ucharWriteData)//写位数据

ucharReadByte(ucharCommand)//读取DS1302一字节数据,address为命令字节

voidEdit(ucharflag)//时间日期编辑程序

voidKeyFun()//按钮功能函数

voidReadDS1302()//读取DS1302的秒,分,时,日,月,星期,年

voiddate_change()//数据格式转换

timer.c文件(定时器定时)

voidTimer0Init()//定时器初始化

voidTime0Isr(void)interrupt1//定时器0中断函数

6调试分析

电子成年历是多功能的数字型,可以看当前日期(阴、阳历),时间,还有温度的仪器。

电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。

最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。

在软件的调试过程中主要遇到的问题如下:

1.烧入程序后,LED数码管显示闪动,而且亮度不均匀。

解决:

首先对调用的延时进行逐渐修改,可以解决显示闪动问题。

其次,由于本作品使作动态扫描方式显示的数字,动态扫描很快,人的肉眼是无法看出,但是调用的显示程序时,如果不在反回时屏蔽掉最后的附值,则会出现很亮的现象,所以在显示的后面加了屏蔽子令,最后解决了此问题。

2.修改时间、日期时没有农历没有自动对应上。

解决:

把不相关的程序暂时屏蔽,地农历的子程序独立调试,发现在调用农历自动更新时,对十进制和十六进制处理不好,所以会造成错乱。

最后把相应的十进制进行修改,使得可以与十六进制对应,最后解决了此问题.

7测试结果

 

8参考文献

[1]朱善君,孙新亚,吉吟东编著.单片机接口技术与应用.北京:

清华大学出版社,2005

[2]王福瑞等编著.单片微机测控系统设计大全.北京:

北京航空航天大学出版社,2004

[3]籍顺心等编著.单片机的C语言应用程序设计.北京:

北京航空航天大学出版社,1999

心得体会

经过近两周的努力,终于完成了这次课程设计,从中我学会了很多知识,以及动手能力,从中深刻意识到了单片机的强大与实用之处,程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,理清了思路,终于能够完成它。

在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。

也练就了我们的耐心,做什么事都在有耐心。

此次设计中学到了很多很多东西,这是最重要的

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

当前位置:首页 > 自然科学 > 物理

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

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