微机单片机原理及应用课程设计.docx

上传人:b****6 文档编号:15785768 上传时间:2023-07-07 格式:DOCX 页数:12 大小:71.33KB
下载 相关 举报
微机单片机原理及应用课程设计.docx_第1页
第1页 / 共12页
微机单片机原理及应用课程设计.docx_第2页
第2页 / 共12页
微机单片机原理及应用课程设计.docx_第3页
第3页 / 共12页
微机单片机原理及应用课程设计.docx_第4页
第4页 / 共12页
微机单片机原理及应用课程设计.docx_第5页
第5页 / 共12页
微机单片机原理及应用课程设计.docx_第6页
第6页 / 共12页
微机单片机原理及应用课程设计.docx_第7页
第7页 / 共12页
微机单片机原理及应用课程设计.docx_第8页
第8页 / 共12页
微机单片机原理及应用课程设计.docx_第9页
第9页 / 共12页
微机单片机原理及应用课程设计.docx_第10页
第10页 / 共12页
微机单片机原理及应用课程设计.docx_第11页
第11页 / 共12页
微机单片机原理及应用课程设计.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机单片机原理及应用课程设计.docx

《微机单片机原理及应用课程设计.docx》由会员分享,可在线阅读,更多相关《微机单片机原理及应用课程设计.docx(12页珍藏版)》请在冰点文库上搜索。

微机单片机原理及应用课程设计.docx

微机单片机原理及应用课程设计

 

微机(单片机)原理及应用课程设计

 

课题名称:

基于DOFLYELY-51S单片机开发板的多功能时钟设计(软件设计及调试)

负责人:

唐泽锋

小组成员:

唐泽锋王增格孔德源

班级:

08测控

(2)班

指导老师:

罗剑波王仁杰

 

课程设计任务书

课程设计名称

多功能时钟

主要任务与

目标

通过设计一个多功能时钟,掌握设计、调试单片机应用系统的方法。

任务涉及的知识点包括C程序语言、STC-52单片机I/O应用、中断与定时器应用、人机接口应用技术等。

主要内容与基本要求

 

要求设计的多功能时钟完成以下功能:

①实时显示当前时间(8位数码管显示,2位显示小时,2位显示分钟,2位显示秒,小时、分钟及分钟秒之间用“-”隔开)。

②半点及整点时间用蜂鸣器报时,半点短鸣,整点长鸣对应的次数。

22点至6点不鸣。

③能用键盘调整当前时钟。

 

计划进度与安排:

1)布置任务,分析任务;(1天)

2)方案设计,相关知识学习;(1天)

3)硬件原理图设计;(2天)

4)软件设计;(3天)

5)软硬件调试;(5天)

6)撰写设计报告;(1天)

7)答辩。

(1天)

实习地点:

15-202

指导教师

签名

 

年月日

系意见

系主任签名:

年月日

1.KeilC51简介

KeilC51μVision2集成开发环境是KeilSoftware,Inc/KeilElektronikGmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、连接、目标代码的生成、软件仿真及硬件仿真等完整的开发流程。

尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活地控制选项,在开发大型项目时非常理想。

KeilC51集成开发环境的主要功能有以下几点:

●μVision2forWindows:

是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中;

●C51国际标准化C交叉编译器:

从C源代码产生可重定位的目标模块;

●A51宏汇编器:

从80C51汇编代码产生可重定位的目标模块;

●BL51连接/定位器:

组合由C51和A51产生可重定位的目标模块,生成绝对目标模块;

●LIB51库管理器:

从目标模块生成连接器可以使用的库文件;

●OH51目标文件至HEX格式的转换器:

从绝对目标模块生成IntelHEX文件;

●RTX—51实时操作系统:

简化了复杂的实时应用软件项目的设计。

通过查阅资料和上网看有关KeilC51的视屏,我们发现其语法规则和我们习

过的C语言很类似,因此我们选择了比汇编更简单一点的C语言程序设计方法。

硬件原理图:

2.多功能时钟C程序框图:

 

程序开头部分:

#include//头文件

#defineuintunsignedint

#defineucharunsignedchar//宏定义

sbitduan=P2^2;//段码位选端

sbitwei=P2^3;//位码位选端

sbitbeep=P2^0;//蜂鸣器位定义

bitflag2,flag3;//标志位定义

