电子钟设计报告.docx
《电子钟设计报告.docx》由会员分享,可在线阅读,更多相关《电子钟设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
电子钟设计报告
电子综合项目设计
题目电子钟
专业通信工程
班级通信2010级
(1)班
学生姓名刘敬亚、刘梦曦
指导老师高瑜翔
2013年1月19日
目录
一、成员分工表·······································3
二、功能描述及设计原理·······························4
三、硬件原理图·······································6
四、软件流程图·······································7
五、调试及测试·······································7
六、总结与心得·······································7
附录一:
器件清单······································8
附录二:
程序设计及代码································8
一、成员分工表
姓名
班级
学号
组号
分工
1
刘敬亚
通信101
2010101012
6组
资料查找,设计硬件电路,
画PCB板,代码设计
2
刘梦曦
2010101026
资料查找
板子制作、焊接
二、功能描述及设计原理
1、设计思路
本次电路设计采用AltiumDesignerRelease10设计。
图1:
电子钟电路组成框图
2、各区域设计
(1)复位电路
首先设计的为复位电路:
采用手动复位电路如图2所示
该电路设计原理:
需要人为的在复位输入端RSt上加入高电平,所以在RST与VCC间接一个按钮。
图2:
复位电路设计图
(2)时钟电路
采用内部时钟方式。
在引脚x1与x2两端接入晶振。
晶振大小为12MHZ。
图3:
时钟电路设计图
(3)按键电路
因为要求有定时、调整时间的功能。
故目前采用4个按键的设计。
按键1进行时间的调整。
按键2换分钟位。
按键3换小时位。
按键4为确定定时等功能。
图4:
按键电路设计图
(4)蜂鸣器
因为设计的单片机为AT89C52,所以直接接在p3口并且接一个4.7k的上拉电阻。
图5:
蜂鸣器电路设计
(5)数码管显示
采用四位共阴数码管,接p0口需要接上拉电阻。
上拉电阻改为排阻。
图6:
数码管电路设计
(6)开关以及指示灯
图7:
开关、指示灯电路设计
三、硬件原理图
本组的电子钟设计图如下。
(部分连线,通过放置网络标号表示连接)
图8:
protel的原理图
图9:
Pcb设计图
四、软件流程图
图10:
软件流程图
五、调试及测试
1、硬件
调试过程中出现的问题:
喇叭音量过小,几乎听不到。
解决方案:
加上了一个三极管和一个上拉电阻。
2、软件
调试过程中出现的问题:
时钟定时没有写对。
测试报告:
能够正确的定时和时间的调整。
六、总结与心得
通过对这个项目的设计,我们学到了很多知识,比如Protel的基本实用方法、制板的基本过程、单片机等相关知识。
在学习和项目进行当中,虽然参考了很多资料,但是还是遇到了很多问题,比如Protel软件在WIN7系统中的兼容问题,封装的设定以及网络表的导入。
在PCB板的制作过程中,由于没有经验,对元器件的布局没有整体的统筹规划。
在原理的设计中,对一些单片机、感应器等知识不是很了解,但都通过参考资料和请教他人得以解决。
下一步我们会尽快将实物做出来并加以调试。
在今后的学习中,我们要进一步加强相关知识的学习,加深工程的概念,努力提高自己的实际操作和动手能力。
附录一:
器件清单
序号
名称
型号
数量
1
发光二极管
1
2
自锁开关
1
3
单片机
AT89C52
1
4
插座
1
5
四位共阴数码管
1
6
晶振
12MHz
1
7
排阻
1
8
电阻
1kΩ
3
9
电阻
4.7kΩ
1
10
瓷片电容
30pf
2
11
电解电容
22pf
1
12
按键
5
13
蜂鸣器
1
14
三极管
9013
1
15
导线若干
16
插针若干
附录二:
程序设计及代码
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitkey1=P2^0;
sbitkey2=P2^1;
sbitkey3=P2^2;定义按键接口
sbitkey4=P2^3;
sbitbeep=P2^4;
sbitspeaker=P3^5;
sbitcom1=P1^4;
sbitcom2=P1^5;
sbitcom3=P1^6;4位led的选位线
sbitcom4=P1^7;
ucharflag=1;
uchartemp=0;
ucharnum1=0,num4=0;
ucharspeaker_num;
ucharclk_hour=20,clk_min=13,clk_miao=14;
ucharalm_hour=13,alm_min=15;
ucharnian=2013,yuan=1,ri_ri=4;
ucharcount=0;
ucharT0_int_nums;
ucharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x80};
intflag1=0;
//延时程序
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--);
for(j=500;j>0;j--);
}
//显示程序
voiddisplay()
{
if(num1==0&&num4==0)
{
if(count<50)
{
com4=0;com3=1;com2=1;com1=1;
P0=table[clk_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[clk_hour%10];
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[clk_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[clk_min%10];
delayms
(1);
}
else
{
com4=0;com3=1;com2=1;com1=1;
P0=table[clk_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[clk_hour%10]+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[clk_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[clk_min%10];
delayms
(1);
}
}
elseif(num1!
=0)
{
if(num1==1)
{if(count<50)
{com4=0;com3=1;com2=1;com1=1;
P0=table[clk_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[clk_hour%10];
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[clk_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[clk_min%10];
delayms
(1);
}
else
{com4=0;com3=1;com2=1;com1=1;
P0=table[clk_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[clk_hour%10]+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=0x00;
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=0x00;
delayms
(1);
}
}
if(num1==2)
{
if(count<50)
{com4=0;com3=1;com2=1;com1=1;
P0=table[clk_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[clk_hour%10];
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[clk_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[clk_min%10];
delayms
(1);}
else
{com4=0;com3=1;com2=1;com1=1;
P0=0x00;
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=0x00+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[clk_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[clk_min%10];
delayms
(1);
}
}
if(num1==3)
{
if(count<50)
{com4=0;com3=1;com2=1;com1=1;
P0=table[alm_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[alm_hour%10];
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[alm_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[alm_min%10];
delayms
(1);
}
else
{
com4=0;com3=1;com2=1;com1=1;
P0=table[alm_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[alm_hour%10]+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=0x00;
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=0x00;
delayms
(1);
}
}
if(num1==4)
{
if(count<50)
{com4=0;com3=1;com2=1;com1=1;
P0=table[alm_hour/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[alm_hour%10];
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[alm_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[alm_min%10];
delayms
(1);
}
else
{
com4=0;com3=1;com2=1;com1=1;
P0=0x00;
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=0x00+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[alm_min/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[alm_min%10];
delayms
(1);
}
}
if(num1==5)
{
if(count<50)
{com4=0;com3=1;com2=1;com1=1;
P0=table[yuan/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[yuan%10];
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[ri_ri/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[ri_ri%10];
delayms
(1);
}
else
{com4=0;com3=1;com2=1;com1=1;
P0=table[yuan/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[yuan%10]+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=0x00;
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=0x00;
delayms
(1);
}
}
if(num1==6)
{
if(count<50)
{com4=0;com3=1;com2=1;com1=1;
P0=table[yuan/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[yuan%10];
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[ri_ri/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[ri_ri%10];
delayms
(1);
}
else
{com4=0;com3=1;com2=1;com1=1;
P0=0x00;
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=0x00+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[ri_ri/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[ri_ri%10];
delayms
(1);
}
}
}
else
{
if(count<50)
{
com4=0;com3=1;com2=1;com1=1;
P0=table[yuan/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[yuan%10]+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[ri_ri/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[ri_ri%10];
delayms
(1);
}
else
{com4=0;com3=1;com2=1;com1=1;
P0=table[yuan/10];
delayms
(1);
com4=1;com3=0;com2=1;com1=1;
P0=table[yuan%10]+0x80;
delayms
(1);
com4=1;com3=1;com2=0;com1=1;
P0=table[ri_ri/10];
delayms
(1);
com4=1;com3=1;com2=1;com1=0;
P0=table[ri_ri%10];
delayms
(1);
}
}
}
//定义分加按键
voidkey_min_jia()
{
if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!
key2)
display();
clk_min++;
if(clk_min==60)
clk_min=0;
}
}
}
//定义分减按键
voidkey_min_jian()
{if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!
key3)
display();
clk_min--;
if(clk_min==-1)
clk_min=59;
}
}
}
//定义时加按键
voidkey_hour_jia()
{if(key2==0)
{delayms
(2);
if(key2==0)
{
while(!
key2)
display();
clk_hour++;
if(clk_hour==24)
clk_hour=0;
}
}
}
//定义时减按键
voidkey_hour_jian()
{if(key3==0)
{delayms
(2);
if(key3==0)
{
while(!
key3)
display();
clk_hour--;
if(clk_hour==-1)
clk_hour=23;
}
}
}
//定义闹铃分加按键
voidalm_min_jia()
{if(key2==0)
{delayms(5);
if(key2==0)
{
while(!
key2)
display();
alm_min++;
if(alm_min==60)
alm_min=0;}
}
}
//定义闹铃分减按键
voidalm_min_jian()
{if(key3==0)
{delayms(5);
if(key3==0)
{
while(!
key3)
display();
alm_min--;
if(alm_min==-1)
alm_min=59;}
}
}
//定义闹铃时加按键
voidalm_hour_jia()
{if(key2==0)
{delayms(5);
if(key2==0)
{
while(!
key2)
display();
alm_hour++;
if(alm_hour==24)
alm_hour=0;}
}
}
//定义闹铃时减按键
voidalm_hour_jian()
{if(key3==0)
{delayms(5);
if(key3==0)
{
while(!
key3)
display();
alm_hour--;
if(alm_hour==-1)
alm_hour=23;}
}
}
//定义月加按键
voidyuan_jia()
{if(key2==0)
{delayms(5);
if(key2==0)
{
while(!
key2)
display();
yuan++;
if(yuan==13)
yuan=1;
}
}
}
//定义月减按键
voidyuan_jian()
{if(key3==0)
{delayms(5);
if(key3==0)
{
while(!
key3)
display();
yuan--;
if(alm_hour==0)
alm_hour=12;}
}
}
//定义日加按键
voidri_jia()
{if(key2==0)
{delayms(5);
if(key2==0)
{
while(!
key2)
display();
ri_ri++;
if(ri_ri==29)
{
if(((nian-1996)%4!
=0)&&(yuan==2))//考虑是否为2月,是否为平年
{
ri_ri=1;
}
}
if(ri_ri==30)
{
if(((nian-1996)%4==0)&&(yuan==2))
{
ri_ri=1;
}
}
if(ri_ri==31)
{
if(yuan==4||yuan==6||yuan==9||yuan==11)//有30天的月
{
ri_ri=1;
}
}
if(ri_ri==32)
{
ri_ri=1;
}
}
}
}
//定义日减按键
voidri_jian()
{if(key3==0)
{delayms(5);
if(key3==0)
{
while(!
key3)
display();
ri_ri--;
if(ri_ri==0)
{
if(yuan==1||yuan==3||yuan==5||yuan==7||yuan==8||yuan==10||yuan==12)//有31天的月
{
ri_ri=31;
}
if(yuan==4||yuan==6||yuan==9||yuan==11)//有30天的月
{
ri_ri=30;
}
else
{ri_ri=28;}
}
}
}
}
//定义按键功能
voidkey_proc()
{
beep=0;
if(key1==0)
{
delayms
(1);
if(key1==0)
{while(!
key1);