电子表.docx
《电子表.docx》由会员分享,可在线阅读,更多相关《电子表.docx(26页珍藏版)》请在冰豆网上搜索。
电子表
湖南工程学院
课程设计
课程名称单片机原理与应用
课题名称电子表
专业
班级
学号
姓名
指导教师周向红、李晓秀、王迎旭、汪超
2013年6月21日
湖南工程学院
课程设计任务书
课程名称单片机原理与应用
课题电子表
专业班级自动化1003班
学生姓名
学号
指导老师周向红、李晓秀、王迎旭、汪超
审批
任务书下达日期2013年6月21日
任务完成日期2013年6月25日
设计内容与设计要求
设计内容:
本课题要求以单片机为核心设计一个多功能电子表,具有电子时钟、时钟设置和跑表功能。
做时钟时在6位LED显示器上显示时、分、秒,做跑表时显示范围000.0秒~999.9秒,并具有时钟启动、时钟停止、跑表启动、跑表复位、时钟调整功能键。
要求焊接好开发板,在开发板上进行调试。
设计要求:
1)确定系统设计方案;
2)进行系统的硬件设计;
3)完成必要元器件选择;
4)开发板焊接及测试
5)系统软件设计及调试;
6)系统联调及操作说明
7)写说明书
主要设计条件
1、MCS-51单片机实验操作台1台;
2、PC机及单片机调试软件,仿真软件proteus;
3、开发板1块;
4、制作工具1套;
5、系统设计所需的元器件。
说明书格式
封面
课程设计任务书
目录
第1章、概述
第2章、系统总体方案设计
第3章硬件设计
第4章开发板焊接及其测试
第5章软件设计与说明(包括流程图)
第6章调试步骤、结果、使用说明
第7章设计总结
第8章参考文献
附录:
系统电路原理图(用PROTEL99制作)、系统程序清单。
电气与信息工程系课程设计评分表
进度安排
设计时间分为二周
第一周
星期一、上午:
布置课题任务,课题介绍及讲课。
下午:
借阅有关资料,总体方案讨论。
星期二、分班级焊接开发板
星期三、确定总体方案,学习与设计相关内容。
星期四、各部分方案设计,各部分设计。
星期五、设计及上机调试。
星期六、设计并调试
第二周
星期一:
设计及上机调试。
星期二:
调试,中期检查。
星期三:
调试、写说明书。
星期四--星期五上午:
写说明书、完成电子版并打印成稿。
星期五下午:
答辩。
目录
第1章概述1
第2章系统总体方案设计2
第3章硬件设计3
3.1系统框图3
3.2时钟电路4
3.3按键电路4
3.4外部显示电路6
第4章开发板焊接及测试7
第5章软件设计与说明8
5.1流程图8
5.2程序设计10
第6章调试步骤、结果、使用说明11
6.1调试步骤及结果11
6.2使用说明12
第7章设计总结13
附录14
1.总电路图14
2.程序清单15
3.参考文献20
第1章概述
单片机是最典型的嵌入式计算机系统,可广泛地嵌入到工业控制单元、智能仪器仪表、家用电器、机器人、汽车电子系统及通信等产品中。
我国目前最常用的单片机有Intel公司的MCS-51系列、MCS-96系列;Philips公司的87、80系列;Atmel公司的89系列、AVR系列。
本课程设计将采用Atmel公司的AT89c52单片机。
Atmel公司所生产的AT89系列单片机是基于Intel公司的MCS-51系列而研制的。
Atmel公司把自身先进Flash存储技术和80c31核心相结合,从而生产出Flash单片机AT89C51系列,内含大容量的Flash存储器。
它与PC通信和下载程序都十分方便。
所以,在产品开发及生产便携式商品、手提式仪器等方面有着十分广泛的应用,也是目前取代传统的MCS-51系列单片机的主流单片机之一。
AT89C52单片机是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多高性低比的系统控制应用领域。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
用AT89C52单片机设计的电子时钟,可实现多功能和高精度的特点。
第2章系统总体方案设计
方案一:
采用数字逻辑电路
由555构成多谐振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,在经分频器输出标准秒脉冲,由两个74LS90级联构成两个60进制计数器和一个24进制计数器,满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。
计数器的输出经译码器送显示器。
这种方案是由纯硬件电路实现了设计,优点是省略了软件部分的设计,但是这种方案因为是纯硬件实现的,成本较高,误差较大,不灵活,因此在本次设计中不予以采用。
方案二:
采用时钟芯片
针对计算机系统对实时时钟功能的普遍需求,各大芯片生产厂家陆续推出了一系列的实时时钟集成电路,如DS1302、DS12887等。
这些实时时钟芯片虽然具备年、月、日、时、分、秒计时功能和多点定时功能,且计时数据的更新每秒自动进行一次,不需程序干预。
但必然会增加硬件电路的复杂性和成本,对于简单的电子表设计不经济,不予采用。
方案三:
采用单片机软件控制
利用MCS-51内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。
配合软件监控实现运行,停止,调时,调分,调秒。
该方案节省硬件成本,软件设计做够灵活,且能够使人在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,能够准确走时并实现多功能。
因此,本课题采用该方案。
第3章硬件设计
3.1系统框图
3.2时钟电路
51单片机内部有一个用于构成震荡器的高增益反向放大器,引脚X1和X2分别是反向放大器的输入端和输出端,通常,经由片外晶体振荡器或陶瓷谐振器与两个匹配电容一起构成了一个自激震荡电路,为单片机提供时钟电源。
各元件的取值如图所示。
3.3按键电路
本课题将使用4个功能按键S2、S3、S4、S5,各按键的功能分别为:
S2
时间加调整按钮;
跑秒复位按钮
S3
时间调整位选中按钮
S4
显示界面切换按钮
S5
跑秒启动和暂停按钮
3.4复位按键电路
S6为RC上电复位按钮,在单片机RST端变为高电平的第二个机器周期执行内部复位,以后每个周期重复一次,直至RST端出现低电平。
3.4外部显示电路
采用6个共阴数码显示管LED1—LED6,用两个锁存器U1、U2(74HC573)分别锁存位选信号和段选信号,c的下降沿锁存信号。
第4章开发板焊接及测试
进行电路板的焊接前,先检查各个元件是否都没有损坏,确认所有元件都为完好元件后便进行电路板的焊接工作。
焊接注意事项:
1应根据焊接对象合理选择不同类型的电烙铁。
2电烙铁插头最好使用三极插头。
要使外壳妥善接地。
3使用前,应认真检查电源插头、电源线有无损坏。
并检查烙铁头是否松动。
4铁使用中,不能用力敲击。
要防止跌落。
烙铁头上焊锡过多时,可用布擦掉。
不可乱甩,以防烫伤他人。
在使用过程中要经常挂锡。
5使用过程中,烙铁不能到处乱放。
不焊时,应放在烙铁架上。
注意电源线不可搭在烙铁头上,以防烫坏绝缘层而发生事故。
6使用结束后,应及时切断电源,拔下电源插头。
冷却后,再将电烙铁收回工具箱。
焊接完成后需进行测试,将开发板测试程序烧录到单片机中,启动开关,若焊接没有问题,测试程序的各功能将都能实现.
第5章软件设计与说明
5.1流程图
5.2程序设计
在程序设计上,主程序voidmain()对各个子程序进行调用;voiddelay()为延时子程序用于按键去抖动延时;voidkey1scan()、void
key2scan()、voidkey3scan()、voidkey30scan()、voidkey4scan()为按键扫描子程序。
两个定时器T0和T1分别为时钟功能和跑秒功能提供时间基准,其中断子程序如下:
voidclock()interrupt1//定时器0中断,定时1/20秒
{
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
a++;
}
voidmiao_clock()interrupt3//定时器1中断,定时0.001秒
{
TL1=(65536-10000)%256;
TH1=(65536-10000)/256;
S_++;
}
第6章调试步骤、结果、使用说明
6.1调试步骤及结果
启动电源开关,系统初始化并进入时钟模式,开始走时,下图为00时03分06秒时的情形:
按下S3进入时间调整模式,下图是对时间分的个位调整界面:
按动按键S4,切换到跑秒模式,初始化如下图:
按键S5启动跑秒功能:
6.2使用说明
启动电源开关,开启电子表功能,各按键的的功能参见3.3节。
第7章设计总结
经过多次调试和改进,实现了电子表和跑秒的功能,完成任务要求。
在这次课程设计中,深深感觉到思路的重要性。
开始由于没有一个清晰的思路,想到一步做一步,等到后面步序多了,引起了思绪的混乱,程序越来越不好编写,甚至都要重新开始编写。
在这次的程序设计中遇到了两个难点。
第一个是时间调整位的闪烁功能。
本来没想过要加闪烁功能的,但时间调整没有闪烁功能的话,往往不知道要调节的是时间的哪一位,往往会引起误操作,影响体验度。
第二个是时间的调整,这里可以用两个调整按键分别实现加、减调时,但该电子表的功能比较简单,最终只用了一个按键,进行时间“加”调整,空出一个按键可以扩展其他功能。
在跑秒中加入暂停功能,可对同一事件多次间歇计时,使跑秒的功能更完善。
程序设计是一个耐心的活,必须静下心来,何况还在这么炎热的季节。
这次课程设计除了对我在技能上的提升外,另一个收获就是锻炼了自己的耐心,受益匪浅。
附录
1.总电路图
2.程序清单
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitwei=P2^7;
sbitduan=P2^6;
sbitkey1=P3^6;//页面切换b=1跑秒,否则时钟
sbitkey2=P3^7;//启动、停止s5
sbitkey3=P3^4;//S2,跑秒复位按钮,给S_清零;加调时按钮
sbitkey4=P3^5;//时间设定按钮
uchara=0,c=0,d=0,S_=0,s=0,M_=0,m=0,H_=0,h=0,b=0;//a,定时1s,计数20次;c,定时器1,计数,smh秒分时
voiddelay(uintt)//延时子程序
{
while(--t);
}
voiddisplay(s1,s2,m1,m2,h1,h2)//显示子程序
{
uchartab1[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x80};//led显示0-9,点
if((b==0&&d!
=1)||(b!
=0)||(b==0&&d==1&&a<10))
{wei=1;P0=0xfe;wei=0;P0=0xff;
duan=1;P0=tab1[h2];duan=0;}
if(b==0&&d==1&&a>=10)
{wei=1;P0=0xfe;wei=0;P0=0xff;
duan=1;P0=0x00;duan=0;}
delay(100);
if((b==0&&d!
=2)||(b!
=0)||(b==0&&d==2&&a<10))
{wei=1;P0=0xfd;wei=0;P0=0xff;
duan=1;P0=tab1[h1];duan=0;}
if(b==0&&d==2&&a>=10)
{wei=1;P0=0xfd;wei=0;P0=0xff;
duan=1;P0=0;duan=0;}//xiaoshi显示
delay(100);
if((b==0&&d!
=3)||(b!
=0)||(b==0&&d==3&&a<10))
{wei=1;P0=0xfb;wei=0;P0=0xff;
duan=1;P0=tab1[m2];duan=0;}
if(b==0&&d==3&&a>=10)
{wei=1;P0=0xfb;wei=0;P0=0xff;
duan=1;P0=0;duan=0;}
delay(100);
if((b==0&&d!
=4)||(b!
=0)||(b==0&&d==4&&a<10))
{wei=1;P0=0xf7;wei=0;P0=0xff;
duan=1;P0=tab1[m1];duan=0;}
if(b==0&&d==4&&a>=10)
{wei=1;P0=0xf7;wei=0;P0=0xff;
duan=1;P0=0;duan=0;}//分钟显示
delay(100);
wei=1;P0=0xef;wei=0;P0=0xff;
duan=1;P0=tab1[s2];duan=0;
delay(100);
wei=1;P0=0xdf;wei=0;P0=0xff;
duan=1;P0=tab1[s1];duan=0;//miao显示
delay(100);
}
voidkey1scan()//key1扫描,界面切换
{
if(key1==0)
{delay(30);
if(key1==0)b=~b;
}
while(!
key1);
}
voidkey2scan()//key2扫描,跑秒启动、暂停
{
if(key2==0)
{delay(30);
if(key2==0)c=~c;
}
while(!
key2);
}
voidkey30scan()//tiaoshi
{
if(key3==0)
{delay(30);
if(key3==0)
switch(d)
{
case0:
break;
case1:
h+=10;break;
case2:
h++;break;
case3:
m+=10;break;
case4:
m++;break;
}
}
while(!
key3)
{if(d==3||d==4)s=0;}
}
voidkey3scan()//key3扫描,跑秒复位
{
if(key3==0)
{delay(30);
if(key3==0)c=0;
}
while(!
key3)
S_=M_=H_=0;
}
voidkey4scan()//key4,d(0.1.2.3.4)
{
if(key4==0)
{delay(30);
if(key4==0)d++;
if(d>4)d=0;
}
while(!
key4);
}
voidmain()
{
ucharh2,h1,m2,m1,s2,s1;//六个数码管,对应时分秒,两位
ucharH11,H22,M11,M22,S11,S22;
TMOD=0x11;
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;//定时器0,方式1,定时1s(需计数20次,a)
TL1=(65536-10000)%256;
TH1=(65536-10000)/256;//定时器1,方式1,定时100ms
EA=1;
ET0=1;
ET1=1;
EA=1;
TR0=1;
while
(1)
{TR1=c;
if(a>=20){s++;a=0;}//计数满20,即1秒
if(s>=60){m++;s=0;}//满60秒,1分钟
if(m>=60){h++;m=0;}//满60分,1小时
if(h>23||h>=23&&s==59&&m==59){h=0;}//24小时
s1=s%10;s2=s/10;
m1=m%10;m2=m/10;
h1=h%10;h2=h/10;
if(S_>=100){M_++;S_=0;}//计数满100,即1秒
if(M_>=100){H_++;M_=0;}//满60秒,1分钟
if(H_>=9&&M_==99&&S_==99){H_=0;}//满60分,1小时
S11=S_%10;S22=S_/10;
M11=10;M22=M_%10;
H11=M_/10;H22=H_;
key1scan();
if(b==0)
{
display(s1,s2,m1,m2,h1,h2);
key4scan();
key30scan();
}
if(b!
=0)
{
d=0;//复位调时功能
display(S11,S22,M11,M22,H11,H22);
key2scan();
key3scan();
}
}
}
voidclock()interrupt1//定时器0中断,定时1/20秒
{
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
a++;
}
voidmiao_clock()interrupt3//定时器1中断,定时0.001秒
{
TL1=(65536-10000)%256;
TH1=(65536-10000)/256;
S_++;
}
3.参考文献
1、王迎旭编.《单片机原理与应用》[M].机械工业出版社.
2、楼然苗编.《51系列单片机设计实例》[M].北京航空航天大学出版社.
3、黄勤编.《计算机硬件技术基础实验教程》[M].重庆大学出版社
4、刘乐善编.《微型计算机接口技术及应用》[M].华中科技大学出版社.
5、陈光东编.《单片微型计算机原理及接口技术》[M].华中科技大学出版社.
6、周向红编《51系列单片机应用与实践教程》[M].北航出版社
电气信息学院课程设计评分表
项目
评价
优
良
中
及格
差
设计方案合理性与创造性(10%)
开发板焊接及其调试完成情况*(10%)
硬件设计或软件编程完成情况(20%)
硬件测试或软件调试结果*(10%)
设计说明书质量(20%)
答辩情况(10%)
完成任务情况(10%)
独立工作能力(10%)
出勤情况(10%)
综合评分
指导教师签名:
________________
日期:
________________
注:
表中标*号项目是硬件制作或软件编程类课题必填内容;
此表装订在课程设计说明书的最后一页。
课程设计说明书装订顺序:
封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。