华科大通信工程09级课程设计报告正式版.docx
《华科大通信工程09级课程设计报告正式版.docx》由会员分享,可在线阅读,更多相关《华科大通信工程09级课程设计报告正式版.docx(23页珍藏版)》请在冰点文库上搜索。
华科大通信工程09级课程设计报告正式版
《单片机应用》
课程设计报告
题目:
电子钟的设计
院(系):
信息科学与技术
专业班级:
通信0902
学生姓名:
学号:
指导教师:
2012年6月11日至2012年6月15日
华中科技大学武昌分校制
单片机应用课程设计任务书
一、设计(调查报告/论文)题目
电子钟的设计
二、设计(调查报告/论文)主要内容
通过对电子钟的安装调试,需学习掌握完成:
(1)单片机系统的整体设计流程。
(2)单片机系统的硬件、软件调试方法及相关工具的使用。
(3)理解电路原理图与工作过程。
(4)各种常见元器件的选择及使用。
三、原始资料
(1)电子钟的电路原理图及元器件清单
(2)制作套装
四、要求的设计(调查/论文)成果
用80C51/52单片机编程控制显示的电子钟。
(1)要有8位LED显示器,分别显示“年号:
月份:
日期”/“时:
分:
秒”
(2)可以设置四个输入按键,功能分别是“移位”,“数字+”,“数字-”,“存储”,即“SHIFT”,“NUM+”,“NUM-”,“SAVE”。
(3)显示过程:
实验板通电开机后,8位LED显示器显示“时:
分:
秒”。
按下“SHIFT”后第一位数字闪动,继续按下“SHIFT”后面数字闪动移位。
再按“NUM+”数字增加,按“NUM-”数字减少,按“SAVE”储存修改结果。
(4)能够正确安装和焊接硬件电路板。
拿到元器件后,用万用表对电子元器件进行参数测量、检查。
焊接时,要焊点饱满、光洁,无虚焊、漏焊、错焊。
(5)熟悉单片机系统的工作原理及调测方法。
软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课程设计报告,格式符合学校规范标准,字数不少于2000字。
五、进程安排
第一天:
讲解课题,选择课题,分发元器件,焊接、调试硬件;
第二天到第四天:
编写、调试程序;
第五天:
系统验收、评分,交课设报告。
六、主要参考资料
[1]陈青.单片机应用课程设计指导书.武汉:
华中科技大学武昌分校.
[2]姜志海.单片机原理及应用.北京:
电子工业出版社,2007.
[3]康华光.电子技术基础模拟部分,北京:
高等教育出版社,2003.
指导教师(签名):
20年月日
目录
1.课程设计的目的1
2.课程设计题目描述和要求1
3.课程设计报告内容1
3.1课题设计方案及基本原理2
3.2软件设计2
3.3调试3
4.总结4
参考资料4
附录1电路原理图5
附录2硬件实物图6
附录3源程序清单9
1课程设计的目的
例文如下,可以根据自己的需要加入相应文字:
通过对电子钟的安装调试,需学习掌握:
(1)单片机系统的整体设计流程。
(2)单片机系统的硬件、软件调试方法及相关工具的使用。
(3)Protel绘制电路原理图的方法。
(4)各种常见元器件的选择及使用。
2课程设计题目描述和要求
题目描述:
电子钟的设计
制作要求:
用80C51/52单片机编程控制显示的电子钟。
(1)要有8位LED显示器,分别显示“年号:
月份:
日期”/“时:
分:
秒”
(2)可以设置四个输入按键,功能分别是“移位”,“数字+”,“数字-”,“存储”,即“SHIFT”,“NUM+”,“NUM-”,“SAVE”。
(3)显示过程:
实验板通电开机后,8位LED显示器显示“时:
分:
秒”。
按下“SHIFT”后第一位数字闪动,继续按下“SHIFT”后面数字闪动移位。
再按“NUM+”数字增加,按“NUM-”数字减少,按“SAVE”储存修改结果。
(4)能够正确安装和焊接硬件电路板。
拿到元器件后,用万用表对电子元器件进行参数测量、检查。
焊接时,要焊点饱满、光洁,无虚焊、漏焊、错焊。
(5)熟悉单片机系统的工作原理及调测方法。
软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课设报告。
3课程设计报告内容
内容:
1、按实验要求写出实验电路内容、构成原理。
2、写出实验焊接、调试硬、软件直至完成的过程。
3、写出实验中遇到的问题,及其解决的方法。
4、写出测试结果(数据表格),或画出波形图。
5、个人收获、体会和建议。
6、附带电路原理图、程序流程图、程序清单。
3.1课题设计方案及基本原理
首先定义一些用到的管脚:
调时,调分,调秒。
调节关,调节开,日期开,日期关
然后定义时分秒xiaoshi,fen,miao
接着就是数码管的段选用数组定义出来,好后面直接调用
再就是8位就是数码管个数给相应的xiaoshi,fen,miao各两个,分为高地位
接下来就是调用函数的申明
主函数开始:
1.调用中断,使定时中断开始
2.把整个主函数放到一个死循环里面
3,若有P0.5按下就调用日期函数显示日期
4.调用键盘控制函数,实现时分秒的控制
5.把得到的键盘控制xiaoshi,fen.miao分配给fenpei函数,让他算出相应的数码管位选
6.一切准备好了,直接调用显示函数
7.如果没有任何控制键按下,那就显示时间,中断作用了·其中中断标志最为关键。
判断准则
图3-1波形图
3.2软件设计
首先,我是用C语言编的,相比于会变应该简单多了
设计方案:
程序所用的个片程序段调用
1,中断准备程序(中断初始化的一些初值等)
2,分配函数,作用是计算出时分秒的具体数值然后传给相应的时分秒调用出品华科大论坛、
3,数码管显示程序,也就是P1端口的为选和段选
4,延时函数,主要用作数码管动态显示延时和键盘防抖延时设计
5,键盘调试程序,用作调时间的
6,日期显示函数,直接调用过来显示日期
3.3调试
4总结出品华科大论坛、
本来想用汇编写的,但是由于去年暑期在这里稍微练习了熟悉了一下C编写,其实去年用C才刚玩到中断就没搞了,但是还得感谢去年这里的氛围···
老师总共给我接近5天的时间来写程序和调试,其实最难的不是写程序而是不断的问题接踵而来,让你粗手不及,头天下午把程序写完本以为天衣无缝,自己在电脑上反复编译没错,高兴死了跑到实验室去玩,结果烧进去没反映,而且软件兼容性也有问题,很多的问题你几乎没遇到过,但是你必须的解决,程序绝对不是一遍就能出来的,是通过不断的实验现象不断改进,通过实验结果数码管显示情况,按键情况等来判断程序那里有问题,所以我觉得C还是好多了,因为我写的时候全部是调用,主函数几乎都是调用的,模块完全独立,实验结果哪里显示不对我直接找到相应的模块就可以了,比如调分不对,那我直接到按键调用程序里面找到调分这段程序就OK了!
总结倒是没有什么东西,就是练练手,实践出真知撒,天天啃课本完全不是一回事!
所以我一直说单片机你可以不看书,直接写程序,从流水等开始一步一步来,回头你就会发现什么课本的,汇编什么的都是浮云··灯亮了,数码管显示了,计算器能工作了·············
参考文献
[1]姜志海.单片机原理及应用.北京:
电子工业出版社,2007.
[2]陈堂敏.刘焕平主编.单片机原理与应用.北京:
北京理工大学出版社,2007.
[3]沈美明.温动蝉编著.IBM-PC汇编语言程序设计.北京:
清华大学出版社,1994.
[4]张仰森等编.微型计算机常用软硬件技术速查手册.北京:
北京希望电脑公司,1994.
[5]江修汗等编.计算机控制原理与应用.西安:
西安电子科技大学出版社,1999.
附录1电路原理图
附录2硬件实物图
附录3源程序清单
#include
//#defineunsignedcharuchar
//#defineunsignedintuint
sbitD0=P0^0;//秒调
sbitD1=P0^1;//分调
sbitD2=P0^2;//时跳
sbitD3=P0^3;//调节开关(开)
sbitD4=P0^4;//调节开关(关)
sbitD5=P0^5;//日期开关
sbitD6=P0^6;//从日期返回时钟显示
unsignedintxiaoshi=0,fen=0,miao=0;
unsignedcharduan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};//相当于P1的低位,数码管段选;
unsignedcharc7,c6,c5,c4,c3,c2,c1,c0;//定义时分秒对应的高地位的具体数字
unsignedinta,b;//定义中断溢出标志
voidfenpei();//fenpei函数申明,作用是计算出时分秒的具体数值然后传给c7,c6,c5.....
voidzdzb();//中断准备工作
voidxianshi(unsignedcharc7,unsignedcharc6,unsignedcharc5,unsignedcharc4,unsignedcharc3,unsignedcharc2,unsignedcharc1,unsignedcharc0);
voiddelay(unsignedcharz);//延时函数申明
voidkey();//键盘控制时分秒申明
voidriqi();//日期调用函数申明
voidmain()//主函数
{
zdzb();//中断开始
while
(1)//整个主函数一直循环
{
if(D5==0)//判断P0.5键是否按下
{
delay(50);
if(D5==0)//再次判断是否按下,这是个防抖设计,如果此时=0,那么就确定是按下了
riqi();//显示日期
}
key();//键盘控制调节时分秒
fenpei();//把相应的时分秒计算出来
xianshi(c7,c6,c5,c4,c3,c2,c1,c0);//显示时钟
if(b==1)//b是个中断标志,意思是定时了1s后b=1,此时才执行下面操作
{
miao++;
if(miao==60)
{
miao=0;
fen++;
b=0;//注意,每次+1之后都要把b置0,否则中断就没意义了
if(fen==60)
{
fen=0;
xiaoshi++;
b=0;
if(xiaoshi==24)//这里是24而不是60
{
xiaoshi=0;
b=0;
}
}
}
b=0;//如果秒不需要进位,同样需要把b之0
}
fenpei();//再次分配时分秒给c7,c6....好让key()函数调用
}
}
voidxianshi(unsignedcharc7,unsignedcharc6,unsignedcharc5,unsignedcharc4,unsignedcharc3,unsignedcharc2,unsignedcharc1,unsignedcharc0)
{
unsignedcharm,n;
m=0x00;//P1口高四位控制位选
n=duan[c0];//co是秒的低位,把秒的低位给了P1口的低四位
m=m|n;//高四位和第四位相与,得到的就是P1口
P1=m;//直接显示了
delay(10);//短暂延时为了动态显示
m=0x10;
n=duan[c1];
m=m|n;
P1=m;
delay(10);
m=0x30;
n=duan[c3];
m=m|n;
P1=m;
delay(10);
m=0x40;
n=duan[c4];
m=m|n;
P1=m;
delay(10);
m=0x60;
n=duan[c6];
m=m|n;
P1=m;
delay(10);
m=0x70;
n=duan[c7];
m=m|n;
P1=m;
delay(10);
}
voidfenpei()
{
c7=xiaoshi/10;//取得小时的高位
c6=xiaoshi%10;//取得小时的低位
c5=0;//此处c5留空也行
c4=fen/10;//取得分钟的高位
c3=fen%10;
c2=0;
c1=miao/10;//取得秒的高位
c0=miao%10;
}
voidkey()
{
if(D3==0)
{
delay(200);
if(D3==0)//同理确定了P0.3按下了
{
TR0=0;//中断停止,因为我此时是要进行调整的
if(D0==0)
{
delay(200);
if(D0==0)//按下P0.3的同时也按下了P0.0,那就是调节秒钟的意思
{
miao++;
fenpei();//每次调节+1之后都要重现分配以便利于key()再次调用
if(miao==60)
{
miao=0;//雕节满了60就自动之0
while(D0==0);//如果一直按着那就是个死循环
}
}
}
if(D1==0)//以下的都和上面秒钟的调节注释类似
{
delay(200);
if(D1==0)
{
fen++;
fenpei();
if(fen==60)
{
fen=0;
while(D1==0);
}
}
}
if(D2==0)
{
delay(200);
if(D2==0)
{
xiaoshi++;
fenpei();
if(xiaoshi==24)
{
xiaoshi=0;
while(D2==0);
}
}
}
}
}
if(D4==0)//这个小if语句的作用是当你想结束调节的时候,想返回显示时钟,那就按下P0.4,重新开始计时
{
delay(50);
if(D4==0)
TR0=1;
}
}
voidzdzb()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidzhongduan()interrupt1using1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
b=1;
}
}
voiddelay(unsignedcharz)
{
unsignedcharx,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
voidriqi()
{
while
(1)
{
unsignedchare,f;
e=0x00;//P1口高四位控制位选
f=duan[4];//co是秒的低位,把秒的低位给了P1口的低四位
e=e|f;//高四位和第四位相与,得到的就是P1口
P1=e;//直接显示了
delay(10);
e=0x10;
f=duan[1];
e=e|f;
P1=e;
delay(10);
e=0x20;
f=duan[6];
e=e|f;
P1=e;
delay(10);
e=0x30;
f=duan[0];
e=e|f;
P1=e;
delay(10);
e=0x40;
f=duan[2];
e=e|f;
P1=e;
delay(10);
e=0x50;
f=duan[1];
e=e|f;
P1=e;
delay(10);
e=0x60;
f=duan[0];
e=e|f;
P1=e;
delay(10);
e=0x70;
f=duan[2];
e=e|f;
P1=e;
delay(10);
if(D6==0)//注意此出按下P0.6是结束日期的显示,返回主函数显示时钟
break;
}
}
课程设计成绩评定表
成
绩
评
定
项目
比例
得分
平时成绩(百分制记分)
30%
业务考核成绩(百分制记分)
70%
总评成绩(百分制记分)
100%
评定等级
优良中及格不及格
指导教师(签名):
20年月日