基于单片机万年历设计.docx

上传人:b****1 文档编号:14923281 上传时间:2023-06-28 格式:DOCX 页数:16 大小:25.37KB
下载 相关 举报
基于单片机万年历设计.docx_第1页
第1页 / 共16页
基于单片机万年历设计.docx_第2页
第2页 / 共16页
基于单片机万年历设计.docx_第3页
第3页 / 共16页
基于单片机万年历设计.docx_第4页
第4页 / 共16页
基于单片机万年历设计.docx_第5页
第5页 / 共16页
基于单片机万年历设计.docx_第6页
第6页 / 共16页
基于单片机万年历设计.docx_第7页
第7页 / 共16页
基于单片机万年历设计.docx_第8页
第8页 / 共16页
基于单片机万年历设计.docx_第9页
第9页 / 共16页
基于单片机万年历设计.docx_第10页
第10页 / 共16页
基于单片机万年历设计.docx_第11页
第11页 / 共16页
基于单片机万年历设计.docx_第12页
第12页 / 共16页
基于单片机万年历设计.docx_第13页
第13页 / 共16页
基于单片机万年历设计.docx_第14页
第14页 / 共16页
基于单片机万年历设计.docx_第15页
第15页 / 共16页
基于单片机万年历设计.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机万年历设计.docx

《基于单片机万年历设计.docx》由会员分享,可在线阅读,更多相关《基于单片机万年历设计.docx(16页珍藏版)》请在冰点文库上搜索。

基于单片机万年历设计.docx

基于单片机万年历设计

基于单片机万年历设计

基于单片机的万年历设计二、实验要求设计一个万年历,将时钟显示在LCD1602的显示屏上并且可以进行年、月、日以及时、分、秒的设置。

此外还可以通过按键进行闹钟设置以及___提醒功能,用蜂鸣器进行闹铃提醒。

最后附加一个温湿度检测的功能,用温湿度传感器检测室内的温湿度并将温湿度数据在显示屏上显示出来。

三、实验设备和仪器1.用STC___C52芯片作为系统板的主控芯片2.DHT11温湿度传感器3.DS1302时钟芯片4.LCD1602显示屏四、实验各模块原理介绍4.1STC___C52单片机STC___C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。

STC___C52使用经典的MCS-51内核,具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC___C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

(1)主要特性8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间;可直接使用串口下载;

(2)器件参数1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。

2.工作电压:

5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)3.工作频率范围:

0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.通用I/O口(32个),复位后为:

P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载用户程序,数秒即可完成一片。

8.具有EEPROM功能9.共3个16位定时器/计数器。

即定时器T0、T1、T2。

10.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。

11.通用异步串行口(UART),还可用定时器软件实现多个UART。

12.工作温度范围:

-40~+85℃(工业级)/0~75℃(商业级)13.PDIP封装1、STC___C52单片机引脚图图4.1STC___C52单片机引脚图①主电源引脚(2根)VCC(Pin40):

电源输入,接+5V电源GND(Pin20):

接地线②外接晶振引脚(2根)XTAL1(Pin19):

片内振荡电路的输入端XTAL2(Pin20):

片内振荡电路的输出端③控制引脚(4根)RST/VPP(Pin9):

复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):

地址锁存允许___PSEN(Pin29):

外部存储器读选通___EA/VPP(Pin31):

程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

④可编程输入/输出引脚(32根)STC___C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

PO口(Pin39~Pin32):

8位双向I/O口线,名称为P0.0~P0.7P1口(Pin1~Pin8):

8位准双向I/O口线,名称为P1.0~P1.7P2口(Pin21~Pin28):

8位准双向I/O口线,名称为P2.0~P2.7P3口(Pin10~Pin17):

8位准双向I/O口线,名称为P3.0~P3.7。

2、STC___C52单片机最小系统STC___C52单片机最小系统主要由复位电路和时钟电路组成。

复位功能通过外部电路来实现,按下按键K1控制单片机的复位。

时钟电路主要通过晶振来实现,为单片机提供运行时钟。

根据不同的需求选用的晶振频率会有差异,在本次课程设计中采用11.0592MHZ的晶振频率。

单片机复位电路如图4.2所示,晶振电路如图4.3所示。

图4.2复位电路图4.3晶振电路4.2DS1302芯片DS1302是DALLAS公司出的一款实时时钟芯片,它广泛应用于___、传真、便携式仪器等产品领域,主要性能指标如下:

1、DS1302是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,具有软件自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。

2、拥有31字节数据存储RAM。

3、串行I/O通信方式。

4、DS1302的工作电压比较宽,在2.0V~5.5V范围内均可正常工作。

采用双电源供电,当主电源比备用电源高0.2V时,由主电源供电,否则采用备用电源,一般是一个纽扣电池。

5、DS1302实时时钟芯片的功耗很低,当工作电压为2.0V时,工作电流小于300nA。

6、DS1302共有8个引脚,有两种封装形式,一种是DIP-8封装,芯片宽度(不含引脚)是300mil,一种是SOP-8封装,有两种宽度,一种是150mil,一种是208mil。

(1)DS1302引脚及其功能图4.4DS1302芯片引脚图

(1)V2:

主电源引脚,当V2比V1高0.2v以上时,DS1302由V2供电,当V2低于V1时,由V1供电。

(2、3)X1、X2:

这两个引脚需要接一个32.768k的晶振,为了给DS1302提供一个基准。

但是该晶振的引脚负载电容必须为6pF,若使用有源晶振,接到X1上即可,X2则悬空。

(4)GND:

接地(5)CE:

DS1302的输入引脚。

该引脚内部有一个40k的下拉电阻,当该引脚为高电平,对DS1302进行读写。

(6)I/O:

该引脚是一个双向通信引脚,且内部含有一个40k的下拉电阻,可进行数据的读写。

(7)SCLK:

该引脚是输入引脚,且内部含有一个40k的下拉电阻,作为通信的时钟___。

(8)V1:

备用电源引脚。

(2)DS1302与单片机接线图DS1302引脚与单片机接线图如图4.5所示,从图4.5可看出,引脚X1与X2之间接一个32.768K的晶体正振荡器,V1通过一个纽扣能电池再接地。

图4.5DS1302与单片机连接图4.3LCD1602液晶显示屏LCD1602液晶屏能够能够同时显示32个字符,___便宜,编程简单而且稳定可靠。

LCD1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏内部的液晶材料变化而显示不同的字符,因为液晶是具有流动特性的物质,所以只需外加很微小的力量即可使液晶分子运动。

(1)LCD1602引脚1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口图如图4.6所示:

图4.6LCD1602引脚图(a)各个引脚说明1脚:

VSS为地电源2脚:

VDD接5V正电源3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整。

4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器5脚:

R/W为读写___线,高电平时进行读操作,低电平时进行写操作。

当RSR/W共同为低电平时可以写入指令或者显示地址,当RS为低电平,R/W为高电平;RS为高电平,R/W为低电平时可以写入数据。

6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

7~14脚:

D0~D7为8位双向数据线。

15脚:

背光源正极16脚:

背光源负极(b)LCD1602主要技术参数:

显示容量:

32个字符;芯片工作电压:

4.5-5.5V;工作电流:

2.0mA(5.0V);模块最佳工作电压:

5.0V;

(2)LCD1602与单片机接线图图4.7LCD1602与单片机接线图LCD1602与单片机接线图如4.7所示,背光源正极(5)与VDD

(2)均接电源,将液晶显示器接地保证对比度最强,可使用一个10K的电位器进行调整。

4.4温湿度传感器DHT11DHT11数字温湿度传感器是一款含有已校准数字___输出的温湿度复合传感器。

它采用专用的数字模块采集技术、温湿度传感技术,确保产品的可靠性、___稳定性。

传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

因此,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个DHT11传感器都在极为精确的湿度校验室中进行校准。

校准系数以程序的形式储存在OTP内存中,传感器内部在检测___的处理过程中要调用这些校准系数。

单线制串行接口,使系统集成变得简易快捷。

超小的体积、极低的功耗,___传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。

产品为4针单排引脚封装,连接方便,特殊封装形式可根据用户需求而提供。

(1)DHT11引脚及其功能DHT11的引脚图如图4.8所示,一般情况下它有四个引脚,分别为:

VCC、DOUT、NC、GND。

各引脚以及功能如表4-1所示。

图4.8DHT11引脚图表4-1DHT11引脚及其功能pin名称注释1VDD供电3-5.5VDC2DATA串行数据,单总线3NC空脚,请悬空4GND接地,电源负极1.电源引脚DHT11的供电电压为3-5.5V。

传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。

电源引脚(VDD,GND)之间可增加一个100nF的电容,作用在于去耦滤波。

2.串行接口(单线双向)DATA是用于微处理器与DHT11之间的通信和同步的串行双向接口,采用单总线数据格式。

每次通信都是以高位先出的顺序传输40位数据,用时约为4ms。

数据格式为:

8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据+8位校验和数据。

数据分小数部分和整数部分,当前小数部分用于以后扩展,现读出为零。

数据传送正确时,校验和数据等于“8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据”所得结果的末8位。

(2)DHT11与单片机接线图DHT11与单片机的接线图如图4.9所示,由图4.9中可看出,DHT11第三个引脚接单片机的P2.2引脚,第一个引脚接电阻和发光二极管。

图4.9DHT11与单片机接线图4.5蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、___器、电子玩具、汽车电子设备、___机、定时器等电子产品中作发声器件。

蜂鸣器可分为无源蜂鸣器和有源蜂鸣器两种,此处我们用到的是有源蜂鸣器。

有源蜂鸣器工作的理想___是直流电,通常标示为VDC、VDD等。

因为蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲___,从而带动钼片振动发音。

有源蜂鸣器主要靠压电效应的原理来发声的,且内部带有多谐振荡器,可产生1.5-2.5kHZ的电压___。

由此有源蜂鸣器才能发声。

有源蜂鸣器在单片机中的电路图较为简单,图4.10为蜂鸣器与单片机的接线图。

图4.10蜂鸣器与单片机的接线图有源蜂鸣器直接接上额定电源就可连续发声,I/O口输出后接一个1K的电阻,目的在于基极限流,以低电平方式,启动蜂鸣器发声。

五、流程图

(1)主程序流程图图5.1是系统主程序流程图,系统开始时先进行初始化,然后再调整时间和闹钟,再通过串口屏将时间显示出来。

图5.1主程序流程图

(2)子程序流程图系统从主程序开始执行,分别调用各个子程序,其中子程序包括DS1302子程序,DHT11子程序和LCD1602子程序等。

(1)DS1302芯片子程序流程图DS1302为实时时钟芯片,可以提供秒、分、时、日、月、年及星期等信息,具有软件自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。

从DS1302中可以读出年、月、日、时、分、秒等信息。

图5.2为DS1302芯片的子程序流程图:

图5.2DS1302子程序流程图

(2)DHT11子程序流程图DHT11为温湿度传感器,可以实时显示环境中的温湿度。

其数据由8位湿度整数数据,8位湿度小数数据,8位温度整数数据和8位温度小数数据以及8位校验和数据。

DHT11子程序流程图如5.3所示:

图5.3DHT11子程序流程图(3)LCD1602子程序流程图LCD1602显示时,也要先进行初始化,紧接着读指令,读完之后写指令,再对数据进行读写,然后显示出来,其流程图如图5.4所示。

图5.4LCD1602显示屏子程序流程图六、实验目的1.学会并掌握可keil软件的使用;2.学会并掌握AltiumDesigner软件的使用;3.实现万年历的基本功能;4.通过实验巩固单片机相关知识和检验自身动手能力七、实验内容本次实验使用STC___C52单片机作为主控芯片,使用DS1302芯片作为时钟芯片,在LCD1602显示屏上显示,并可以设置闹钟和___提醒功能,此外还可以进行室内温湿度的检测和显示,最终完成万年历的设计。

八、实验步骤1.查询资料,确定主控芯片、温湿度传感器、时钟芯片以及LCD1602显示屏的使用说明。

2.根据功能要求进行硬件电路的设计,使用AltiumDesigner软件设计电路。

整个电路分为主控芯片控制模块、LCD1602显示模块、按键设置模块、蜂鸣器电路模块以及DHT11温湿度传感器模块。

硬件电路图如图1所示:

图8.1:

硬件电路图3.根据电路图编写C语言代码:

代码如下:

#include#defineucharunsignedchar#defineuintunsignedint#definelcddataP0#definereadalarmsecond0xc7//定义从DS1302中读闹钟秒值的命令字节#definewritealarmsecond0xc6//定义往DS1302中写闹钟秒值的命令字节#definereadalarmminute0xc5//定义从DS1302中读闹钟分值的命令字节#definewritealarmminute0xc4//定义往DS1302中写闹钟分值的命令字节#definereadalarmhour0xc3//定义从DS1302中读闹钟小时值命令字节#definewritealarmhour0xc2//定义往DS1302中写闹钟小时值命令字节#definereadeventday0xd7//定义从DS1302中读___提醒日期值的命令字节#definewriteeventday0xd6//定义往DS1302中写___提醒日期值的命令字节#definereadeventmonth0xd5//定义从DS1302中读___提醒月份值的命令字节#definewriteeventmonth0xd4//定义往DS1302中写___提醒月份值的命令字节#definereadeventyear0xd3//定义从DS1302中读___提醒年份值的命令字节#definewriteeventyear0xd2//定义往DS1302中写___提醒年份值的命令字节___itlcdrs=P2^7;//LCD数据/命令选择端(H/L)___itlcdrw=P2^6;//LCD读/写选择端(H/L)___itlcden=P2^5;//LCD使能控制___itbeep=P1^3;//蜂鸣器控制端___itDQ=P1^4;//温湿度传感器·___itkmenu=P3^2;//功能键___itkup=P3^3;//增大键___itkdown=P3^4;//减小键___itkalarm=P3^5;//闹钟查看键Ring:

