基于51单片的电子时钟的课程设计Word文档格式.docx
- 文档编号:16755078
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:22
- 大小:384.37KB
基于51单片的电子时钟的课程设计Word文档格式.docx
《基于51单片的电子时钟的课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片的电子时钟的课程设计Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
(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<
reg52.h>
#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;
busy=BF;
e=0;
returnbusy;
voidxml(ucharml)
while(busy1602());
rw=0;
lcd1602=ml;
e=1;
voiddis_t(ucharsj)
rs=1;
lcd1602=sj;
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+'
dis_t(n/10%10+'
dis_t(n%10+'
xml(0x85);
dis_t(y/10+'
dis_t(y%10+'
xml(0x88);
dis_t(r/10+'
dis_t(r%10+'
xml(0xc0);
dis_t(h/10+'
dis_t(h%10+'
dis_t('
:
'
dis_t(f/10+'
dis_t(f%10+'
dis_t(s/10+'
dis_t(s%10+'
voidscountz()
bitbz;
if(Mode==0)
delay(100);
{
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();
break;
case3:
day();
case4:
shi();
case5:
fen();
if(start==0)
bz=1;
EA=ET0=TR0=1;
if(bz==1)
xml(0x8f);
'
voidnian()
if(jia==0)
n=n+1;
while(jia==0);
if(jian==0)
n=n-1;
while(jian==0);
voidmoth1()
y=y+1;
if(y==13)
y=1;
y=y-1;
if(y<
=0)
y=12;
voidday()
r=r+1;
if((n%4)==0)
else
if(r==moth[y]-1)
while(jia==0);
r=r-1;
if(r<
if((n%4)==0)
r=moth[y]-1;
else
{
r=moth[y]-2;
}
}
while(jian==0);
voidshi()
h=h+1;
if(h==24)
h=0;
h=h-1;
if(h==0xff)
h=23;
voidfen()
f=f+1;
if(f==60)
f=f-1;
if(f==0xff)
f=59;
}
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;
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 单片 电子 时钟 课程设计