基于单片机系统的电子钟设计与仿真修改后的.docx
- 文档编号:27744076
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:27
- 大小:717.32KB
基于单片机系统的电子钟设计与仿真修改后的.docx
《基于单片机系统的电子钟设计与仿真修改后的.docx》由会员分享,可在线阅读,更多相关《基于单片机系统的电子钟设计与仿真修改后的.docx(27页珍藏版)》请在冰豆网上搜索。
基于单片机系统的电子钟设计与仿真修改后的
摘 要
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此越来越广泛地应用各个领域.
本文的电子钟系统是以单片机(AT89C51)为核心,数码管显示驱动芯片74LS00等元器件组成。
具体介绍应用Proteus的ISIS软件进行单片机系统的电子钟设计与仿真的实现方法。
该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。
关键词:
单片机;数码管显示驱动芯片;Proteus;电子钟
DesignandSimulationOfelectronicclockBasedon
Single-chipSystem
Abstract
Inrecentyears,withcomputersintheinfiltrationandthedevelopmentoflarge-scaleintegratedcircuits.SCMapplicationissteadilydeepening,asithasstrongfunction,smallsize,lowpowerdissipation,lowprices,reliable,easytousefeatures,itisparticularlysuitedtoandcontrolofthesystem,increasinglywidelyusedinvariousfields.
Thisarticledescribesanelectronicbellsystemissingle-chipmicrocomputer(AT89C51)asthecore,LEDdisplaydriverchipcomponents,suchas74LS00component.DescribestheapplicationofProteus'sISISsoftwareoftheelectronicsingle-chipsystemclocktoachievethedesignandsimulationmethodsindetails.Themethodcannotonlytestthepropertyofthesystemprecisely,butalsoimprovedevelopmentefficiencyandreducedevelopmentcost,whichvaluesinpopularity.
Keywords:
AT89C51;74LS00;Proteus;electronicsclock
目录
1.1引言2
1.2Proteus软件简介2
第二章系统设计3
2.1电子钟系统硬件组成3
2.1.1AT89C51单片机简介4
2.1.274LS00工作原理简介6
2.2电子时钟系统设计流程8
第三章硬件电路设计9
3.1电路原理图设计9
3.2Proteus电路图设计10
第四章软件设计11
4.1程序流程图设计11
程序流程图见下图4.111
4.2源程序设计12
4.3KeilC51进行程序调试18
第五章系统调试与仿真19
5.1Proteus中Hex文件选择19
5.2Proteus进行电子钟系统仿真20
5.3基于单片机系统的电子钟实物21
结束语22
参考文献22
学习心得22
1.1引言
随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。
单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。
然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。
来自英国LabcenterElectronics公司的Proteus软件很好地诠释了利用现代EDA工具方便快捷开发单片机系统的优势。
它包括PROTEUSVSM(VirtualSystemModelling)、PROTEUSPCBDESIGN两大组成部分,在PC机上就能实现原理图电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证以及形成PCB文件的完整嵌入式系统设计与研发过程。
单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。
如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。
1.2Proteus软件简介
PROTEUS软件由Labcenter公司开发,是目前世界上最先进、最完整的嵌入式系统设计与仿真平台,可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。
微控制器系统相关的仿真需建立编译和调试环境,可选择KeilC51uVision2软件。
该软件支持众多不同公司的芯片,集编辑、编译和程序仿真等于一体,同时还支持PLM、汇编和C语言的程序设计。
它的界面友好易学,在调试程序、软件仿真方面有很强大的功能。
其革命性的功能是:
将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,实时看到运行后的输入、输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,Proteus为我们建立了完备的电子设计开发环境。
第二章系统设计
2.1电子钟系统硬件组成
电子钟系统硬件主要由AT89C51单片机、数码管显示驱动芯片74ls00等元器件组成。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
图2.1电子钟系统硬件电路组成框图
2.1.1AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51的引脚图见图2.2。
图2.2AT89C51单片机
1.主要特性
AT89C51单片机具有与MCS-51兼容4K字节可编程闪烁存储器。
其寿命:
1000写/擦循环;数据保留时间:
10年;全静态工作:
0Hz-24Hz;三级程序存储器锁定。
128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。
2.管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3.0RXD
串行输入口
P3.1TXD
串行输出口
P3.2/INT0
外部中断0
P3.3/INT1
外部中断1
P3.4T0
记时器0外部输入
P3.6/WR
外部数据存储器写选通
P3.7/RD
外部数据存储器读选通
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
地址锁存允许输出/编程脉冲输入端。
当访问外部存储器时,ALE昨锁存扩展地址低位字节的输出控制信号。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR的8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器地址(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2.1.274LS00工作原理简介
54/7400
四2输入与非门
简要说明
00为四组2输入端与非门(正逻辑),共有54/7400、54/74H00、54/74S00、54/LS00
四种线路结构形式,其主要电特性的典型值如下:
型号
Tplh
Tphl
Pd
5400/7400
11ns
7ns
40mW
54H00/74H00
5.9ns
6.2ns
90mW
54S00/74S00
3ns
3ns
75mW
54LS00/74LS00
9ns
10ns
9mW
图表2.374LS00电特性
引出端符号
1A-4A,1B-4B输入端
1Y-4Y输出端
逻辑图见下图2.3。
图2.3双列直插封装
动态特性(TA=25℃)见下表2.4
表2.4动态特性
2.2电子时钟系统设计流程
电子时钟系统设计流程见下图2.2。
图2.2基于Proteus的单片机系统设计流程
第三章硬件电路设计
3.1电路原理图设计
ProtelDXP设计的电子钟电路原理图见下图3.1。
图3.1ProtelDXP设计的电子钟电路原理图
主要元器件功能介绍:
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
74ls00是共阴极数码管显示驱动芯片。
可直接与单片机连接,用户能方便地实现多位LED数码管显示。
内含有硬件动态扫描显示控制,每块芯片可驱动4个LED数码管。
3.2Proteus电路图设计
运行Proteus的ISIS后出现程序主窗口界面,鼠标左键单击窗口左侧的元器件工具栏的component按钮,接着再点击窗口左侧的元器件选择区的PickDivices.按钮,弹出如图1所示的PickDevices窗口,再在Categ栏里点击MicroprocessorICs项后,在Results栏里会出现各种类型的CPU器件,找到AT89C51后双击,AT89C51就被添加到当前窗口左侧的元器件列表区了。
用同样的方法依次把数码管、晶振以及多个电阻、电容也添加到器件列表区里。
然后再依次点击列表区里的器件,单击左键把他们放到绘图区,右键选中元件,并编辑其属性,合理布局后,进行连线。
连线时当鼠标的指针靠近一个对象的引脚时,跟着鼠标的指针rICs就会出现一个“×”提示符号,点击鼠标左键即可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,点击工具栏的Inter-sheeTerminal按钮,添加上电源和接地符号,原理图的绘制就完成了。
Proteus中设计的电子时钟系统原理图见下图3.2.2。
图3.2.2Proteus中设计的电子时钟系统原理图
第四章软件设计
4.1程序流程图设计
系统程序流程图见下图4.1。
图4.1系统程序流程图
4.2源程序设计
电子时钟程序见一下:
//24小时制时钟,固定7:
30、12:
30、21:
30闹铃,具备日期及闹铃调节,晶震12MHZ
#include
#defineAP0//数码数据控制=0有效。
P0.0至P0.6控制=0有效。
#defineBP2//LED1P2^6LED2P2^5LED3P2^4LED4P2^3LED5P2^2LED6P2^1
#defineCP1
//定义喇叭=0有效:
喇叭为长鸣
#defineEP2_4
//定义按键=0有效
#defineDP2_7
#defineK1P3_5//时钟设置按键
#defineK2P3_0//调时加
#defineK3P3_1//调时减
//定义全局变量
//charled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0123456789p0数码数据
charled[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//0123456789p0数码数据
charstar[]={0x81,0x82,0x84,0x88,0x90,0xa0};//定义位扫描数据
charm,hour,minute,secend,clock_hour,clock_minute;
voidinit()//启动并装载定时器0
{
TMOD=0x01;//定时器0,16位工作方式
TH0=0x3c;
TL0=0xb0;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器
}
voidtimer0()interrupt1//使用定时器0中断
{
staticunsignedchart;
TH0=0x3c;
TL0=0xb0;
t++;
if(t==30)
{
t=0;
secend=secend+1;//中断30次为1S
}
}
delaya()//延时
{
chara;
for(a=1000;a>0;a--);
}
ledoutput()//时钟显示
{
chark,j[6];
for(k=0;k<6;k++)
{
j[0]=hour/10%10;//第一位
j[1]=hour%10;
j[2]=minute/10%10;
j[3]=minute%10;
j[4]=secend/10%10;
j[5]=secend%10;//最后一位
switch(j[k])//字符显示
{
case0:
A=led[0];break;
case1:
A=led[1];break;
case2:
A=led[2];break;
case3:
A=led[3];break;
case4:
A=led[4];break;
case5:
A=led[5];break;
case6:
A=led[6];break;
case7:
A=led[7];break;
case8:
A=led[8];break;
case9:
A=led[9];break;
}
B=star[k];//LED灯位控制
if(secend==60)//秒进位判断
{
minute=minute+1;
secend=0;
}
if(minute==60)//分进位判断
{
hour=hour+1;
minute=0;
}
if(hour==24)//小时判断
hour=0;
delaya();
}
}
delay()//延时
{
inta;
for(a=100;a>0;a--)
ledoutput();//利用时钟显示时间
}
k1()//判断设置键,当确认K1按下一次,功能指示m值相应变化
{
chara,b=1;
if(K1==0)
{//C=0;
for(a=15;a>0;a--)
ledoutput();
if(K1==0)
{
m=m+1;
if(m==3)
m=0;
}
}
while(b)
{
if(K1==1)
b=0;
ledoutput();
}
}
sethour()//设置小时,进入设置状态后小时显示闪烁
{
while
(1)
{
star[0]=0X00;
star[1]=0X00;
delay();
if(K2==0){delaya();if(K2==0)hour=hour+1;C=1;}
if(K3==0){delaya();if(K3==0)hour=hour-1;C=0;}
if(K1==0){delaya();if(K1==0)break;}
star[0]=0x81;
star[1]=0x82;
delay();
if(K2==0){delaya();if(K2==0)hour=hour+1;C=1;}
if(K3==0){delaya();if(K3==0)hour=hour-1;C=0;}
if(K1==0){delaya();if(K1==0)break;}
}
star[0]=0x81;
star[1]=0x82;
}
setminute()//设置分,进入设置状态后分钟显示闪烁
{
while
(1)
{
star[2]=0X00;
star[3]=0X00;
delay();
if(K2==0){delaya();if(K2==0)minute=minute+1;C=1;}
if(K3==0){delaya();if(K3==0)minute=minute-1;C=0;}
if(K1==0){delaya();if(K1==0)break;}
star[2]=0x84;
star[3]=0x88;
delay();
if(K2==0){delaya();if(K2==0)minute=minute+1;C=1;}
if(K3==0){delaya();if(K3==0)minute=minute-1;C=0;}
if(K1==0){delaya();if(K1==0)break;}
}
star[2]=0x84;
star[3]=0x88;
}
sound()//闹铃声音
{
chara;
for(a=20;a>0;a--)
{
D=0;
delay();
D=1;
delay();
D=0;
delay();
delay();
D=1;
delay();
delay();
}
D=1;
}
clock()//闹铃时间判断,可增加定时项目
{
if(hour==7)
if(minute==30)
if(secend==0)
sound();
if(hour==12)
if(minute==30)
if(secend==0)
sound();
if(hour==21)
if(minute==30)
if(secend==0)
sound();
}
main()
{
m=0;
hour=0;
minute=0;
secend=0;
init();//以上为初始化
while
(1)
{
k1();
if(m==1)
sethour();
if(m==2)
setminute();
ledoutput();
clock();
}
}
4.3KeilC51进行程序调试
KeilC51程序调试界面见下图4.3.1。
图4.3.1程序调试界面图
第五章系统调试与仿真
5.1Proteus中Hex文件选择
系统仿真分析电路原理图在ISIS里设计完成,并将系统软件编译成.Hex文件,再进行电子时钟的系统虚拟仿真。
(1)在ISIS的原理图中,右键单击AT89C51将其选中,然后单击左键打开AT89C51的EditComponent对话框,如下图所示。
图5.1EditComponent对话框
(2)选择相应的.Hex文件,再在ProteusISIS编辑窗口的File菜单中选择SaveDesign选项,保存设计,生成.DSN文件。
5.2Proteus进行电子钟系统仿真
在ProteusISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如下图5.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 系统 电子钟 设计 仿真 修改