资源描述
机电工程学院
课程设计报告书
题 目: 可调简易电子时钟
专 业:
班 级:
学 号:
学生姓名:
指导教师:
2012年 12月5日
机电工程学院课程设计报告
摘 要
功能简介:
1内容:(1)学习掌握PROTEUSD 运用
(2)利用动态扫描让八位数码管稳定的计时并实现简单的时间控制
2目标:
(1)掌握单片机控制八位数码管的动态扫描技术,包括程序设计和电路设计,实现稳定计时与时间调控
(2)用PROTEUS进行电路设计和实时仿真
3知识点链接
(1)数码管动态扫描 (动态扫描的定义以及与静态显示的区别)
动态显示的特点是将所有位数码管的段选线s一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
(2)总线的应用
元器件与总线的连线
P3口的接线采用总线方式,详细如图1------所示。
① 选择总线按钮
② 绘制总线:与普通电线的绘制方法一样,选择合适的起点、终点单击。
如果终点在空白处,左键双击结束连线。
画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可。在画斜线时,需要关闭线路自动路径功能才好绘制。
Proteus的线路自动路径功能简称WAR,当选中两个连接点后,WAR将选择一个合适的路径连线。WAR可通过使用标准工具栏里的“WAR”命令按钮来关闭或打开,也可以在菜单栏的“Tools”下找到这个图标。
③ 给与总线连接的导线贴标签PART LABELS
与P3口相连的线标签名依次为w1—w8,本电路中8位led数码管是通过总线与P3口相连,这些都需要标注,以表明正确的电气连接。单击绘图工具栏中的导线标签按钮,使之处于选中状态。将鼠标置于图形编辑窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个“×”号,表明找到了可以标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图1---所示。
注意,在标定导线标签的过程中,相互接通的导线必须标注相同的标签名。
目 录
摘 要 II
1前 言
1.1 课题开发背景
1.2 课题研究的目的和意义
1.3 课题的主要研究工作
2 系统硬件设计及说明
2.1部分硬件方案论述
2.2硬件电路图
2.3元件清单
2.4 AT89C51
3系统软件设计
3.1程序
3.2程序描述
4总结与展望
5 参考文献 ……………………………………………………………………………
8
1.前言
1.1课题开发背景
随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。
基于当前市场上的智能数字市场需求量大,其中数码管显示技术就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。以液晶显示技术的发展为背景,选择了比较常用的T6963C内置控制器型图形LCD(液晶显示嚣)模块,从应用角度介绍了该控制器的特点和基本功能,并描述了单片机控制T6963CLCD模块的显示机理。在此前提下以C51硬件开发语言为基础,给出了8051单片机与T6963C的接口电路框图,并以字符、图形的具体显示方法为例简要介绍了软件的设计流程及实现。
1.2 课题研究的目的和意义
1.利用所学过的知识,初步分析单片计算机控制系统的能力;
2.综合运用本专业方向所学知识,构成以单片机为核心控制系统的能力;
3.单片计算机控制系统实时软件的设计、 编制与调试的能力;
4.单片计算机控制系统中模拟部件(包括电压及功率放大部件) 以及常规传感部件的使用、调试的能力;
5.单片计算机控制系统综合调整及性能测试的能力;
6.实验结果分析、总结及撰写技术报告的能力。
利用AT89C51单片机自带资源,设计一款简易时钟,并能通过按键调控时间显示。
1.3 课题的主要研究工作
本课题设计的主要工作如下:
研究学习AT89C51单片机其功能,对学习过的单片机,C语言课程进行巩固,设计一款简易时钟,并能通过按键调控时间显示。
2 系统硬件设计及说明
2.1系统组成及总体框图
硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。
该设计要实现一种由单片机控制的秒表,单片机工作于12MHZ时钟频率。该设计具有一个按钮,方便、便捷。
系统结构图如电路图1示。
2.2硬件电路图
电路图1
2.3元件清单
元件名
数量
STC89C51
1
8段7位共阴数码管
1
无线性(22PF,33pF)
2,1
电阻220
1
排阻
1
晶振12MHZ
1
单刀单掷开关
3
2.4 AT89C51
该课程设计中我们选用的芯片是AT89C51。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
3系统软件设计
3.1程序及程序描述
用法描述:程序中利用3个按键对电子钟进行设置——key_m用来设置分;key_h用来设置时;key_init是将显示数字全为0。
#include <reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit key_m=P1^0; // “分”调时键
sbit key_h=P1^1; //“时”调时按键
sbit key_init=P1^2; //显示初始化键(全部置0)
uchar sec,min,hour; //时、分、秒
uchar i; //进入中断的次数
uchar code temp[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uchar z); //延时函数声明
void display(void) //显示函数
{
P3=0x01; //“时”十位显示
P2=temp[hour/10];
delay(4);
P3=0x02; //“时”个位显示
P2=temp[hour%10];
delay(4); //“分”十位显示
P3=0x08;
P2=temp[min/10];
delay(4);
P3=0x10; //“分”个位显示
P2=temp[min%10];
delay(4);
P3=0x24; //显示“-”
P2=0xbf;
delay(4);
P3=0x40; //“秒”十位显示
P2=temp[sec/10];
delay(4);
P3=0x80; //“秒”个位显示
P2=temp[sec%10];
delay(4);
}
void min_tiao() //“分”调时函数
{
while(!key_m) display(); //等待松开按键
sec=0;min++; //将“秒”位置0,同时分加1。
if(min==60)min=0;
}
void hour_tiao() //“时”调时函数
{
while(!key_h) display();
sec=0;hour++;
if(hour==24)hour=0;
}
void zero() //使led数字显示全为“0”
{
sec=0;min=0;hour=0;
}
void main() //主程序
{
i=0;
sec=0;
min=0;
hour=0;
TMOD=0x01; //T0为定时器方式工作模式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1; //开总中断
EA=1; //开定时器中断0
TR0=1; //启动定时
while(1)
{
if(!key_m)min_tiao(); //判断是否有按键按下
if(!key_h)hour_tiao();
if(!key_init)zero();
display();
}
}
void delay(uchar z) //延时函数
{
uchar x;
for(x=110;x>0;x--)
for(;z>0;z--);
}
void timer0() interrupt 1 //定时器中断
{
i++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(i==16) /****利用定时中断改变显示的时间***/
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;hour++;
if(hour==24){hour=0;}
}
}
}
}
3.2程序流程图
开始
初始化
判断是否有按键按下
调时程序
是
实时时钟走时
否
4总结与展望
单片机是我们从大一开始就学的一门课程。以前书本上的学习,并没有真正在实际的操作,往往有些纸上谈兵。程序设计要记要背的很多,很无聊,对于我们这些懒虫可是致命的,所以对编程上成绩一直不好,但在这次课程设计后我们发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加,虽然在程序设计方面还有很多的不足,时钟控制上还有所欠缺,当这次的实训绝对是难忘的,我学到很多。
作为一名机电一体化技术专业的大二学生,我们觉得做单片机课程设计是十分有意义的,而且是十分必要的。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我们发现效率很高,这是我们做这次课程设计的又一收获。然后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我们受益终身。此次课程设计,基本达到预定的效果,系统部分功能已实现,可以准确高效地计时。在设计的过程中,小组各成员各负其责,设计不同模块。不仅提高了设计的效率,而且体现了实践动手及团队合作的精神。
在此次设计过程中,虽然有很多程序的原理仍然没有弄懂,各器件的功能也不是完全了解,但是秉着勤奋刻苦和好学的态度,我在这次设计中对单片机的了解程度更增一步,也很大程度增大了我对单片机设计程序的兴趣。
本次课程设计是大学学习阶段一次非常难得的理论与实践相结合的机会,通过这次比较系统的项目设计提高了我们运用所学的专业基础知识来解决面临实际问题的能力。为了尽早完成作品,我们坚持努力,经过课下大量的实践操作,我们丰富了各种器件常识,收获了难得的实践经验。在单片机C语言方面也有了更深层次的理解,也大大增加了自己在编程方面的兴趣,这次课程设计中,我请教老师,同学,去图书馆,上网查资料,直至最后完成课程设计,心里有一股成就感,我想在这会成为我以后在这条路上努力的动力。
一个星期的单片机课程设计很快就结束了,在这一周当中,虽然开始有点困难,但在不断失败改正后,我终于成功完成实训作业。在本次课程设计中,我们通过动手实践操作,进一步学习和掌握了单片机原理的有关知识,特别是程序的编程方面,加深了对单片机原理及应用技术的认识,进一步巩固了对单片机知识的理解,掌握简单单片机应用系统的设计、制作、调试的方法。在设计时根据课题要求,复习相关的知识,查询相关的资料。根据实验条件,找到适合的方案,找到需要的元器件及工具,进行实验。这次的单片机课程设计重点是通过实践操作和理论相结合,提高动手实践能力,提高科学的思维能力,更在一周的时间了解了更多的有关单片机的知识,使知识更加丰富,使自己更加充实,。
展开阅读全文