2.2.1系统框图:如图一所示。
晶振
图一:系统框图
寄存器 单片机数码管显示 按键扫描
2
2.2.3控制电路框图:如图二所示。
K1按一下
K2按一下 停止计时 K3按一下 K4按一下 调秒 调分 调时
K1再按一下
开始计时 图二:控制电路框图
控制电路中的按键K1用来启动/暂停计时,K2用来调秒,K3用来调分,K4用来调时。
3
3 设计原理分析
3.1震荡电路的设计
震荡电路它是由1个12MHZ的晶振并联2个30pf的电容构成。(晶振效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路)单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。其电路图如图三所示。
图三:震荡电路图
3.2复位电路的设计
单片机的复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。复位电路图如图四所示。
4
图四:复位电路图
3.3控制电路的设计
如图五所示,K1、K2、K3、K4接在单片机P1^0~P1^3上。
图五:控制电路
3.4显示电路的设计
显示电路如图六所示,数码管的段选和位选分别接2个74HC573锁存器。
5
控制位选的锁存器接单片机的P3^6口,控制段选的锁存器接单片机的P3^7口。同时在P0口接1K的上拉电阻,供5V电源,增大电流,以便能点亮数码管看到数字。
图六:显示电路图
3.5整体电路的设计
由附录一可看到整体点电路设计,附录二是其对应生成的PCB图。 3.6系统软件程序设计
在本设计中采用的C语言编程,主要包含有对时分秒的进位设计,对独立按键的扫描设计,对数码管动态扫描的设计。
程序如下:
#include
#define uchar unsigned char #define uint unsigned int
6
sbit dula=P3^7;//定义段选 sbit wela=P3^6;//定义位选
sbit k1=P1^0; sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3;
unsigned char j,k,a1,a0,b1,b0,c1,c0,s,f,m;//定义字符 uchar ok=1; uint pp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管编码表
void delay(uchar i)//这个延时是用来间隔数码管 {
for(j=i;j>0;j--)
for(k=125;k>0;k--); }
void display(uchar a0,uchar a1,uchar b0,uchar b1,uchar c0,uchar c1)//显示函数 {
dula=0;
P0=table[a1]; dula=1; dula=0;
wela=0; P2=0xfe; wela=1; wela=0; delay(5);
P0=table[a0]|0x80;//0x80点亮小数点 dula=1; dula=0;
7
P2=0xfd; wela=1; wela=0; delay(5);
P0=table[b1]; dula=1; dula=0;
P2=0xfb; wela=1; wela=0; delay(5);
P0=table[b0]|0x80; dula=1; dula=0;
P2=0xf7; wela=1; wela=0; delay(5);
P0=table[c1]; dula=1; dula=0;
P2=0xef; wela=1; wela=0; delay(5);
P0=table[c0]; dula=1; dula=0;
P2=0xdf;
8
wela=1; wela=0; delay(5); }
void keyscan()//键盘子程序 { if(k1==0) { delay(10);//键盘消抖 if(k1==0) { while(!k1); ok=~ok; } } if(k2==0) { delay(10); if(k2==0) { m++; if(m==60) m=0; while(!k2); } } if(k3==0) { delay(10); if(k3==0) { f++; if(f==60)
9
f=0; while(!k3); } } if(k4==0) { delay(10); if(k4==0) { s++; if(s==60) s=0; while(!k4); } } }
void main()//主函数 { TMOD=0x01;//装入初值,这里用的是50ms TH0=0x3c; TL0=0xb0; EA=1;//打开全局中断 ET0=1; while(1) { keyscan();//扫描键盘 if(ok==1) { TR0=1;//打开定时器 if(pp==20) { pp=0; m++; if(m==60)
10
{ m=0; f++; if(f==60) { f=0; s++; if(s==24) //24h一个循环 { s=0; } } } } a0=s; a1=s/10; b0=f; b1=f/10; c0=m; c1=m/10; display(a1,a0,b1,b0,c1,c0); } else { TR0=0;//暂停计时 keyscan(); } }
a0=s; a1=s/10; b0=f; b1=f/10; c0=m; c1=m/10;
display(a1,a0,b1,b0,c1,c0);
11
}
void time0() interrupt 1//中断函数 { TH0=0x3c; TL0=0xb0; pp++; }
4 结束语
在本次设计的过程中,我感触最深的是查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。在这次课程设计中,我们也运用到了以前所学的专业课知识。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
参考文献
[1] 吴国经. 单片机应用技术[M].北京:高等教育出版社,2003. [2] 于海生.微型计算机控制技术[M] .清华大学出版社.1999.6 [4] 黄正谨.综合电子设计与实践[M] .东南大学出版社.2002.3 [5] 杨欣等.电子设计从零开始[M] .清华大学出版社.2005.10 [6] 丁元杰. 单片微机原理及应用[M]. 北京:机械工业出版社,2009.
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库新科电子时钟设计(2)在线全文阅读。
相关推荐: