单片机数字电子钟Word格式.docx
- 文档编号:238927
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:19
- 大小:1.43MB
单片机数字电子钟Word格式.docx
《单片机数字电子钟Word格式.docx》由会员分享,可在线阅读,更多相关《单片机数字电子钟Word格式.docx(19页珍藏版)》请在冰点文库上搜索。
(6)下载口电路下载模块:
ISP下载功能,是通过单片机的SPI口实现的。
89S系列的单片机都带ISP下载功能
各种功能电路相互结合组成实现设计功能要求的数字钟电路,配合根据电路编写的程序以实现设计要求的全部功能。
2.3原理图及PCB图
使用protel绘制全部电路的原理图和PCB图,网络标号的使用可以让图看起来简洁清楚,方便绘图人的操作。
详图请见附录。
2.4制板
根据原理图在万用版上使用导线将各种器件连接成电路板。
2.5系统调试
使用万用表对制作好的电路板进行电气检查,确保没个引脚的连接都符合原理图的设计,没有出现虚焊、漏焊或者短路的情况。
通电状态下检查各器件的工作电压是否正常。
3软件设计
3.1流程图
通过单片机来实现数字钟的功能。
流程图2
图2数字钟总原理图
定时器中断时,先检测50ms脉冲是否计数20次,计数到20次,秒就加1;
如果没计满60,就返回显示时间,如果秒计满60秒,就清零秒,给分加1;
检测分钟,如果没计满60,继续计时,返回显示时间,如果满60,就清零分钟,给小时加1;
检测小时,如果没计满24,就继续计时,返回显示时间,如果计满24,就清零,给秒加1,显示时间。
时+1=24?
3.2程序清单
根据原理图,写出相应的程序,程序清单详见附录A
4设计结果与调试
4.1软件调试
软件为老师所提供提供,其原理在上面以作说明。
软件部分是先参考书上的例子,然后自己根据硬件电路写程序,本次编程采用的是C语言。
刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。
4.2硬件调试
把程序烧入单片机,上电后,按下开始\停止按键,时钟便从000000开始每秒加1计时,再次按下开始\停止按键,时间暂停,进入调时状态。
按秒按键,秒个位闪烁并加1;
按下调分按键,分个为闪烁并加1;
按下调时按键,分个为闪烁并加1。
当再次按下开始\停止按键时,时钟又运行。
当按下复位键时,时间显示消失。
经以上调试所要求的功能均以实现。
4.3误差分析
在调试过程中,最初几次数码管显示有一定的问题,但最后发现是位控线和段控线的焊接存在问题。
在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。
而你开启定时器和开启LED灯顺序上是有先后的,这个过程需时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。
第三,设计用到12MHz的晶振,计算是满20次为一秒钟,但实际会慢很多。
4.4教学建议
最开始学习单片机时,是对单片机不感兴趣的,上课也是一直只是抱着完成任务的心态,直到后来,上了第一次单片机实验课,王老师通过各种问题,让我们巩固上课所学知识,通过实际解决问题,才慢慢发现单片机是一门很有趣的课程,并且每当你解决一个问题时,你会充满成就感。
希望王老师再接再厉,对我们之后的学弟学妹,也以同样的心态对待。
相信,他们也会像我们一样,痛并快乐着!
结束语
这个学期即将结束,从刚开学,老师就说我们的课程设计从第一节课开始。
在这个学期里,我学到了很多,对单片机有了更深刻的认识,也对自己的不足有了清醒的认识。
虽然我在上课时,觉得理论很容易,但是当具体写程序时,发现还是有各种各样的问题出现。
开学时画PCB图,一点都不熟练,出了不少错误。
在焊接过程中,也出现了不少虚焊的情况。
通过这次的课程设计,使我注意到了以上几点,应在以后的学习中加以注意。
通过这次机会不但练习了编程,而且还对AT89S52单片机又加深了一些认识,练习了定时器,中断等。
课程设计很快就这样过去了。
我们每个人都学到了很多东西,同时也感觉到了自己的不足,它将对我们以后参加工作有很大的帮助,有利于我们以后走上工作岗位。
致谢
在整个课程射界的过程中,同学给予的帮助很重要,他们是我成功的关键,尤其在焊接时,一个人很容易疏忽大意,而我们一起时,轻松愉快也不容易出问题,再就是遇到困难时,首先自己会仔细考虑,实在想不出来,我们会在一起思考找问题,每次问题的解决都会充满成就感。
在设计过程中,老师给予了我们很多帮助,其实在每次单片机实验的时候,老师就是通过各种各样的问题,来让我们更加好的学习单片机。
没有单片机实验带给我们扎实的基础,这次课程设计也不会这么顺利,取得成功。
非常感谢老师的帮助!
参考文献
1、马忠梅,单片机的C语言Windows环境编程宝典[M],北京:
北京航空航填天大学出版社,2003.6;
1,MaZhongmei,microcontrollerClanguageWindowsenvironmentprogrammingbook[M],Beijing:
BeijingUniversityofAeronauticsaviationdaysPress,2003.6;
2、李光飞,单片机C程序设计指导[M],北京:
北京航空航天大学出版社,2003.01;
2,LiGuangfei,microcontrollerCprogramdesigntheguidance[M],Beijing:
BeijingUniversityofAeronauticsandAstronauticsPress,2003.01;
3、李光飞,单片机课程设计实例指导[M],北京:
北京航空航天大学出版社,2004.9。
3,LiGuangfei,SCMcurriculumdesignexamplestoguide[M],Beijing:
BeijingUniversityofAeronauticsandAstronauticsPress,2004.9.
附录
附录A:
程序清单:
#include<
reg52.h>
intrins.h>
/*共阳数码管字型码数组*/
/*0,1,2,3,4,5,6,7,8,9,p.,灭,-*/
charcodedis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xbf};
/*显示缓冲数组(存放显示信息的字型码的序号)*/
charfind_code[8];
chartime;
sbitp12=P1^2;
/********************************************************/
//函数名:
voidDelayX1ms(uintcount)
//功能:
延时时间为1ms
//调用函数:
//输入参数:
count,1ms计数
//输出参数:
//说明:
总共延时时间为1ms乘以count,crystal=12Mhz
#defineucharunsignedchar
#defineuintunsignedint
ucharsec=0,min=0,hour=0;
voidDelayX1ms(uintcount)
{
uintj;
while(count--!
=0)
for(j=0;
j<
80;
j++);
}
/*显示函数*/
voiddisp()
chari,j=0xfe;
chark;
for(i=0;
i<
8;
i++)
P2=j;
k=find_code[i];
P0=dis_code[k];
DelayX1ms
(1);
j=_crol_(j,1);
}
/************************************************************************
*函数原型:
keychuli();
*功能:
处理与键盘相连的P1口的内容,作为键值。
************************************************************************/
ucharkeychuli()
uchark;
k=P1;
//P1口内容送K
k=~k;
//取反
return(k);
//返回键值
key();
键盘扫描函数,函数返回值即键值。
ucharkey()
ucharkeyzhi,keyzhii;
//键盘按键键值临时存放
keyzhi=keychuli();
//调P1口处理函数
if(keyzhi!
=0)//有键动作延时去抖动,否则函数返回
disp();
//再次调P1口处理函数
=0)//真正有键按下,取键值并暂存
keyzhii=keyzhi;
while(keyzhi!
=0)//判按键是否释放,没有释放延时去抖动等待释放
disp();
}
keyzhi=keyzhii;
//按键释放后恢复按键键值
return(keyzhi);
//返回按键键值
voidINTT0()interrupt1
{
staticucharclick=0;
//定时器0定时中断次数
TH0=0x3c;
TL0=0xb0;
//设置初始值50ms为循环20次为1ms,12MHz
++click;
if(click>
=20)//是否到1秒,到1秒,秒加1,否则函数返回
click=0;
if(++sec>
=60)//加到60秒,秒清0
sec=0;
if(++min>
=60)//分加1,是否到60分,否则函数返回
{
min=0;
//加到60分,分清0
if(++hour>
=24)//时加1,是否到24小时,否则函数返回
{
hour=0;
//加到24小时,时清0
}
}
find_code[0]=sec%10;
find_code[1]=sec/10;
find_code[2]=12;
find_code[3]=min%10;
find_code[4]=min/10;
find_code[5]=12;
find_code[6]=hour%10;
find_code[7]=hour/10;
//LED显示缓冲区时间值更新
}
voidmain()
{
while
(1)
find_code[0]=11;
find_code[1]=11;
find_code[2]=11;
find_code[3]=11;
find_code[4]=11;
find_code[5]=11;
find_code[6]=11;
find_code[7]=10;
switch(key())
case0x01:
TMOD=0x01;
//定时器1,工作方式1
TH0=0x3c;
TL0=0xb0;
//50ms中断一次
EA=1;
ET0=1;
TR0=1;
while
(1)
{
find_code[0]=0;
find_code[1]=0;
find_code[3]=0;
find_code[4]=0;
find_code[6]=0;
find_code[7]=0;
disp();
while
(1)
{mm:
if(key()==0x01)//进入调整状态
{while
(1)
{
TR0=0;
disp();
switch(key())
{
case0x01:
{TR0=1;
gotomm;
break;
}//进入运行状态
case0x02:
//时调整
{hour++;
if(hour==24)
hour=0;
break;
}
case0x04:
//分调整
{min++;
if(min==60)
min=0;
case0x08:
//秒调整
{sec++;
if(sec==60)
sec=0;
break;
default:
break;
find_code[0]=sec%10;
find_code[7]=hour/10;
}
}
default:
}
附录B:
图B1电路原理图
附录C:
图C1布局图
图C2底层
图C3PCB顶层
图C4实物仿真图
附录D:
元器件清单:
名称
数量
参数
单片机
1个
AT89S52
共阳数码管
2个
共阳极4位1体
底座
3个
晶振
12MHz
发光二极管
9个
单排插
40PIN
蜂鸣器
按键
排阻
10K
下载口座子
10芯
6脚按键开关
USB电源线加接口
电阻
24个
470Ω
1K
200Ω
电解电容
22μf
瓷片电容
33pf
短路帽
PCB板
1块
电源插座
杜邦线
铜柱(带螺母)
4个
三极管
PNP9012
表D1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 电子钟