万年历和闹钟的设计.docx
- 文档编号:6380849
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:28
- 大小:636.47KB
万年历和闹钟的设计.docx
《万年历和闹钟的设计.docx》由会员分享,可在线阅读,更多相关《万年历和闹钟的设计.docx(28页珍藏版)》请在冰豆网上搜索。
万年历和闹钟的设计
1相关软件介绍
1.1keil软件的介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
1.1.1KeilC51开发系统基本知识
1.系统概述:
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
2.KeilC51单片机软件开发系统的整体结构:
C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
3.使用独立的Keil仿真器时注意事项:
(1)仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。
(2)仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
(3)仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。
1.1.2keil软件的优点
1.KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
2.与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
1.2protues软件的介绍
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等多种编译器。
1.2.1proteus功能特点
Proteus软件具有其它EDA工具软件(例:
multisim)的功能。
这些功能是:
原理布图;PCB自动或人工布线;SPICE电路仿真。
其革命性的特点有:
互动的电路仿真;用户可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。
1.2.2proteus功能模块
1.智能原理图设计(ISIS):
(1)有丰富的器件库:
超过27000种元器件,可方便地创建新元件;
(2)智能的器件搜索:
通过模糊搜索可以快速定位所需要的器件;(3)智能化的连线功能:
自动连线功能使连接导线简单快捷,大大缩短绘图时间;(4)支持总线结构:
使用总线器件和总线布线使电路设计简明清晰; 可输出高质量图纸:
通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。
2.完善的电路仿真功能(Prospice)
(1)ProSPICE混合仿真:
基于工业标准SPICE3F5,实现数字/模拟电路的混合仿真;
(2)超过27000个仿真器件:
可以通过内部原型或使用厂家的SPICE文件自行设计仿真器件,Labcenter也在不断地发布新的仿真器件,还可导入第三方发布的仿真器件;(3)多样的激励源:
包括直流、正弦、脉冲、分段线性脉冲、音频(使用wav文件)、指数信号、单频FM、数字时钟和码流,还支持文件形式的信号输入;(4)丰富的虚拟仪器:
13种虚拟仪器,面板操作逼真,如示波器、逻辑分析仪、信号发生器、直流电压/电流表、交流电压/电流表、数字图案发生器、频率计/计数器、逻辑探头、虚拟终端、SPI调试器、I2C调试器等;(5)生动的仿真显示:
用色点显示引脚的数字电平,导线以不同颜色表示其对地电压大小,结合动态器件(如电机、显示器件、按钮)的使用可以使仿真更加直观、生动;(6)高级图形仿真功能(ASF):
基于图标的分析可以精确分析电路的多项指标,包括工作点、瞬态特性、频率特性、传输特性、噪声、失真、傅里叶频谱分析等,还可以进行一致性分析。
3.独特的单片机协同仿真功能(VSM):
(1)支持主流的CPU类型:
如ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430等,CPU类型随着版本升级还在继续增加,如即将支持CORTEX、DSP处理器;
(2)支持通用外设模型:
如字符LCD模块、图形LCD模块、LED点阵、LED七段显示模块、键盘/按键、直流/步进/伺服电机、RS232虚拟终端、电子温度计等等,其COMPIM(COM口物理接口模型)还可以使仿真电路通过PC机串口和外部电路实现双向异步串行通信;(4)实时仿真:
支持UART/USART/EUSARTs仿真、中断仿真、SPI/I2C仿真、MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真;(5)编译及调试:
支持单片机汇编语言的编辑/编译/源码级仿真,内带8051、AVR、PIC的汇编编译器,也可以与第三方集成编译环境(如IAR、Keil和Hitech)结合,进行高级语言源码级仿真和调试。
4.实用的PCB设计平台:
(1)原理图到PCB的快速通道:
原理图设计完成后,一键便可进入ARES的PCB设计环境,实现从概念到产品的完整设计;
(2)先进的自动布局/布线功能:
支持器件的自动/人工布局;支持无网络自动布线或人工布线;支持引脚交换/门交换功能使PCB设计更为合理;(3)完整的PCB设计功能:
最多可设计16个铜箔层,2个丝印层,4个机械层(含板边),灵活的布线策略供用户设置,自动设计规则检查,3D可视化预览;(4)多种输出格式的支持:
可以输出多种格式文件,包括Gerber文件的导入或导出,便利与其它PCB设计工具的互转(如protel)和PCB板的设计和加工。
1.3STC_ISP简介
STC-ISP是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便,现已被广泛使用。
操作说明如下:
(1)打开STC-ISP,如下图界面,在MCUType栏目下选中单片机,如STC89C52RC;
(2)根据您的9针数据线连接情况选中COM端口,波特率一般保持默认,如果遇到下载问题,可以适当下调一些;
(3)先确认硬件连接正确,按如图点击“打开文件”并在对话框内找到您要下载的HEX文件:
(4)按下图选中两个条件项,这样可以使您在每次编译KEIL时HEX代码能自动加载到STC-ISP,点击“Download/下载”:
(5)手动按下电源开关便即可把可执行文件HEX写入到单片机内;
(6)程序写入完毕,目标板开始运行程序结果。
图1.1STC-ISP界面图
2相关芯片介绍
2.1STC89C52介绍
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
特性如下:
8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间;可直接使用串口下载。
参数如下:
(1)增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。
(2)工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)。
(3)工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。
(4)用户应用程序空间为8K字节。
(5)片上集成512字节RAM(6)通用I/O口(32个),复位后为:
P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片。
(8)具有EEPROM功能。
(9)具有看门狗功能。
(10)共3个16位定时器/计数器。
即定时器T0、T1、T2。
(11)外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。
(12)通用异步串行口(UART),还可用定时器软件实现多个UAR。
(13)工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)。
(14)PDIP封装。
图2.1STC89C52引脚
2.2DS12C887芯片介绍
DS12C887实时时钟芯片功能丰富,可以用来直接代替IBMPC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。
由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。
在12小时制模式中,用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器,113字节通用RAM使用户使用;此外用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。
2.2.1DS12C887时钟芯片各寄存器
各寄存器定义如下表所示:
表2.1DS12C887各寄存器定义表
(1)控制寄存器A:
UIP--更新位,用来表示芯片是否即将进行更新。
当UIP=1时,更新即将开始;当UIP=0时,表示至少在244us内芯片不会更新,此时,时钟、日历和闹钟信息可以通过读/写相应的字节获得并设置。
UIP位为只读位并且不受复位信号的影响。
通过把寄存器B中的SET位设置为1,可以禁止更新并将UIP位清零。
DV2,DV1,DV0--这三位用来开/关晶体振荡器和复位分频器。
当[DV0DV1DV2]=[010]时,晶体振荡器开启且保持时钟运行。
(2)控制寄存器B:
SET--SET=0,芯片更新正常进行;SET--1,芯片更新被禁止。
PIE--PIE=0,禁止周期中断输出到中断请求输出位;PIE=1,允许周期中断输出到中断请求输出位。
DM--DM=0,设置寄存器存储数据格式为BCD码格式;DMI=1,设置寄存器存储数据格式为二进制数据格式,此位不受复位信号影响。
24/12--为1,24小时制;为0,12小时制。
(3)控制寄存器C:
IRQF--中断请求标志。
(4)控制寄存器D:
VRT--VRT=0,表示内置电池能量耗尽,此时RAM中数据的正确性就不能保证了。
2.2.2时序图分析
Mototola和Intel模式总线读/写如下图所示:
图2.2Motolola模式总线读/写时序图
图2.3Intel模式总线读时序图
图2.4Intel模式总线写时序图
2.3LCD1602
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号
等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
2.3.1LCD1602特性
(1)+5V电压,对比度可调;
(2)内含复位电路;
(3)提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能;
(4)有80字节显示数据存储器DDRAM;
(5)内建有160个5X7点阵的字型的字符发生器CGROM;
(6)8个可由用户自定义的5X7的字符发生器CGRAM;
(7)字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),HD44780内置了DDRAM(显示数据存储RAM)、CGROM(字符存储ROM)和CGRAM(用户自定义RAM)。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:
表2.2DDRAM地址与显示位置的对应关系表
2.3.2LCD1602主要指令介绍
OCH:
设置开显示,不显示光标;
06H:
写一个字符后地址指针自动加1;
01H:
显示清零,数据指针清零。
根据下面写时序图可知:
写指令输入:
RS=L,R/
=L,D0-D7=指令码,E=高脉冲输出:
D0-D7=数据
写数据输入:
RS=H,R/
=L,D0-D7=数据,E=高脉冲输出:
无
图2.51602液晶写操作时序图
3课程设计实现
3.1程序编译实现
应该实现的功能设置如下:
(1)在正常工作时,LCD1602显示以Hex中文件设置好的时间开始,不断更新显示时间,相当于一个时钟,在第二行以24进制显示时分秒的同时,还会在第一行显示年份、月份、日期以及星期,在秒显示不断跳动的同时,4个led灯循环闪。
(2)按下S1键可以对显示进行设置,按一下,表示设置秒,按两下,表示设置分,如此一次设置时,星期,日,月,年,直到按下第八次,退出设置。
按S2键表示光标位置的数字加,按S3键表示光标位置的数字减。
(3)按下S4表示对闹钟时间的设置,然后按S1选择对时分秒的设置,再按一下S4,退出闹钟的设置。
在所有的设置过程中,led灯灭,表示设置。
在闹钟响的过程中,按四个键中的任意一个,都可以让闹钟停止响。
如果没有按键,则蜂鸣器“滴滴”响30下,就自动停止闹钟响。
程序清单如下:
C程序代码:
#include
#include
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddi()//蜂鸣器报警声音
{
beep=0;
delay(100);
beep=1;
}
voidwrite_com(ucharcom)//写液晶命令函数
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)//写液晶数据函数
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()//初始化函数
{
ucharnum;
EA=1;//打开总中断
EX1=1;//开外部中断1
IT1=1;//设置负跳变触发中断
flag1=0;//变量初始化
t0_num=0;
s1num=0;
week=1;
dula=0;//关数码管显示
wela=0;
lcden=0;
rd=0;
//以下几行在首次设置DS12C887时使用,以后不必再写入
write_ds(0x0A,0x20);//打开振荡器
write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式,开启闹铃中断
set_time();//设置上电默认时间
//................................
write_com(0x38);//1602液晶初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)//写入液晶固定部分显示
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<11;num++)
{
write_data(table1[num]);
delay(5);
}
}
voidwrite_sfm(ucharadd,uchardate)//1602液晶刷新时分秒函数,add为4时表示时,为7时表示分,为10时表示秒
{
charshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
voidwrite_nyr(ucharadd,chardate)//1602液晶刷新年月日函数,add为3时表示年,为6时表示月,为9时表示日
{
charshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
voidwrite_week(charwe)//1602液晶写星期显示函数
{
write_com(0x80+12);
switch(we)
{
case1:
write_data('M');delay(5);
write_data('O');delay(5);
write_data('N');
break;
case2:
write_data('T');delay(5);
write_data('U');delay(5);
write_data('E');
break;
case3:
write_data('W');delay(5);
write_data('E');delay(5);
write_data('D');
break;
case4:
write_data('T');delay(5);
write_data('H');delay(5);
write_data('U');
break;
case5:
write_data('F');delay(5);
write_data('R');delay(5);
write_data('T');
break;
case6:
write_data('S');delay(5);
write_data('A');delay(5);
write_data('T');
break;
case7:
write_data('S');delay(5);
write_data('U');delay(5);
write_data('N');
break;
}
}
voidkeyscan()
{
if(flag_ri==1)
{
if((s1==0)||(s2==0)||(s3==0)||(s4==0))//这里用来取消闹钟报警,按任意一键取消报警
{
delay(5);
if((s1==0)||(s2==0)||(s3==0)||(s4==0))
{
while(!
(s1&&s2&&s3&&s4));
di();
flag_ri=0;//清除报警标志
}
}
else
{
if(t0_num==30)
{
flag_ri=0;
t0_num=0;
}
}
}
if(s1==0)//检测s1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 闹钟 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)