单片机 定时闹钟课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计目的
此次设计的目的是培养同学们系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力,以及一定的自学能力和独立分析问题、解决问题的能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案;通过完成所选题目的分析与设计,达到技术性能要求。
二、设计要求
1、能显示时时-分分-秒秒。
2、能够设定定时时间、修改定时时间。
3、定时时间到能发出报警声或者启动继电器,从而控制电器的启停。
三、设计的总体结构
3.1 电路的总体原理框图
n d
A
l l t h i n
g s
i n
t h
e i r
b e
i n g
a r
e g
o o
d f
o r
s o
图4.1 主电路
4.2、显示电路
显示电路即可以让我们看到时间的调整和定时时间的调整,显示调整
后的时间。
e a
n d
A
l l t h i n
g s
i n
t h
e i r
b e
i n g
a r
e g
o o
d f
o r
s o 图4.2显示电路
4.3、 内部时钟方式的电路
单片机内部有一个用于构成振荡器的高增益反向放大器,它的输入端为芯
片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器。时钟频率可以影响单片机的速度。单片机的各功
能部件的运行都以时钟控制信号为基准
图4.3 内部时钟方式的电路
4.4、按键及蜂鸣器电路
按键可以对时间进行调整,蜂鸣器可以在到达定时的时间时提醒我们。
e a
n d
A
l l t h i n
g s
i n
t h
e i r
b e
i n g
a r
e g
o o
d f
o r
s o 图4.5 按键及蜂鸣器电路
五、整体电路图
见附图。
六、设计总结
6.1、设计过程中遇到的问题及解决方法
在设计的过程中遇到问题是不可避免的,我遇到了很多问题,如下所示;1.做实物时无法驱动数码管显示,后来了解到可以加锁存器,如
74LS253,74LS573等等,还可以加三极管用来加大电流。当然如果换成液晶显
示屏的话就不需要考虑驱动不了的问题了。
2.烧程序时没发烧进去,需要改变最高和最低波特率,才能按照步骤把程序烧进去。
3.仿真时没问题的电路,在做好实物时发现无法运行。原因可能是程序出
现问题,或者在连实物时线路连接错误等等都有可能。这是很难的一部分,需要查找出原因。在做实物的过程中我进行的很多检查,有很多连接错误,最终
又重新焊接的。
4.复位电路在实物中可以运行,但是在仿真中不能正常运行。目前还未找
到原因。
6.2、设计体会
这次设计中遇到了很多问题,例如刚开始我在在仿真时程序出现了每次按
按钮时总是显示测量时需要关闭仿真的字样,试了很多方法都没有找到原因,最后才知道是因为按钮太近的缘故。很多类似的经历让我明白:
1.
在设计程序之前,务必要对所学单片机课程的内容有一个系统的了解,知
道单片机片内片外的内容及其功能。
2. 设计程序关键要有一个清晰的思路和一个完整的软件流程图。模块化的设计思想在程序设计中的作用是重大的,它可以为你提供一个比较清晰的思路,并且很容易找到头绪,不至于在编写一个程序时感觉到无从下手。
3. 在设计程序时,不能妄想一次就将整个程序设计好,"反复修改,不断改进"是程序设计的必经之路。程序刚开始编好时,一般情况下会存在很多错误,要不断地修改,不断的改进才能达到预期的目的,编写程序的时间并不是很长,主要是花很多时间去修改程序。
4. 要养成注释程序的好习惯,让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。刚开始我在编写程序时,很不习惯于写注释,感觉很麻烦,而且没用,但是在修改的过程中我就遇到了较大的麻烦,以至于不得不重新的作了注释,以增加程序的易读性,从而使修改过程变得容易一些。
总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写科研报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,一切的辛苦和艰难都是值得的。
6.3、对设计的建议
在设计前应该对所要实现的功能有一定的了解,定下有大概的流程图,把设计模块化,写程序时也应该一个模块一个模块的写,这样方便理解,也方便
以后的检查。在仿真和实物的过程中要了解所使用芯片的功能及引脚的排列方式,这样焊接时比较方便。
七、C语言程序
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]="00:00:00";
sbit lcden=P2^6 ;//位定义
sbit lcdrw=P2^5;
sbit lcdrs=P2^4;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit beep=P3^7;//定义蜂鸣器
uchar num,count,s1num;//显示的位数;响应中断数;按键次数;
uint i;
char shi,fen,miao,shi1,fen1,miao1;
void delay(uint z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)//控制指令
{
lcdrs=0; //低电平时选择指令寄存器
lcdrw=0;// 低电平时进行写操作
delay(5);
lcden=1; //E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令
P0=com;
delay(5);
lcden=0;
}
void write_data(uchar date)//数据指令
{
lcdrs=1;
lcden=1; //均为高时是读出数据的内容
delay(5);
P0=date;
delay(5);