基于51单片的电子时钟的课程设计.docx
- 文档编号:3848834
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:22
- 大小:384.37KB
基于51单片的电子时钟的课程设计.docx
《基于51单片的电子时钟的课程设计.docx》由会员分享,可在线阅读,更多相关《基于51单片的电子时钟的课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于51单片的电子时钟的课程设计
目录
第1章引言.........................................
第二章总体设计方案.................................
一:
设计要求........................................
二:
设计方案........................................
三:
设计原理........................................
第三章调试及结果分析...............................
一:
调试及结析结果分析..............................
二:
设计总结.........................................
附录
(一)............................................
第1章引言...........................................
本次课程设计为数字电子钟的设计。
以STC12C5A60S2为核心,配合LCD1602液晶显示器和4位独立按键为用户提供长期、连续、可靠、稳定的电子时钟。
该数字电子钟有时分秒显示和日期显示以及时间和日期调整的功能。
系统软件设计包括主程序、延时程序、LCD显示程序、时间运行程序、时间调整程序等程序的编程。
利用单片机内部的定时器来实现准确的时间显示。
第二章总体设计方案...................................
一:
设计要求..........................................
电子时钟的设计,利用51单片机作为主控芯片,结合时钟芯片DS1302或者单片机自身时钟制作一个电子时钟,要求能够将年月日时分秒信息,通过键盘控制分别显示在数码管或LED点阵模块上,并能够通过键盘进行时间的调整。
二:
设计方案..........................................
1、时钟方案
(1)、选用DS1302芯片
美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。
它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。
但是需要额外的硬件和电路,增加电子时钟成本。
(2)、选用单片机内部时钟
单片机内部包含两个定时器/计数器,可以利用定时器中断进行准确的计时,不需要额外的硬件和电路,节约成本。
2、显示方案
(1)、双四位数码管
数码管是一种由发光二极管组成的电子元件。
能够显示由笔画组成的数字及简单字母。
但是数码管能够显示的能容少,不能满足题目要求。
(2)、LCD1602液晶显示器
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
也可以通过编程显示简单的汉字,能够显示16x2共32个字符,完全符合题目要求。
3、按键方案
(1)、矩阵键盘
矩阵键盘通过对按键的矩阵排列可以组成3x3、4x4等组合形式,能够节约IO的使用,在IO资源紧张的情况下能够很好的解决IO口不足的问题,但编程比较复杂。
(2)、独立按键
独立按键直接将按键接入到IO上,电路简单,程序实现相对容易。
但需要大量的按键的情况下,IO利用较多,容易造成IO资源紧张。
方案确定:
基于现有的电路,时钟方案选用内部时钟;显示部分由于需要显示的内容较多,故选用LCD1602用来显示;按键部分由于只需要4个按键,故选择连线和控制相对容易的独立按键。
三:
设计原理..........................................
硬件部分
由设计方案的分析结果,本设计使用如下的硬件设计。
根据系统的硬件设计框图,利用AltiumDesigner10软件进行原理图及PCB图的设计。
设计的整体电路图如下:
整体电路图
该电路图包括单片机最小系统、CH340USB转串口、电源、LCD1602液晶显示、四位独立按键组成。
最小系统
STC12C5A60S2是低电压,高性能CMOS8位单片机,片内含60kbytes的可反复擦写的Flash只读程序存储器和1280bytes的随机存取数据存储器(RAM),器件采用高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大STC12C5A60S2单片机适合于许多较为复杂控制应用场合。
STC12C5A60S2单片机为40引脚双列直插芯片,有四个I/O口P0、P1、P2、P3,每一条I/O线都能独立地作输出或输入。
并且集成有PWM、A/D等模块,集成度更高。
STC12C5A60S2引脚图
STC12C5A60S2包含以下部分,其结构图如下图所示:
STC12C5A60S2单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振荡器和外部晶体振荡电路等模块。
STC12C5A60S2系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片上系统。
本设计利用了其中的I/O接口、定时/计数器等部分。
其中P0口负责与LCD1602进行数据通信;P2.0、P2.1、P2.2分别连接LCD1602的RS、RW、LCDEN接口,进行LCD1602的控制;P3.0、P3.1、P3.2、P3.3连接按键。
CH340USB转串口
CH340是一个USB总线的转接芯片,实现USB转串口、USB转IrDA红外或者USB转打印口。
在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。
CH340芯片正常工作时需要外部向XI引脚提供12MHz的时钟信号。
一般情况下,时钟信号由CH340内置的反相器通过晶体稳频振荡产生。
外围电路只需要在XI和XO引脚之间连接一个12MHz的晶体,并且分别为XI和XO引脚对地连接振荡电容。
在本设计中通过CH340使计算机与单片机之间进行通信,向单片机下载程序或者在线调试。
电源
此系统的电源设计采用了USB、3.5mm电源接口双供电的模式。
使用过程中使任意电源供电既可以使系统工作。
电源中还加入了F1快恢复保险丝、1N4007二极管防止电源反接,当电源反接时保险丝快速切断电源以保护整体系统不被破坏。
电源部分还有470uF的电解电容来滤波,以获得纯净的电源;5.1V稳压二极管,使电源的接入范围扩大到5~12V。
液晶LCD1602接口
1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VCC接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端,高电平
(1)时读取信息,负跳变时执行指令。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
四位独立按键
四位独立按键公共端接地,另一端分别接入P3.0、P3.1、P3.2、P3.3。
S1为设置键,按下后可以选定操作年、月、日、时、分中的某一项;S2为加一键,对设置项加一;S3为减一键,对设置项减一;S4为开始键,按下计时开始。
软件部分
此次设计利用了单片机中的定时器
控制寄存器定时器/计数器T0和T1有2个控制寄存器-TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。
其中,TCON寄存器中另有4位用于中断系统。
定时器/计数器方式寄存器TMOD
定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H,无位地址。
TMOD的格式如下图所示。
由图可见,TMOD的高4位用于T1,低4使用于T0,4种符号的含义如下:
GATE:
门控制位。
GATE和软件控制位TR、外部引脚信号INT的状态,共同控制定时器/计数器的打开或关闭。
C/T:
定时器/计数器选择位。
C/T=1,为计数器方式;C/T=0,为定时器方式。
M1M0:
工作方式选择位,定时器/计数器的4种工作方式由M1M0设定。
定时器/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。
复位时,TMOD所有位均为0。
定时器/计数器控制寄存器TCON
TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,十分便于进行位操作。
TCON的作用是控制定时器的启、停,标志定时器溢出和中断情况。
TCON的格式如下图所示。
其中,TFl,TRl,TF0和TR0位用于定时器/计数器;IEl,ITl,IE0和IT0位用于中断系统。
各位定义如下:
TF1:
定时器1溢出标志位。
当字时器1计满溢出时,由硬件使TF1置“1”,并且申请中断。
进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。
TR1:
定时器1运行控制位。
由软件清“0”关闭定时器1。
当GATE=1,且INT1为高电平时,TR1置“1”启动定时器1;当GATE=0,TR1置“1”启动定时器1。
TF0:
定时器0溢出标志。
其功能及操作情况同TF1。
TR0:
定时器0运行控制位。
其功能及操作情况同TR1。
IE1:
外部中断1请求标志。
IT1:
外部中断1触发方式选择位。
IE0:
外部中断0请求标志。
IT0:
外部中断0触发方式选择位。
TCON中低4位与中断有关。
由于TCON是可以位寻址的,因而如果只清溢出或启动定时器工作,可以用位操作命令。
定时器/计数器的初始化:
由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。
初始货的步骤一般如下:
1、确定工作方式(即对TMOD赋值);
2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);
3、根据需要开放定时器/计数器的中断(直接对IE位赋值);
4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚步加启动电平。
当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。
程序流程图
先对LCD1602液晶和TH0、TL0进行初始化,如果使用12M的晶振则50ms:
TH1=(65536-50000)/256;TL1=(65536-50000)%256;11.0592M晶振50ms:
TH1=(65536-(11.0592/12)*50000)/256;TL1=(65536-(11.0592/12)*50000)%256。
然后对按键进行判断,根据按键判断的结果对显示的时间进行调整。
调整结束后开始计时。
计时采用24小时制,由于是简单的计时,所以月份是31天每月,没有闰年算法等。
第三章调试及结果分析.................................
一:
调试及结析结果分析................................
根据需要的电路对单片机开发板进行焊接,焊接时应注意不要造成焊接不良影响最终功能的实现。
可以先利用其它废弃PCB进行练习,等焊接熟练了再对开发板焊接。
焊接完成后,先利用STC-ISP软件向单片机下载简单程序,检查焊接好坏。
单片机开发板焊接完成后,使用Keil软件编写需要的程序。
可根据题目要求及上面的硬件设计、软件设计进行程序的编写。
编写完成后,调试检查没有错误后导出HEX文件,烧写至单片机rom中,检查程序的硬件实现结果,直至程序符合要求。
二:
设计总结..........................................
本次的单片机课程设计我们收获了许多平常课堂上所得不到的东西。
起初由于我们对于基础知识掌握的不牢固,特别是对于单片机的设计的理解的不够,反映出模拟电路掌握的不好, 缺乏对于电子系统设计测试的概念。
但通过多天的实践和学习,我们渐渐克服了这些困难,顺利的完成了本次课程世纪。
通过本次课程设计我们学习到了将理论教学与实践相结合的重要性,使我们对于单片机的实际应用有了较深刻的认识; 使我们对单片机应用系统设计的各种方法有所了解;通过分工合作,培养我们之间的合作精神;让我们熟悉电子系统设计的全过程;提高我们对设计课题的分析能力、编程能力及解决实际问题的综合能力。
附录
(一)............................................
#include
#defineuintunsignedint
#defineucharunsignedchar
#definelcd1602P0
sbitrs=P2^2;
sbitrw=P2^1;
sbite=P2^0;
sbitBF=lcd1602^7;
sbitMode=P3^0;
sbitjia=P3^1;
sbitjian=P3^2;
sbitstart=P3^3;
bitbz=0;
uintn=2013;
ucharj,s,f,h,y=06,r=30;
uchardis[5];
ucharcodemoth[]={0,32,30,32,31,32,31,32,32,31,32,31,32};
ucharcodetime[][8]={
0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11,
0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00,
0x1d,0x17,0x15,0x1f,0x15,0x15,0x1d,0x03,
0x0e,0x0a,0x11,0x0e,0x0a,0x0a,0x0a,0x16
};
voidyear();
voidmoth1();
voidday();
voidshi();
voidfen();
voidxsz();
voiddelay(uinti)
{
while(i--);
}
bitbusy1602()
{
bitbusy=0;
lcd1602=0xff;
rs=0;
rw=1;
e=1;
e=1;
busy=BF;
e=0;
returnbusy;
}
voidxml(ucharml)
{
while(busy1602());
rs=0;
rw=0;
lcd1602=ml;
e=1;
e=0;
}
voiddis_t(ucharsj)
{
while(busy1602());
rs=1;
rw=0;
lcd1602=sj;
e=1;
e=0;
}
voidinit1602()
{
xml(0x38);
xml(0x0c);
xml(0x06);
xml(0x01);
}
voiddis_w(uchari,ucharl,uchara,uchardat)
{
ucharz;
for(z=0;z<8;z++)
{
xml(l+z);
dis_t(time[dis[i]][z]);
}
xml(a);
dis_t(dat);
}
voidcount()
{
s++;
if(s==60)
{
s=0;
f++;
}
if(f==60)
{
f=0;
h++;
}
if(h==24)
{
h=0;
r++;
}
if((n%4)==0)
{
if(r==moth[y])
{
r=1;
y++;
}
}
else
{
if(r==moth[y]-1)
{
r=1;
y++;
}
}
if(y==13)
{
y=1;
n++;
}
}
voidsjz()
{
xml(0x80);
dis_t(n/1000+'0');
dis_t(n/100%10+'0');
dis_t(n/10%10+'0');
dis_t(n%10+'0');
xml(0x85);
dis_t(y/10+'0');
dis_t(y%10+'0');
xml(0x88);
dis_t(r/10+'0');
dis_t(r%10+'0');
xml(0xc0);
dis_t(h/10+'0');
dis_t(h%10+'0');
dis_t(':
');
dis_t(f/10+'0');
dis_t(f%10+'0');
dis_t(':
');
dis_t(s/10+'0');
dis_t(s%10+'0');
}
voidscountz()
{
bitbz;
if(Mode==0)
delay(100);
if(Mode==0)
{
bz=0;
if(bz==0)
EA=ET0=TR0=0;
j=j+1;
if(j==6)
j=1;
while(Mode==0);
}
switch(j)
{
case1:
year();xsz();break;
case2:
moth1();xsz();break;
case3:
day();xsz();break;
case4:
shi();xsz();break;
case5:
fen();xsz();break;
}
if(start==0)
{
bz=1;
EA=ET0=TR0=1;
}
if(bz==1)
{
xml(0x8f);
dis_t('');
}
}
voidnian()
{
if(jia==0)
delay(100);
if(jia==0)
{
n=n+1;
while(jia==0);
}
if(jian==0)
delay(100);
if(jian==0)
{
n=n-1;
while(jian==0);
}
}
voidmoth1()
{
if(jia==0)
delay(100);
if(jia==0)
{
y=y+1;
if(y==13)
y=1;
while(jia==0);
}
if(jian==0)
delay(100);
if(jian==0)
{
y=y-1;
if(y<=0)
y=12;
while(jian==0);
}
}
voidday()
{
if(jia==0)
delay(100);
if(jia==0)
{
r=r+1;
if((n%4)==0)
{
if(r==moth[y])
r=1;
}
else
{
if(r==moth[y]-1)
r=1;
}
while(jia==0);
}
if(jian==0)
delay(100);
if(jian==0)
{
r=r-1;
if(r<=0)
{
if((n%4)==0)
r=moth[y]-1;
else
{
r=moth[y]-2;
}
}
while(jian==0);
}
}
voidshi()
{
if(jia==0)
delay(100);
if(jia==0)
{
h=h+1;
if(h==24)
h=0;
while(jia==0);
}
if(jian==0)
delay(100);
if(jian==0)
{
h=h-1;
if(h==0xff)
h=23;
while(jian==0);
}
}
voidfen()
{
if(jia==0)
delay(100);
if(jia==0)
{
f=f+1;
if(f==60)
f=0;
while(jia==0);
}
if(jian==0)
delay(100);
if(jian==0)
{
f=f-1;
if(f==0xff)
f=59;
while(jian==0);
}
}
voidmain()
{
TMOD=0x01;
TL0=(65535-50000)%0x100;
TH0=(65535-50000)/0x100;
init1602();
dis[0]=0;
dis[1]=1;
dis[2]=2;
dis[3]=3;
dis[4]=4;
while
(1)
{
scountz();
dis_w(0,0x40,0x84,0x00);
dis_w(1,0x48,0x87,0x01);
dis_w(2,0x50,0x8a,0x02);
sjz();
}
}
voidtume1()interrupt1
{
uchari;
TL0=(65535-50000)%0x100;
TH0=(65535-50000)/0x100;
i++;if(i==20)
{
i=0;
count();
}
}
voidxsz()
{
if(j==1)
dis_w(0,0x40,0x8f,0x00);
if(j==2)
dis_w(1,0x48,0x8f,0x01);
if(j==3)
dis_w(2,0x50,0x8f,0x02);
if(j==4)
dis_w(3,0x58,0x8f,0x03);
if(j==5)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片 电子 时钟 课程设计