单片机课程设计 基于51单片机的简约电子钟.docx
《单片机课程设计 基于51单片机的简约电子钟.docx》由会员分享,可在线阅读,更多相关《单片机课程设计 基于51单片机的简约电子钟.docx(27页珍藏版)》请在冰豆网上搜索。
单片机课程设计基于51单片机的简约电子钟
单片机课程设计
项目名称基于51单片机的简约电子钟
专业班级通信091班
学生姓名
指导教师
2012年12月21日
摘要
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习、应用,以STC11F02E芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。
关键词:
STC11F02E;单片机;电子时钟;
Abstract
SCMsinceitsintroductioninthe1970s,withitshighperformanceandlowcost,theattentionandconcernofthepeopleoftheverywideapplicationmicrocontrollersinceitsintroductioninthe1970s,withitshighperformanceandlowcost,bythepeoplewideattentionandconcern,hasdevelopedrapidly.Microcontrollersmallsize,lightweight,stronganti-interferenceability,theenvironmentlessdemanding,lowprice,highreliability,goodflexibility,easierdevelopment.Duetotheaboveadvantages,inourcountry,themicrocontrollerhasbeenwidelyusedinallaspectsofindustrialautomationandcontrol,automaticdetection,intelligentinstruments,householdappliances,powerelectronics,electromechanicalintegrationequipment,etc.,and51microcontrollereachMCUmosttypicalandmostarepresentative.Thiscoursedesignedbyitslearning,application,STC11F02Echipasthecore,supplementedbythenecessarycircuitrytodesignasimpleelectronicclock,itispoweredby4.5VDCpowersupplythroughdigitaltubedisplaytimebeabletoaccuratelyadjusttime,soastoreachthestudy,design,developmentsoftware,thecapabilitiesofthehardware.
Thekeywords:
STC11F02E;microcontroller;electronicclock;
目录
摘要I
AbstractII
第1章绪论1
1.1概述1
1.2单片机技术的研究现状1
1.3总体设计方案2
1.3.1设计思路2
第2章系统硬件原理及设计4
2.1核心器件STC11F02E介绍4
2.2主要设计软件介绍6
2.2.1PROTEUS软件简介6
2.2.2KEIL简介6
2.3硬件电路7
2.3.1总体设计框图及设计原理图7
第3章系统软件设计8
3.1软件设计分析8
3.2软件程序设计8
结论19
参考文献20
附录121
附录222
项目创新及特色23
第1章绪论
1.1概述
单片微型计算机简称单片机,是典型的嵌入式微控制器(MicrocontrollerUnit),常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
单片机由运算器,控制器,存储器,输入输出设备构成,相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
它最早是被用在工业控制领域。
由于单片机在工业控制领域的广泛应用,单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,当时的单片机都是8位或4位的。
其中最成功的是INTEL的8031,此后在8031上发展出了MCS51系列单片机系统。
因为简单可靠而性能不错获得了很大的好评。
尽管2000年以后ARM已经发展出了32位的主频超过300M的高端单片机,直到目前基于8031的单片机还在广泛的使用。
在很多方面单片机比专用处理器更适合应用于嵌入式系统,因此它得到了广泛的应用。
事实上单片机是世界上数量最多处理器,随着单片机家族的发展壮大,单片机和专用处理器的发展便分道扬镳。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!
单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
1.2单片机技术的研究现状
单片机诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。
其中最成功的是INTEL的8031,此后在8031上发展出了MCS51系列MCU系统。
基于这一系统的单片机系统直到现在还在广泛使用。
随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。
90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。
随着INTELi960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。
而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。
目前,高端的32位Soc单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。
当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。
而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
当前趋势SoC嵌入式系统(SystemonChip)式的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决,因此,专用单片机的发展自然形成了SoC化趋势。
随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。
因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
1.3总体设计方案
1.3.1设计思路
利用单片机(STC11F02E)制作简易电子时钟,采用了共阴数码管,在数码管的a-h段都加上330欧姆的上拉电阻,增大数码管的驱动电流,然后还采用了一个蜂鸣器做报时用,外加两个按键,电路非常简单,但是它的亮点是程序,程序使用了一种全新的按键处理方法,一个按键实现长按,短按功能。
1.3.2设计方案
根据设计任务的基本要求,设计了由单片机(STC11F02E)作为主控器件,按键组成的按键操作电路,以及三极管、蜂鸣器组成的发声电路。
本次设计时钟电路,使用了STC11F02E单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用汇编语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:
键盘、芯片、扬声器、LED显示即可满足设计要求。
1.4课题意义
时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。
怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?
这就要求人们不断设计出新型时钟。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟有两方面的含义:
一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:
一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:
DS1302,DS12887,X1203等都可以满足高精度的要求。
本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机STC11F02E芯片和LED数码管为核心,辅以必要的电路,没有用到时钟芯片,因此采用校准功能,构成了一个超级简单的单片机电子时钟,该方案节省硬件成本,但程序设计较为复杂。
第2章系统硬件原理及设计
2.1核心器件STC11F02E介绍
STC11F02E单片机是宏晶科技设计生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成高可靠复位电路,针对高速通信,智能控制,强干扰场合。
STC11/10xx系列单片机的定时器0/定时器1/串行口与传统8051兼容,增加了独立波特率发生器,省去了定时器2.传统8051的111条指令执行速度全面提速,最快的指令快24倍,最慢的指令快3倍.外形及引脚排列如图所示:
图2-1STC11F02E外形图及引脚序列
主要特性:
1.增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051
2.工作电压:
STC11Fxx系列电压:
5.5V-4.1V/3.7V(5V单片机)STC11Lxx系列电压:
3.6V-2.4V/2.1V(3V单片机)
3.工作频率范围:
0-35MHz,相当于普通8051的0~420MHz
4.STC11F/Lxx系列单片机用户应用程序空间:
1/2/3/4/5/6/8/16/20/32/40/48/52/56/60/62K字节
5.STC11系列单片机:
RAM为1280字节或256字节。
STC10系列单片机:
RAM为512字节或256字节
6.通用I/O口(40/36个),复位后为:
准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过100mA
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
8.有EEPROM功能
9.看门狗
10.内部集成MAX810专用复位电路(晶体频率在24MHz以下时,要选择高的复位门槛电压,如4.1V以下复位,晶体频率在12MHz以下时,可选择低的复位门槛电压,如3.7V以下复位,复位脚接1K电阻到地)
11.内置一个对内部Vcc进行掉电检测的掉电检测电路,可设置为中断或复位5V单片机掉电检测门槛电压为4.1V/3.7V附近,3.3V单片机掉电检测门槛电压为2.4V附近
12.时钟源:
外部高精度晶体/时钟,内部R/C振荡器用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟常温下内部R/C振荡器频率为:
4MHz~8MHz精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准
13.2个16位定时器(与传统8051兼容的定时器/计数器,16位定时器T0和T1)1个独立波特率发生器(故不必用T2做为波特率发生器,详细使用方法请参考独立波特率发生器做串口通讯的相关使用说明及示例程序)
14.3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟(部分型号无独立波特率发生器,详情请参阅单片机选型一览表)
15.外部中断I/O口有5路,支持传统的下降沿中断或低电平触发中断PowerDown(掉电)模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,INT/T0/P3.4,INT/T1/P3.5,INT/RxD/P3.0(或INT/RxD/P1.6)
16.PowerDown(掉电)模式可由内部掉电唤醒专用定时器唤醒(STC11xx系列有此功能,STC10xx无此功能),也可由上面提到的外部中断口中断唤醒,由于INT/RxD支持下降沿中断,故也可支持远程通信唤醒
17.一个独立的通用全双工异步串行口(UART),做主机时可以当2个串口使用[RxD/P3.0,TxD/P3.1]可以切换到[RxD/P1.6,TxD/P1.7],通过将串口在P3口和P1口之间来回切换,将1个串口作为2个主串口分时复用,可低成本实现2个串口,当然有其局限性
18.工作温度范围:
-40-+85℃(工业级)/0-75℃(商业级)
19.SOP16/DIP16/DIP18/SOP20/DIP20/LSSOP20/PDIP-40/LQFP-44/PLCC44(暂时尽量不要选PLCC44)SOP16/DIP16有12个I/O口,SOP20/PDIP20/LSSOP20有16个I/O口,LQFP44有40个I/O口,PDIP40有36个I/O口。
2.2主要设计软件介绍
本设计利用KEIL编程软件对时钟源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,两种软件的简介如下:
2.2.1PROTEUS软件简介
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
2.2.2KEIL简介
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
2.3硬件电路
2.3.1总体设计框图及设计原理图
图2.3.1总体设计框图
图2.3.2设计原理图
第3章系统软件设计
3.1软件设计分析
在编程上,首先进行了初始化,定义程序的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时.分.秒,在显示初值之后,进入主循环。
在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下图:
3.2软件程序设计
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineKey10x80//P3.7,按键1
#defineKey20x20//P3.5,按键2
/*以下数据最后处理的时候要合并*/
ucharcomnum;//公共端显示值
uchartimecount;//时间计数值
ucharsec=59,min=59,hour=11;//秒分时
ucharpoint;//控制中间两点
ucharcom3num;/*公共端3控制的方格数值*/
ucharh1,h2,h4,h5;/*1,2,4,5控制的方格值*/
voidinit();//初始化函数声明
//voidKeyInit();/*读取按键函数,按键初始设置*/
voidKeyRead();//读取按键并且执行按键操作
/****以下是按键相关定义*****/
ucharTrg=0;//Trg(triger代表是触发)
ucharCont=0;//Cont(continue)代表是连续按下
ucharcnt_plus;//计算上面按键按住的长数
ucharcnt_plus2;//计算下面按键长按的计算值
ucharcnt_plus3;//长加
ucharkeycount;//按键计数值
ucharsec1,min1,hour1;//用于设置时间时所用到
ucharsetnum;//用于设置的是当前那个值
ucharflashcount;//闪烁计算值
bitflashflag;//闪烁标志
//bitlongkeyflag;//长按标志
sbitbeep=P3^6;//蜂鸣器控制管脚
//sbitlongkey2=P3^5;
bitbeepflag;//报时标志
bitopenbeep;//是否打开蜂鸣器标志
bitopennum;
bitlightflag;
bitcal_flag;/*校准标志*/
charcal_sec;//校准的秒数(有正负)
ucharcal_sec2;//用于转换cal_sec为整数时用到
bitcal_finish;//用于设置负数时确定是否只设置一次
uchartable1[]={0xfd,0x70,0xee,0xfa/*3*/,0x73,0xbb,0xbf,0xf0,0xff,0xfb};//显示码表(0-9,不带方格)(共阴)(h点要置1)!
!
uchartable2[]={0x00/*不亮*/,0xa0,0x60,0x30,0x28,0x24,0x21,
0x22,0x81/*8两边*/,0x42/*次两边*/,0x1c/*中间三横*/,0xff/*11全亮*/};//下面的8段
ucharcomtable[]={0xfe,0xfd,0xfb,0xf7,0xef};//5个公共端控制数组
uchardatanumtable[5];//显示那个数码管(5代表5个数据!
!
!
Mark!
!
)
voidmain()
{
timecount=19;
comnum=0;
com3num=1;
cnt_plus=0;
keycount=0;
//P3=0xff;//暂定
point=0x00;//中间点
//beep=0;
setnum=0;
flashcount=0;
openbeep=0;
opennum=1;
lightflag=0;
cal_flag=0;
cal_sec=0;//校准值初始为0秒
cal_finish=0;
//longkeyflag=1;
init();
while
(1)
{
}
}
voidinit()//初始化函数
{
TMOD=0x11;//两个16位
TH0=(65536-49996)/256;//49996
TL0=(65536-49996)%256;
TH1=(65536-3721)/256;//
TL1=(65536-3721)%256;
EA=1;
ET0=1;//暂定
TR0=1;//暂定
ET1=1;
TR1=1;
}
/**********按键读取函数***********/
voidKeyRead()//读取按键并且执行按键操作
{
ucharReadData=~(P3|0x5f);//(P3|0x5f)^0xff;//P3组需要处理,没有按键的不变化(~P3)
Trg=ReadData&(ReadData^Cont);//判断是否点