显示闹钟需要调到的时间___itkevent=P3^6;//___查看键Ding:

显示___提醒需要调到的时间//___itkmode=P3^7;//切换温湿度显示___itdsclk=P2^2;//ds1302的时钟___端___itdsdata=P2^1;//ds1302的数据I/O端___itdsrst=P2^0;//ds1302的复位端___itACC7=ACC^7;//定义累加器的最高和最低位。

___itACC0=ACC^0;bitflagalarm,flagseta,flagset;//分别定义闹钟响标志位,闹钟设置标志位,时间设置标志位bitflagevent,flagsseta;//分别定义___提醒标志位,___提醒设置标志位ucharFLAG,k;uchartemp;ucharT_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;ucharT_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp;uchardata;ucharkmenunum,s,m,h,dd,mm,yy;//功能键被按次数的计数器.charsecond,minute,hour,year,month,day,week;ucharinittime[7]={0x59,0x59,0x11,0x05,0x07,0x04,0x18};//初始化后设置为:

//2018年7月5日星期四,11点59分59秒,//从左往右的数据依次是,秒,分,时,日,月,星期,年。

//年月日星期:

2018-07-05THU//时间:

11:

59:

59ucharcodet1[]=“--“;//液晶固定显示部分。

ucharcodet2[]=“:

:

“;//各函数声明voiddelay(uintz);//毫秒级延时函数。

voiddi();//蜂鸣器发声函数。

voidwrite(uchar);//液晶写命令函数。

voidwritedata(uchardat);//液晶写数据函数。

voidwritetime(ucharadd,uchardat);//液晶刷新时分秒。

voidwritenyr(ucharadd,uchardat);//液晶刷新日期。

voidwriteweek(ucharweek);//液晶星期几显示函数。

voidkeyscan();//键盘扫描函数。

voiddswritebyte(uchard);//往DS1302写入一个字节。

uchardsreadbyte();//从DS1302读出一个字节。

voiddswrite(ucharadd,uchardat);//向DS1302的指定地址写入一个字节uchardsread(ucharadd);//从DS1302的指定地址读出一个字节voidinit1302time(uchar*pClock);//DS1302时间初始化函数voidinit();//初始化函数voidDelay_100us(uintj);//延时100usvoidDelay_10us(void);//延时10usvoid(void);voidRead_DHT11(void);voiddelay(uintz)//毫秒级延时函数。

{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voiddi()//蜂鸣器发声函数。

{beep=0;delay(100);beep=1;}voidwrite(uchar)//液晶写命令函数。

{lcdrs=0;//置为写入命令lcddata=;//送入数据delay

(1);lcden=1;//拉高使能端delay

(1);lcden=0;//完成高脉冲}voidwritedata(uchardat)//液晶写数据函数。

{lcdrs=1;//置为写入数据lcddata=dat;//送入数据delay

(1);lcden=1;delay

(1);lcden=0;}voidwritetime(ucharadd,uchardat)//液晶刷新时分秒。

{//3为时的开始位置,6为分,9为秒。

ucharshi,ge;shi=dat/10;ge=dat%10;write(0x80+0x40+add);writedata(0x30+shi);writedata(0x30+ge);}voidwritenyr(ucharadd,uchardat)//液晶刷新日期。

{//0为年,3为月,6为日。

ucharshi,ge;shi=dat/10;ge=dat%10;write(0x80+add);writedata(0x30+shi);writedata(0x30+ge);}voidwriteweek(ucharweek)//液晶星期几显示函数。

{write(0x80+9);//从第一行隔十三个字符后开始写星期switch(week){case1:

writedata('M');writedata('O');writedata('N');break;case2:

writedata('T');writedata('U');writedata('E');break;case3:

writedata('W');writedata('E');writedata('D');break;case4:

writedata('T');writedata('H');writedata('U');break;case5:

writedata('F');writedata('R');writedata('I');break;case6:

writedata('S');writedata('A');writedata('T');break;case7:

writedata('S');writedata('U');writedata('N');break;}}voidkeyscan()//键盘扫描函数。

{if((flagalarm==1)||(flagevent==1))//如果闹钟在响或者有___提醒,任意键停止闹钟响或者取消___提醒{if((kmenu==0)||(kup==0)||(kdown==0)||(kalarm==0)||(kevent==0)){delay(5);if((kmenu==0)||(kup==0)||(kdown==0)||(kalarm==0)||(kevent==0)){while(!

(kmenu&&kup&&kdown&&kalarm&&kevent));di();flagalarm=0;//清除闹钟标志。

flagevent=0;//清除___

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2