1、微机单片机原理及应用课程设计微机(单片机)原理及应用课程设计课题名称:基于DOFLYE LY-51S单片机开发板的多功能时钟设计(软件设计及调试)负责人 :唐泽锋小组成员:唐泽锋 王增格 孔德源班 级:08测控(2)班指导老师:罗剑波 王仁杰课程设计任务书 课程设计名称多功能时钟主要任务与目标通过设计一个多功能时钟,掌握设计、调试单片机应用系统的方法。任务涉及的知识点包括C程序语言、STC-52 单片机I/O 应用、中断与定时器应用、人机接口应用技术等。主要内容与基本要求要求设计的多功能时钟完成以下功能:实时显示当前时间(8 位数码管显示,2 位显示小时,2 位显示分钟,2 位显示秒,小时、分
2、钟及分钟秒之间用“-”隔开)。半点及整点时间用蜂鸣器报时,半点短鸣,整点长鸣对应的次数。22 点至6 点不鸣。能用键盘调整当前时钟。计划进度与安排:1) 布置任务,分析任务; (1天)2) 方案设计,相关知识学习;(1天)3) 硬件原理图设计;(2天)4) 软件设计;(3天)5) 软硬件调试;(5天)6) 撰写设计报告;(1天)7) 答辩。(1天)实习地点 : 15-202 指导教师签 名年 月 日系 意 见系主任签名: 年 月 日1Keil C51 简介 Keil C51Vision2集成开发环境是Keil Software,Inc/Keil Elektronik GmbH开发的基于80C5
3、1 内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、连接、目标代码的生成、软件仿真及硬件仿真等完整的开发流程。尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活地控制选项,在开发大型项目时非常理想。Keil C51集成开发环境的主要功能有以下几点: Vision2 for Windows:是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中; C51国际标准化C交叉编译器:从C源代码产生可重定位的目标模块; A51宏汇编器:从80C51汇编代码产生可重定位的目标模块; BL51连接/定位器
4、:组合由C51和A51产生可重定位的目标模块,生成绝对目标模块; LIB51库管理器:从目标模块生成连接器可以使用的库文件; OH51目标文件至HEX格式的转换器:从绝对目标模块生成Intel HEX文件; RTX51实时操作系统:简化了复杂的实时应用软件项目的设计。通过查阅资料和上网看有关Keil C51的视屏,我们发现其语法规则和我们习过的C语言很类似,因此我们选择了比汇编更简单一点的C语言程序设计方法。硬件原理图:2. 多功能时钟C程序框图:程序开头部分:#include/头文件#define uint unsigned int#define uchar unsigned char/宏定
5、义sbit duan=P22;/段码位选端sbit wei=P23;/位码位选端sbit beep=P20;/蜂鸣器位定义bit flag2,flag3;/标志位定义uchar code Duanma=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/LED显示段码uchar code Weima=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/LED位码选择uchar hour=07,min=59,sec=55,temp8,key1;uint nu
6、m1;/*-声明函数-*/void init();/初始化函数void display();/显示函数void delay(uint);/MS级延时函数void delay2(uint);/US级延时函数uchar keyscan();/带返回值的键扫函数(oid bep();/蜂鸣器函数)3. 主函数void main() init();/调用初始化函数对定时器进行初始化 while(1)/主循环 key1=keyscan();/每次循环都扫描一次键盘 switch(key1) case 1:hour+;if(hour=24) hour=0;break; case 2:hour-;if(ho
7、ur=255) hour=23;break; case 3:min+;if(min=60) min=0;break; case 4:min-;if(min=255) min=59;break; default:break; bep();/每次循环都调用蜂鸣器函数 4. 初始化函数void init()/对定时器进行初始化 TMOD=0x01;/设置定时器0,工作方式1 TH0=(65536-2000)/256; TL0=(65536-2000)%256;/装初值,2MS进一次中断 EA=1;/开总中断 ET0=1;/开定时器0中断 TR0=1;/启动定时器5. 键盘扫描函数uchar keys
8、can() uchar key; if(P1!=0xff)/第一次判断是否有键按下 delay(2);/延时消抖 if(P1!=0xff)/再次判断是否有键按下 key=P1;/将按键值赋给key while(P1!=0xff);/抬手检测,只有当按键释放才跳出while循环 switch(key)/判断是哪个功能键按下 case 0xfe:return 1;break;/返回相应的值 case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; return 0;/无按键按下则直接返回主函数6. 两
9、个延时函数void delay(uint z)/延时约1MS uint x; for(z;z0;z-) for(x=110;x0;x-);void delay2(uint z)/US级延时 uint x; for(z;z0;z-) for(x=10;x0;x-);7. 定时器0中断函数void Timer0() interrupt 1 TH0=(65536-2000)/256; TL0=(65536-2000)%256;/重新装入初值 num1+; display();/调用显示函数 if(num1=500)/500*2MS=1S,秒累加 num1=0; sec+; if(sec=60)/秒清
10、零,分累加 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. 显示函数void display() uchar i; temp0=Duanmahour/10;/依次分解时、分、秒并放入temp数组 temp1=Duanmahour%10; temp2=0x40; temp3=Duanmamin/10; temp4=Duanmamin%10; temp5=0x40; temp6=Du
11、anmasec/10; temp7=Duanmasec%10; wei=1;/位选打开 P0=Weimai;/送位码 wei=0;/关位选 P0=0x00;/消隐 duan=1;/段选打开 P0=tempi;/送段码 duan=0;/关段码 i+; if(i=8)/循环8次,将8个LED动态扫描一遍 i=0;9. 软件及程序调试 Keil C51软件进行一些简单的程序调试,来检查一些程序的语法错误等。主要的调试方法还是将程序编译成HEX文件后下载进单片机进行硬件测试。根据实际显示及报时效果再进行程序的修改。10. 设计者体会及心得 经过这次用单片机设计多功能时钟的课程设计,我对本学期所学的微机
12、原理课程有了更深入的了解。同时也对课本知识进行了系统的再复习和实践应用。在设计程序过程中,自己需要不断查阅相关资料和上网观看相关视频。当然,即使程序设计完成之后,还要进行更加繁琐的调试及修改。 由于我在本次课程设计之前已有对单片机的硬件和程序设计有所了解和一定的实践(通过自己购买51系列的开发板进行学习),因此,程序的大体设计流程在不到半天的时间里就完成了。接下来的任务是不断调试软件的各项功能是否能按照设计预期在硬件上实现。通过将近4天的程序调试及修改,终于将多功能时钟按照预期的想法实现了。 此次课程设计对我的意义很大,特别是经过设计一个完成的小系统,使我明白了很多课本上无法掌握的知识,对单片机的工作原理及程序设计有了深一步的了解。在和指导老师的交流过程中,我也深刻体会到了自己在程序设计中的很多不足之处。参考文献:1. 张毅刚 新编MCS-51单片机应用设计 哈尔滨工业大学出版社 20092. 周立功 增强型80C51单片机速成与实战 北京航空航天大学出版社 20033. 张天凡 51单片机C语言开发详解 电子工业出版社 2008
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2