ucharcodeDuanma[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//LED显示段码

ucharcodeWeima[]={

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED位码选择

ucharhour=07,min=59,sec=55,temp[8],key1;

uintnum1;

/*------------------

声明函数

------------------*/

voidinit();//初始化函数

voiddisplay();//显示函数

voiddelay(uint);//MS级延时函数

voiddelay2(uint);//US级延时函数

ucharkeyscan();//带返回值的键扫函数

(oidbep();//蜂鸣器函数)

3.主函数

voidmain()

{

init();//调用初始化函数对定时器进行初始化

while

(1)//主循环

{

key1=keyscan();//每次循环都扫描一次键盘

switch(key1)

{

case1:

{hour++;if(hour==24)hour=0;}break;

case2:

{hour--;if(hour==255)hour=23;}break;

case3:

{min++;if(min==60)min=0;}break;

case4:

{min--;if(min==255)min=59;}break;

default:

break;

}

bep();//每次循环都调用蜂鸣器函数

}

}

4.初始化函数

voidinit()//对定时器进行初始化

{

TMOD=0x01;//设置定时器0,工作方式1

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;//装初值,2MS进一次中断

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器

}

5.键盘扫描函数

ucharkeyscan()

{

ucharkey;

if(P1!

=0xff)//第一次判断是否有键按下

{

delay

(2);//延时消抖

if(P1!

=0xff)//再次判断是否有键按下

{

key=P1;//将按键值赋给key

while(P1!

=0xff);//抬手检测,只有当按键释放才跳出while循环

{

switch(key)//判断是哪个功能键按下

{

case0xfe:

return1;break;//返回相应的值

case0xfd:

return2;break;

case0xfb:

return3;break;

case0xf7:

return4;break;

}

}

}

}

return0;//无按键按下则直接返回主函数

}

6.两个延时函数

voiddelay(uintz)//延时约1MS

{

uintx;

for(z;z>0;z--)

for(x=110;x>0;x--);

}

voiddelay2(uintz)//US级延时

{

uintx;

for(z;z>0;z--)

for(x=10;x>0;x--);

}

7.定时器0中断函数

voidTimer0()interrupt1

{

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;//重新装入初值

num1++;

display();//调用显示函数

if(num1==500)//500*2MS=1S,秒累加

{

num1=0;

sec++;

if(sec==60)//秒清零,分累加

{

sec=0;

min++;

if(min==30)

{

flag2=1;//判断是否为半点,是则标志位flag2置1

}

if(min==60)//分清零,时累加

{

min=0;

hour++;

flag3=1;//整点时标志位flag3置1

if(hour==24)

{

hour=0;

}

}

}

}

}

8.显示函数

voiddisplay()

{

uchari;

temp[0]=Duanma[hour/10];//依次分解时、分、秒并放入temp数组

temp[1]=Duanma[hour%10];

temp[2]=0x40;

temp[3]=Duanma[min/10];

temp[4]=Duanma[min%10];

temp[5]=0x40;

temp[6]=Duanma[sec/10];

temp[7]=Duanma[sec%10];

wei=1;//位选打开

P0=Weima[i];//送位码

wei=0;//关位选

P0=0x00;//消隐

duan=1;//段选打开

P0=temp[i];//送段码

duan=0;//关段码

i++;

if(i==8)//循环8次,将8个LED动态扫描一遍

i=0;

}

9.软件及程序调试

KeilC51软件进行一些简单的程序调试,来检查一些程序的语法错误等。

主要的调试方法还是将程序编译成HEX文件后下载进单片机进行硬件测试。

根据实际显示及报时效果再进行程序的修改。

10.设计者体会及心得

经过这次用单片机设计多功能时钟的课程设计,我对本学期所学的微机原理课程有了更深入的了解。

同时也对课本知识进行了系统的再复习和实践应用。

在设计程序过程中,自己需要不断查阅相关资料和上网观看相关视频。

当然,即使程序设计完成之后,还要进行更加繁琐的调试及修改。

由于我在本次课程设计之前已有对单片机的硬件和程序设计有所了解和一定的实践(通过自己购买51系列的开发板进行学习),因此,程序的大体设计流程在不到半天的时间里就完成了。

接下来的任务是不断调试软件的各项功能是否能按照设计预期在硬件上实现。

通过将近4天的程序调试及修改,终于将多功能时钟按照预期的想法实现了。

此次课程设计对我的意义很大,特别是经过设计一个完成的小系统,使我明白了很多课本上无法掌握的知识,对单片机的工作原理及程序设计有了深一步的了解。

在和指导老师的交流过程中,我也深刻体会到了自己在程序设计中的很多不足之处。

 

参考文献:

1.张毅刚新编MCS-51单片机应用设计哈尔滨工业大学出版社[2009]

2.周立功增强型80C51单片机速成与实战北京航空航天大学出版社[2003]

3.张天凡51单片机C语言开发详解电子工业出版社[2008]

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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