数字钟设计 基于89S51单片机 实训总结.docx
- 文档编号:10170077
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:23
- 大小:379.90KB
数字钟设计 基于89S51单片机 实训总结.docx
《数字钟设计 基于89S51单片机 实训总结.docx》由会员分享,可在线阅读,更多相关《数字钟设计 基于89S51单片机 实训总结.docx(23页珍藏版)》请在冰豆网上搜索。
数字钟设计基于89S51单片机实训总结
北方民族大学
电气信息工程学院
实训报告
课程名称电子作品制作与开发项目实践选修课系列Ⅰ
题目数字时钟的设计与制作
院(部、中心)电气信息工程学院
学生姓名赵金鹏
专业测控技术与仪器 学号20080309
指导教师签名毛建东周春艳
报告提交时间 2010年12月25日
同组人员伏露杨窕何勇杨强
北方民族大学教务处制
评语:
成绩:
⑴答辩:
(%)
⑵报告:
(%)
⑶平时:
(%)
总成绩:
指导教师:
年月日
目录
目录I
目的1
一、要求1
二、任务1
第一部分、设计原理2
一、数字时钟结构2
①、数字钟的电路结构组成2
二.单元电路设计2
①、译码驱动及显示单元2
②、校时控制电路3
③、5V稳压直流电源电路4
④、晶振电路和复位电路4
第二部分、硬件电路及PCB板图6
第三部分、软件流程图8
第四部分、仿真及实物图11
第五部分、程序13
第六部分、元件清单19
心得体会20
参考文献22
目的
一、要求:
①、掌握单片机控制数码管现实系统的开发设计;
②、在之前掌握的电路、模电、数电等知识,以及单片机知识的基础上,进一步掌握电子产品设计及开发调试的全过程;
③、掌握PCB板的设计、印刷,元器件的安装、电路调试、程序调试、程序下载等实践实训部分;
④、真正培养理论联系实际、分析解决一般性技术问题以及实际动手的能力。
二、任务:
①、设计并制作一个数字钟;
②、接4个按键,分别为“设定”、“加1”、“减1”、“确定”键,用于调整时间;
③、外接8个LED数码管,分别显示时、分、秒,以24小时制显示时间;
④、另外需要使用AC220V转AC(单)12V变压器、二极管IN4004,稳压块7905、7805等自制正负5V电源一套。
第一部分、设计原理
一、数字时钟结构
该实训作品是利用AT89S51单片机结合数码管设计出的一个可调时的数字
时钟,其主要利用单片机的输入/输出功能,定时/计数功能和中断功能。
单片机时钟结构分硬件和软件两部分。
硬件主要由单片机,LED数码管显示器和按键等组成。
①、数字钟的电路结构组成:
1)晶振电路和复位电路。
2)驱动电路及显示单元。
3)校时控制电路。
4)5V稳压直流电源电路。
二.单元电路设计:
①、译码驱动及显示单元:
图1LED数码管显示
图2输送段码电路
当74LS373的LE=1,OE(非)=0时其输出口随输入口变化,即输出段码。
再由P0选中相应位显示输出低电平,使三极管9015导通驱动共阳数码管。
②、校时控制电路:
图3校时控制电路
程序设计时给P2口高电平,当有对应按键按下时由于另一端接地,所以对应口变成低电平,单片机根据各按键信号运行相应程序。
K1为设定键,按下后进入调时状态,计时也瞬时停止。
按一次进入调整小时的状态,在调时状态再按K1进入分调整状态,在分调整状态再按一次进入秒调整状态!
进入相应状态后,利用K2,K3键进行调整,K2为加1,K3为减1。
K4键为确定键,当处在调时状态时,K4按下时跳出调时状态,进入计时状态。
③、5V稳压直流电源电路:
图4电源电路
电源主要使用的是AC220V转AC12V变压器,二极管IN4004,稳压块7805等。
220V交流电由变压器转为12V交流电,电路板外接12V交流电,经过IN4004整流及电容滤波,在通过稳压块7805得到5V左右的直流电,该电路接了电源指示灯D1,通电时变亮。
④、晶振电路和复位电路:
图5晶振电路和复位电路
第二部分、硬件电路及PCB板图
图6Protel整体原理图
PCB板图
图7PCB板图
第三部分、软件流程图
图8程序流程图
图9程序流程图
图10程序流程图
第四部分、仿真及实物图
软件仿真
环境:
Protues软件
学习使用Protues软件,学会从该软件上找到所需的芯片及元器件,由秒向时部分依次进行设计并逐步仿真,从而发现问题能及时解决。
按原理电路图在软件上接好电路,进行仿真,从而发现电路的问题并进行解决。
图11仿真结果
实物图
图12实物图
第五部分、程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbit_led=P2^7;
sbitkey1=P2^0;//调时按键
sbitkey2=P2^1;//加按键
sbitkey3=P2^2;//减按键
sbitkey4=P2^3;//确定建
ucharnum=0,temp=0,count=0;
ucharaa;
ucharhour,min,sec;
ucharcodetable[]={0x60,0xf3,0xa4,0xa1,0x33,0x29,0x28,0xe3,0x20,0x21};
//定义共阳极LED显示段码0、1、2、3、4、5、6、7、8、9
voiddelay(uintz);//延时子函数声明
voiddisplay(uchara,ucharb,ucharc,uchard,uchare,ucharf,ucharaa);
//显示子函数声明
voidread_key();//读按键函数声明
voidled();
voidtime_change();//时间调整子函数声明
/******************主函数*******************/
voidmain()
{
P2=0xff;
hour=12;
min=0;
sec=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
aa=0xff;
while
(1)
{
time_change();
display(table[hour/10],table[hour%10],table[min/10],
table[min%10],table[sec/10],table[sec%10],0xff);
}
}
/******************显示函数*******************/
voiddisplay(uchara,ucharb,ucharc,uchard,uchare,ucharf,ucharaa)
{if
(1)
{
P0=0xfb&aa;P1=0xbf;delay
(2);
P0=0xdf&aa;P1=0xbf;delay
(2);}
if(num==1)
{
P0=0xfe&aa;P1=a;delay
(2);}
else
{
P0=0xfe;P1=a;delay
(2);}//hour
if(num==1)
{
P0=0xfd&aa;P1=b;delay
(2);}
else
{P0=0xfd;P1=b;delay
(2);}//hour
if(num==2)
{
P0=0xf7&aa;P1=c;delay
(2);
}
else
{
P0=0xf7;P1=c;delay
(2);}//min
if(num==2)
{
P0=0xef&aa;P1=d;delay
(2);
}
else
{P0=0xef;P1=d;delay
(2);}//min
if(num==3)
{
P0=0xbf&aa;P1=e;delay
(2);}
else
{P0=0xbf;P1=e;delay
(2);}//sec
if(num==3)
{
P0=0x7f&aa;P1=e;delay
(2);}
else
{P0=0x7f&aa;P1=f;delay
(2);}//sec
}
/**************定时器0中断函数***************/
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
temp++;
}
/**************定时器1中断函数***************/
voidtimer1()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++;
if(count>=20)
count=0;
}
/******************延时子函数*******************/
voiddelay(uintz)
{
uintj,k;
for(j=z;j>0;j--)
for(k=120;k>0;k--);
}
/******************读按键函数*******************/
voidread_key()
{
if(key1==0)
{
_led=0;
delay(100);
if(key1==0)
{
delay(100);
_led=1;
num++;
if(num>3){num=0;}
while
(1)
{
if(key1==0)
{
_led=0;
delay(10);
if(key1==0)
{
num++;
if(num>3){num=0;break;}
}
while(!
key1);
delay(10);
while(!
key1);
_led=1;
}
if(key2==0)
{
_led=0;
delay(80);
if(key2==0)
{
if(num==1){hour++;if(hour==24)hour=0;}
if(num==2){min++;if(min==60)min=0;}
if(num==3){sec++;if(sec==60)sec=0;}
}
while(!
key1);
delay(10);
while(!
key1);
_led=1;
}
if(key3==0)
{
_led=0;
delay(80);
if(key3==0)
{
if(num==1){hour--;if(hour==0)hour=23;}
if(num==2){min--;if(min==0)min=59;}
if(num==3){sec--;if(sec==0)sec=59;}
}
while(!
key1);
delay(10);
while(!
key1);
_led=1;
}
if(key4==0)
{
_led=0;
delay(80);
if(key4==0)
{
num=0;break;
}
}
if(count<=15)
display(table[hour/10],table[hour%10],table[min/10],
table[min%10],table[sec/10],table[sec%10],0xff);
if(count>15)
display(table[hour/10],table[hour%10],table[min/10],
table[min%10],table[sec/10],table[sec%10],0x00);
}
}
while(!
key1);
delay(10);
while(!
key1);
_led=1;
}
}
/******************时间调整函数*******************/
voidtime_change()
{
read_key();
if(temp>=20)
{
temp=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)
{
hour=0;
}
}
}
}
}
第六部分、元件清单
序号
元器件名称
元件数目(个)
1
40脚双列直插AT89S51单片机
1
2
40脚双列直插芯片底座
1
3
20脚74HC373锁存器
1
4
20脚双列直插芯片底座
1
5
稳压块7805
1
6
极性电容50V220uF
2
7
极性电容50V22uF
1
8
电容16V1uF
2
9
瓷片电容30pF
2
10
按键
5
11
12MHz晶振
1
12
0.56寸共阳极7段数码管
8
13
10KΩ1/4W金属膜电阻1%色环铜脚电阻
19
14
9015三极管
8
15
IN4004二极管
4
16
发光二极管
1
17
3脚接插件(含簧片),脚距:
2.54
1
18
AC220V-AC12V变压器
1
19
开关
1
20
电线1米
1
21
插头
1
心得体会
这次实验其实电路原理很清楚,可是实际动手起来遇到问题却比想象中多,任何一点小错误都会让努力白费,所以细心,耐心和和小组成员讨论是一定要的。
数字电路复杂,因此需要我们连接时要有好的布局和合理的布线规则,使电路板连线清晰美观,最重要的是检查时特别方便。
让我们知道了许多的东西,也让我们了解了许多在书本上所学不到的知识和技能,这为我们在以后的工作起了非常重要的作用.
通过这次实训也让我对数字钟的设计与制作,了解了设计电路的程序,也让我了解了关于数字钟的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。
但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。
而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。
所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。
这次实训设计并制作一个数字钟。
要求的是接4个按键,分别为“设定”、“加1”、“减1”、“确定”键,用于调整时间;外接8个LED数码管,分别显示时、分、秒,以24小时制显示时间。
另外还需要使用AC220V转AC(单)12V变压器、二极管IN4004,稳压块7905、7805等自制正负5V电源一套。
单片机使用40脚双列直插AT89S51实现,LED显示器使用74HC373串入并出芯片模拟串口实现。
这次课程的实训,使我在使学生掌握选修课程的基础上,一方面能综合应用这些课程的理论只是,更重要的一方面,是让我亲自动手,参与到工程实践训练中。
通过这样的实训,真正能培养我的理论联系实际和分析解决一般性工程技术问题的能力。
这次实训,使我在之前掌握的电路、模电、数电等知识,以及单片机知识的基础上,进一步掌握电子产品设计及开发调试的全过程,尤其包括掌握PCB板的设计、印刷,元器件的安装、电路调试、程序调试、程序下载等实践实训部分,真正的培养我理论联系实际、分析解决一般性技术问题以及实际动手的能力。
通过这次实训学习,使我掌握单片机控制数码管实现系统的开发设计,让我对各种电路都有了深入的了解,所以说,“坐而言不如立而行”,对于这些电路还是应该自己动手实际操作才会有深刻理解,团队整体的力量是无穷的,通过我们的共同研究才会把这次实训顺利的完成。
实训过程中遇到的问题及解决方法
1、七段显示器与七段译码器的测量
当一切准备就绪上电测量整流后是正5V电压后,却发现数码管没有显示正常的数字,检查后发现是数码管有引脚短路造成的,排除故障后发现正确显示数字了,所以确认每个每个接触处是否接触良好是非常重要的一件事。
2、时间计数电路的连接与测试
六进制、十进制都没有什么大的问题,只是芯片引脚的老问题,只要重新插过芯片就可以解决了。
但在六十进制时,按图接线后发现,显示器上的数字总是100进制的,而不是六十进制,检测后发现无论是线路的连通还是芯片的接触都没有问题。
最后,在重对连线时发现是线路接错引脚造成的,改过之后,显示就正常了。
参考文献
【1】夏路易,单片机技术—基础教程与实践,北京:
电子工业出版社,2008
【2】王守中,51单片机开发入门与典型事例,北京:
人民邮电出版社,2007
【3】李刚民曹巧媛曹琳琳陈忠平等,单片机原理与实用技术,北京:
高等教育出版社,2005
【4】杨镇江冯军,单片机原理与实践指导,北京:
中国电力出版社,2008
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字钟设计 基于89S51单片机 实训总结 数字 设计 基于 89 S51 单片机 总结