基于单片机的万年历设计说明

基于单片机的万年历设计说明
基于单片机的万年历设计说明

基于单片机的万年历设计

二、实验要求

设计一个万年历,将时钟显示在LCD1602的显示屏上并且可以进行年、月、日以及时、分、秒的设置。此外还可以通过按键进行闹钟设置以及事件提醒功能,用蜂鸣器进行闹铃提醒。最后附加一个温湿度检测的功能,用温湿度传感器检测室的温湿度并将温湿度数据在显示屏上显示出来。

三、实验设备和仪器

1.用 STC89C52芯片作为系统板的主控芯片

2.DHT11温湿度传感器

3.DS1302时钟芯片

4.LCD1602显示屏

四、实验各模块原理介绍

4.1 STC89C52单片机

STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51核,具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

(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,实际工作频率可达48MHz

4. 用户应用程序空间为8K字节

5. 片上集成512字节RAM

6. 通用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 路,下降沿中断或低电平触发电路,Power Down 模式可由外部中断低电平触发中断方式唤醒。

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

12. 工作温度围:-40~+85℃(工业级)/0~75℃(商业级)

13. PDIP封装

1、STC89C52单片机引脚图

图4.1 STC89C52单片机引脚图

①主电源引脚(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根)

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

PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7 P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7 P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7 P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7。

2、STC89C52单片机最小系统

STC89C52单片机最小系统主要由复位电路和时钟电路组成。复位功能通过外部电路来实现,按下按键K1控制单片机的复位。时钟电路主要通过晶振来实现,为单片机提供运行时钟。根据不同的需求选用的晶振频率会有差异,在本次课程设计中采用11.0592MHZ的晶振频率。单片机复位电路如图4.2所示,晶振电路如图4.3所示。

图4.2 复位电路

图4.3晶振电路

4.2 DS1302芯片

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.4 DS1302芯片引脚图

(1)Vcc2:主电源引脚,当Vcc2比Vcc1高0.2v以上时,DS1302由Vcc2供电,当Vcc2低于Vcc1时,由Vcc1供电。

(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)Vcc1:备用电源引脚。

(2) DS1302与单片机接线图

DS1302引脚与单片机接线图如图4.5所示,从图4.5可看出,引脚X1与

X2之间接一个32.768K的晶体正振荡器,Vcc1通过一个纽扣能电池再接地。

图4.5 DS1302与单片机连接图

4.3 LCD1602液晶显示屏

LCD1602液晶屏能够能够同时显示32个字符,价格便宜,编程简单而且稳定可靠。LCD1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏部的液晶材料变化而显示不同的字符,因为液晶是具有流动特性的物质,所以只需外加很微小的力量即可使液晶分子运动。

(1)LCD1602引脚

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

图4.6 LCD1602引脚图

(a)各个引脚说明

1脚:VSS为地电源

2脚:VDD接5V正电源

3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比

对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整。

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

5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS

R/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.7 LCD1602与单片机接线图

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

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

4.4 温湿度传感器DHT11

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它采用专用的数字模块采集技术、温湿度传感技术,确保产品的可靠性、长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP存中,传感器部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4针单排引脚封装,连接方便,特殊封装形式可根据用户需求而提供。

(1)DHT11引脚及其功能

DHT11的引脚图如图4.8所示,一般情况下它有四个引脚,分别为:VCC、DOUT、NC、GND。各引脚以及功能如表4-1所示。

图4.8 DHT11引脚图

1.电源引脚

DHT11的供电电压为3-5.5V。传感器上电后,要等待1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,作用在于去耦滤波。

2.串行接口(单线双向)

DATA是用于微处理器与DHT11之间的通信和同步的串行双向

接口,采用单总线数据格式。每次通信都是以高位先出的顺序传输

40位数据,用时约为4 ms。

数据格式为:

8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据+8位校验和数据。数据分小数部分和整数部分,当前小数部分用于以后扩展,现读出为零。数据传送正确时,校验和数据等于“8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据”所得结果的末8位。

(2)DHT11与单片机接线图

DHT11与单片机的接线图如图4.9所示,由图4.9中可看出,DHT11第三个

引脚接单片机的P2.2引脚,第一个引脚接电阻和发光二极管。

图4.9 DHT11与单片机接线图

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芯片的子程序流程图:

DS1302子程序流程图

图5.2 DS1302子程序流程图

(2)DHT11子程序流程图

DHT11为温湿度传感器,可以实时显示环境中的温湿度。其数据由8位湿度整数数据,8位湿度小数数据,8位温度整数数据和8位温度小数数据以及8位校验和数据。DHT11子程序流程图如5.3所示:

DHT11子程序流程图

图5.3 DHT11子程序流程图

(3)LCD1602子程序流程图

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

LCD1602子程序库程图

图5.4 LCD1602显示屏子程序流程图

六、实验目的

1.学会并掌握可keil软件的使用;

2.学会并掌握Altium Designer软件的使用;

3.实现万年历的基本功能;

4.通过实验巩固单片机相关知识和检验自身动手能力

七、实验容

本次实验使用STC89C52单片机作为主控芯片,使用DS1302芯片作为时钟芯片,在LCD1602显示屏上显示,并可以设置闹钟和事件提醒功能,此外还可以进行室温湿度的检测和显示,最终完成万年历的设计。

八、实验步骤

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

2.根据功能要求进行硬件电路的设计,使用Altium Designer软件设计电路。整个电路分为主控芯片控制模块、LCD1602显示模块、按键设置模块、蜂鸣器电

路模块以及DHT11温湿度传感器模块。硬件电路图如图1所示:

图8.1:硬件电路图

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

代码如下:

#include

#define uchar unsigned char

#define uint unsigned int

#define lcddata P0

#define readalarmsecond 0xc7 //定义从 DS1302 中读闹钟秒值的命令字节#define writealarmsecond 0xc6 //定义往 DS1302 中写闹钟秒值的命令字节#define readalarmminute 0xc5 //定义从 DS1302 中读闹钟分值的命令字节#define writealarmminute 0xc4 //定义往 DS1302 中写闹钟分值的命令字节#define readalarmhour 0xc3 //定义从 DS1302 中读闹钟小时值命令字节#define writealarmhour 0xc2 //定义往 DS1302 中写闹钟小时值命令字节

#define readeventday 0xd7 //定义从 DS1302 中读事件提醒日期值的命令字节

#define writeeventday 0xd6 //定义往 DS1302 中写事件提醒日期值的命令字节

#define readeventmonth 0xd5 //定义从 DS1302 中读事件提醒月份值的命令字节

#define writeeventmonth 0xd4 //定义往 DS1302 中写事件提醒月份值的命令字节

#define readeventyear 0xd3 //定义从 DS1302 中读事件提醒年份值的命令字节

#define writeeventyear 0xd2 //定义往 DS1302 中写事件提醒年份值的命

令字节

sbit lcdrs=P2^7; //LCD 数据 /命令选择端 (H/L)

sbit lcdrw=P2^6; //LCD 读/写选择端 (H/L)

sbit lcden=P2^5; //LCD 使能控制

sbit beep=P1^3; //蜂鸣器控制端

sbit DQ = P1^4; //温湿度传感器·

sbit kmenu=P3^2; //功能键

sbit kup=P3^3; //增大键

sbit kdown=P3^4; //减小键

sbit kalarm=P3^5; //闹钟查看键 Ring: 显示闹钟需要调到的时间

sbit kevent=P3^6; //事件查看键 Ding: 显示事件提醒需要调到的时间

//sbit kmode=P3^7; //切换温湿度显示

sbit dsclk=P2^2; //ds1302 的时钟信号端

sbit dsdata=P2^1; //ds1302 的数据 I/O 端

sbit dsrst=P2^0; //ds1302 的复位端

sbit ACC7=ACC^7; //定义累加器的最高和最低位。

sbit ACC0=ACC^0;

bit flagalarm,flagseta,flagset; // 分别定义闹钟响标志位,闹钟设置标志位,时间设置标志位

bit flagevent,flagsseta; // 分别定义事件提醒标志位,事件提醒设置标志位

uchar FLAG,k;

uchar temp;

uchar T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;

uchar

T_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_t emp;

uchar comdata;

uchar kmenunum,s,m,h,dd,mm,yy; //功能键被按次数的计数器 .

char second,minute,hour,year,month,day,week;

uchar inittime[7]={0x59,0x59,0x11,0x05,0x07,0x04,0x18}; //初始化后设置为:

//2018 年 7 月 5 日星期四, 11 点 59 分 59 秒,

//从左往右的数据依次是,秒,分,时,日,月,星期,年。

// 年月日星期: 2018-07-05 THU

// 时间: 11:59:59

uchar code t1[]=" - - "; //液晶固定显示部分。

uchar code t2[]=" : : ";

//各函数声明

void delay(uint z); //毫秒级延时函数。

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

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

void writedata(uchar dat); //液晶写数据函数。

void writetime(uchar add,uchar dat); // 液晶刷新时分秒。

void writenyr(uchar add,uchar dat); // 液晶刷新日期。

void writeweek(uchar week); // 液晶星期几显示函数。

void keyscan(); // 键盘扫描函数。

void dswritebyte(uchar d);// 往 DS1302 写入一个字节。

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

void dswrite(uchar add, uchar dat); // 向 DS1302 的指定地址写入一个字节

uchar dsread(uchar add); //从 DS1302 的指定地址读出一个字节

void init1302time(uchar *pClock); //DS1302 时间初始化函数

void init(); //初始化函数

void Delay_100us(uint j);//延时100us

void Delay_10us(void);//延时10us

void COM(void);

void Read_DHT11(void);

void delay(uint z) //毫秒级延时函数。

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void di() //蜂鸣器发声函数。

{

beep=0;

delay(100);

beep=1;

}

void writecom(uchar ) //液晶写命令函数。

{

lcdrs=0;// 置为写入命令

lcddata=;// 送入数据

delay(1);

lcden=1;// 拉高使能端

delay(1);

lcden=0;// 完成高脉冲

}

void writedata(uchar dat) //液晶写数据函数。

{

lcdrs=1;// 置为写入数据

lcddata=dat;// 送入数据

delay(1);

lcden=1;

delay(1);

lcden=0;

}

void writetime(uchar add,uchar dat) // 液晶刷新时分秒。

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

uchar shi,ge;

shi=dat/10;

ge=dat%10;

writecom(0x80+0x40+add);

writedata(0x30+shi);

writedata(0x30+ge);

}

void writenyr(uchar add,uchar dat) // 液晶刷新日期。

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

uchar shi,ge;

shi=dat/10;

ge=dat%10;

writecom(0x80+add);

writedata(0x30+shi);

writedata(0x30+ge);

}

void writeweek(uchar week) // 液晶星期几显示函数。

{

writecom(0x80+9); //从第一行隔十三个字符后开始写星期

switch(week)

{

case 1: writedata('M');

writedata('O');

writedata('N');

break;

case 2: writedata('T');

writedata('U');

writedata('E');

break;

case 3: writedata('W');

writedata('E');

writedata('D');

break;

case 4: writedata('T');

writedata('H');

writedata('U');

break;

case 5: writedata('F');

writedata('R');

writedata('I');

break;

case 6: writedata('S');

writedata('A');

writedata('T');

break;

case 7: writedata('S');

writedata('U');

writedata('N');

break;

}

}

void keyscan() // 键盘扫描函数。

{

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; // 清除事件提醒标志。

}

}

}

if(kmenu==0) //检测功能键。

{

delay(5);

if(kmenu==0)

{

kmenunum++; // 记录功能键按下次数。

if(flagseta==1) // 检测是否在进行闹钟设置。

if(kmenunum==4) kmenunum=1; // 因为进行闹钟设置时,只调节时分秒,所以, kmenunum 只能等于 1,2,3。

if(flagsseta==1) // 检测是否在进行事件提醒设置。

if(kmenunum==8) kmenunum=5; // 因为进行事件提醒设置时,只调节年月日,所以, kmenunum 只能等于 5,6,7

flagset=1; // 设置标志位,表示在进行各种时间设置。

while(!kmenu);

di();

switch(kmenunum) //定位光标闪烁点。

{

case 1: writecom(0x80+0x40+10); // 秒闪烁。

writecom(0x0f); // 开光标闪烁。

break;

case 2: writecom(0x80+0x40+7); // 分闪烁。

break;

case 3: writecom(0x80+0x40+4); // 时闪烁。

break;

case 4: writecom(0x80+10); //星期闪烁 .

break;

case 5: writecom(0x80+7); //日闪烁 .

break;

case 6: writecom(0x80+4); //月闪烁 .

break;

case 7: writecom(0x80+1); //年闪烁 .

break;

case 8: kmenunum=0;

writecom(0x0c); // 取消光标闪烁。

flagset=0; //取消时间调节标志。

dswrite(0x8e,0x00); /* 允许写操作 */

dswrite(0x80,second/10*16+second%10);

dswrite(0x82,minute/10*16+minute%10);

dswrite(0x84,hour/10*16+hour%10);

dswrite(0x8a,week/10*16+week%10);

dswrite(0x86,day/10*16+day%10);

dswrite(0x88,month/10*16+month%10);

dswrite(0x8c,year/10*16+year%10);

dswrite(0x8e,0x80); /* 禁止写操作 */

break;

}

}

}

if(kmenunum!=0) //只有当功能键按下时 ,才检测增大 ,减小键 . {

if(kup==0)

{

delay(5);

if(kup==0)

{

while(!kup);

di();

switch(kmenunum) //根据功能键被按下的次数,调节相应数值。

{

case 1: second++;

if(second==60)

second=0;

writetime(9,second);

writecom(0x80+0x40+10); // 因为,上面送液晶显示

break; //一次 ,光标后移一位 ,所以要将光标复位 .

case 2: minute++;

if(minute==60)

minute=0;

writetime(6,minute);

writecom(0x80+0x40+7);

break;

case 3: hour++;

if(hour==24)

hour=0;

writetime(3,hour);

writecom(0x80+0x40+4);

break;

case 4: week++;

if(week==8)

week=1;

writeweek(week);

writecom(0x80+11);

break;

case 5: day++;

if(day==32)

day=1;

writenyr(6,day);

writecom(0x80+7);

break;

case 6: month++;

if(month==13)

month=1;

writenyr(3,month);

writecom(0x80+4);

break;

case 7: year++;

if(year==100)

year=0;

writenyr(0,year);

writecom(0x80+1);

break;

}

}

}

if(kdown==0)

{

delay(5);

if(kdown==0)

{

while(!kdown);

di();

switch(kmenunum) //根据功能键被按次数调节相应数值 .

{

case 1: second--;

if(second==-1)

second=59;

writetime(9,second);

writecom(0x80+0x40+10);

break;

case 2: minute--;

if(minute==-1)

minute=59;

writetime(6,minute);

writecom(0x80+0x40+7);

break;

case 3: hour--;

if(hour==-1)

hour=23;

writetime(3,hour);

writecom(0x80+0x40+4);

break;

case 4: week--;

if(week==0)

week=7;

writeweek(week);

writecom(0x80+11);

break;

case 5: day--;

if(day==0)

day=31;

writenyr(6,day);

writecom(0x80+7);

break;

case 6: month--;

if(month==0)

month=12;

writenyr(3,month);

writecom(0x80+4);

break;

case 7: year--;

if(year==-1)

year=99;

writenyr(0,year);

writecom(0x80+1);

break;

}

}

}

}

if(kalarm==0) // 检测闹钟调节键是否按下,此条if 语句与if(kmenunum!=0)

{ // 在同一个层次。

delay(5);

if(kalarm==0)

{

flagseta=~flagseta;

while(!kalarm);

di();

if(flagseta==0) //此时,退出闹钟设置,保存各相关数值。

{

flagset=0; //清除时间设置标志,在 if(kalarm==0) 这个 if 语句writecom(0x80+0x40)中,不用 flagset=1 这条语句来设置

//flagset 标志位,因为如果进行了闹钟时间的设置就会执行前面 if(kmenunum==0) 语句中的 flagset=1 这条语句。

writedata(' '); // 清除液晶上的“ Ri闹钟调节标志。”

writedata(' ');

writecom(0x0c); //取消光标闪烁

dswrite(0x8e,0x00); /* 允许写操作 */

dswrite(writealarmsecond,second/10*16+second%10); // 往DS1302 中保存闹钟的时分秒值。

dswrite(writealarmminute,minute/10*16+minute%10);

dswrite(writealarmhour,hour/10*16+hour%10);

dswrite(0x8e,0x80); /* 禁止写操作 */

}

else //进入闹钟设置。

{

基于单片机的万年历设计

基于单片机的万年历设计 摘要 进入二十一世纪,电子技术无处不在,电子产品给我们生活带来便利的同时也改变着我们的世界。基于单片机技术的电子产品已经遍及社会的每个角落。电子万年历以其体积小,携带方便、实用,美观等优势一直占领着广阔的市场,同时也给人们的生活带来诸多方便。 本设计由硬件设计和软件设计两大部分组成。硬件设计上,以AT89C51单片机为控制核心,通过DS1302与DS18B20通信获得实时时间和实时环境温度,并将得到的数据通过1602液晶显示出来,同时通过相应的按键调整相应的值。硬件部分详细介绍了本设计所应用的各硬件接口技术和各个接口模块的功能。软件设计上,本设计采用C 语言进行软件设计,在硬件的基础上来进行各功能软件模块的编写。同时软件的设计采用模块化结构,使程序设计的逻辑关系更加简单易懂。 由于该设计用液晶为载体来显示,所以具有良好的人机交互界面与友好的操作,可以显示时间、日期、星期、温度并具有闹铃功能。 关键词:AT89C51单片机;万年历;液晶技术;DS1302;DS18B20

Design of Multifunctional digital Perpetual Calendar Based on MCU Abstract Enters for the 21st century, the electronic technology is ubiquitous, the electronic products live for us bring the convenience at the same time also to change our world.Already spread social based on the monolithic integrated circuit technology electronic products each quoin.The electronic ten thousand calendars are small by its volume, the carryhome is convenient, is practical, artistic and so on the superiority are seizing the broad market continuously, simultaneously also gives people's life to bring conveniently many. This design designs major part two by the hardware design and the software is composed.The hardware designs, take AT89C51 monolithic integrated circuit as the control core, obtains the real-time time and the real-time ambient temperature through DS1302 and the DS18B20 correspondence, and will obtain data through 1602 liquid crystal displays, simultaneously through corresponding pressed key adjustment corresponding value.The hardware part introduced in detail this design applies various hardware connection technology and each interface module function.The software designs, this design uses the C language to carry on the software design, carries on various functions software module in the hardware foundation the compilation.Simultaneously the software design uses the modular structure, makes the programming the logical relations to be simpler easy to understand. Because this design demonstrated with the liquid crystal for the carrier, therefore has the good man-machine interaction contact surface and the friendly operation, may demonstrate the time, the date, the week, the temperature and have the noisy bell function. Keywords: AT89C51 monolithic integrated circuit; Ten thousand calendars; Liquid crystal technology; DS1302; DS18B20

单片机万年历C语言程序完整

#include #include //#include "LCD1602.h" //#include "DS1302.h" #define uint unsigned int #define uchar unsigned char sbit DS1302_CLK = P1^7; //实时时钟时钟线引脚 sbit DS1302_IO = P1^6; //实时时钟数据线引脚 sbit DS1302_RST = P1^5; //实时时钟复位线引脚 sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数 sbit Set = P2^0; //模式切换键 sbit Up = P2^1; //加法按钮 sbit Down = P2^2; //减法按钮 sbit out = P2^3; //立刻跳出调整模式按钮 sbit DQ = P3^0; char done,count,temp,flag,up_flag,down_flag,t_value; uchar TempBuffer[5],week_value[2]; void show_time(); //液晶显示程序 /***********1602液晶显示部分子程序****************/ //Port Definitions********************************************************** sbit LcdRs = P2^5; sbit LcdRw = P2^6; sbit LcdEn = P2^7; sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口 //内部等待函数************************************************************** unsigned char LCD_Wait(void) { LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); LcdEn=0; return DBPort; } //向LCD写入命令或数据************************************** #define LCD_COMMAND 0 // Command

基于单片机电子万年历的毕业设计说明

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 08电气(2)班指导老师:吴永 所在学院:科技学院 2011年6月30日

摘要 随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。 具体实现功能: (1)显示年月日时分秒及星期信息 (2)具有可调整日期和时间功能 (3)与即时时间同步

目录 1方案论证 (3) 1.1单片机芯片的选择方案和论证 (3) 1.2显示模块选择方案和论证 (3) 1.3时钟芯片的选择方案和论证 (4) 1.4电路设计最终方案决定 (4) 2系统的硬件设计与实现 (5) 2.1电路设计框图 (5) 2.2系统硬件概述 (5) 2.3主要单元电路的设计 (5) 2.3.1单片机主控制模块的设计 (5) 2.3.2时钟电路模块的设计 (6) 2.3.3电路原理及说明 (7) 2.3.4显示模块的设计 (8) 3系统的软件设计 (9) 3.1程序流程框图 (9) 4测试与结果分析 (11) 4.1硬件测试 (10) 4.2软件测试 (10) 4.3测试结果分析与结论 (10) 4.3.1 测试结果分析 (10) 4.3.2 测试结论 (10) 5prodeus软件仿真........................................ ..........错误!未定义书签。 5.1Proteus ISIS简介 (12) 5.2Proteus运行流程 (13) 5.3Proteus功能仿真 (13) 6课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING

目录 第一部分课程设计任务书 (1) 一、课程设计题目 (1) 二、课程设计时间 (1) 三、实训提交方式 (1) 四、设计要求 (1) 第二部分课程设计报告 (2) 一、单片机发展概况 (2) 二、MCS-51单片机系统简介 (2) 三、设计思想 (3) 四、硬件电路设计 (3) 1. 总体设计 (3) 2. 晶振电路 (4) 3. 复位电路 (4) 4. DS1302时钟电路 (5) 5. 温度采集系统电路 (5) 6. 按键调整电路 (6) 7. 闹钟提示电路 (6) 五、软件设计框图 (7) 六、程序源代码 (8) 1. 主程序 (8) 2. 温度控制程序 (11) 3. 日历设置程序 (13) 4. 时钟控制程序 (18) 5. 显示设置程序 (20) 七、结束语 (23) 八、课程设计小组分工 (23) 九、参考文献 (23)

第一部分课程设计任务书 一、课程设计题目 用中小规模集成芯片设计制作万年历。 二、课程设计时间 五天 三、实训提交方式 提交实训设计报告电子版与纸质版 四、设计要求 (1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。 (3)具有闹钟功能。 (4)能够显示环境温度,误差小于±1℃ (5)计时精度:月误差小于20秒。

第二部分课程设计报告 一、单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段: 第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。 第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。 第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。 二、MCS-51单片机系统简介 MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。8051单片机的基本性能有: ◆8位CPU; ◆布尔代数处理器,具有位寻址能力; ◆128B内部RAM,21个专用寄存器; ◆4KB内部掩膜ROM; ◆2个16位可编程二进制加1定时器/计数器; ◆32个(4×8位)双向可独立寻址的I/O口; ◆1个全双工UART(异步串行通信口); ◆5个中断源,两级中断结构; ◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz; ◆外部程序/数据存储器寻址空间均为64KB; ◆111条指令,大部分为单字节指令; ◆单一+5V电源供电,双列直插40引脚DIP封装。

51单片机万年历毕业设计论文

专科毕业设计(论文) 题目51单片机电子万年历论文 51单片机电子万年历论文 摘要: 电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。在编写程序过程中发现

以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成 了程序部分的编写。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。最后总在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。 关键词: 时钟电钟;DS1302;DS18B20;动态扫描;单片机 Abstract E-calendar day time is a very wide range of tools, increasingly popular in modern society. It can be year, month, day, Sunday, hours, minutes, seconds for time, but also has a leap year compensation to a variety of functions, and the DS1302's long life, small error. For the digital electronic calendar using an intuitive digital display can simultaneously display year, month, day, Sunday, hours, minutes, seconds, and temperature and other information, but also a time-calibration and other functions. The circuit uses AT89S52 microcontroller as the core, power consumption, low-voltage work in 3V, the voltage can choose 3 ~ 5V voltage supply. The design is based on 51 series of microcontrollers to the design of electronic calendar, you can display date information on when the minutes and seconds, and weeks, with adjustable date and time functions. At the same time in the design of the theoretical basis of the MCU and peripheral expansion of knowledge of the more comprehensive preparation. The hardware and software design, there is no good basic knowledge and practical experience will be greatly limited, each feature is required to achieve the kind of hardware, procedures, how to write, how to implement such algorithms, there is no certain foundation can not be good implementation. Found during the preparation process to the existing knowledge to complete the preparation of the task alone difficult, In the help of teachers and students to complete the program part of the preparation. Calendar of the design process in hardware and software to synchronize the design. Hardware mainly by the AT89C52 microcontroller, LED display circuit, and the tune composed of the circuit when the button. In the SCM choice I used the AT89C52 microcontroller, which is suitable for many of the more complex control applications. Monitor the use of two 7SEG-MPX8-CA and a 7SEG-MPX4-CA. 7SEG-MPX8-CA is a total

基于51单片机的万年历设计

目录 第一章绪论 (3) 第二章设计要求及设计框图 (4) 2.1 设计要求 (4) 2.2 设计框图 (4) 第三章知识要点 (4) 3.1 LMO16L液晶模块 (4) 3.1.1 LM016L引脚说明 (5) 3.1.2 控制指令 (5) 3.1.3 基于Proteus ISIS 7的液晶模块仿真 (6) 3.2 单片机A T89C51 (8) 3.2.1 主要特性 (8) 3.2.2 管脚说明 (9) 3.2.3 振荡器特性 (11) 3.2.4 芯片擦除 (11) 3.3 时钟芯片DS1302 (11) 3.3.1 DS1302的控制字节 (12) 3.3.2 数据输入输出(I/O) (12) 3.3.3 DS1302的寄存器 (12) 3.4 DS18B20数字温度传感器 (13) 3.4.1技术性能描述 (13) 3.4.2 DS18B20主要的数据部件 (14) 3.4.3 DS18B20温度处理过程 (15) 3.4.4 DS18B20的主要特性 (17) 3.4.5 DS18B20的外形和内部结构 (17) 3.4.6 DS18B20工作原理 (18) 3.4.7 DS18B20的应用电路 (21) 3.4.8 DS18B20使用中注意事项 (23) 第四章硬件设计 (24) 4.1 Proteus软件 (24) 4.1.1 Proteus软件介绍 (24) 4.1.2 功能特点 (24) 4.1.3 革命性的特点 (24) 4.1.4 基本操作 (25) 4.1.5 选择要使用的元件 (25) 4.1.6 功能模块 (26) 4.2 基于89C51的万年历与温度显示器的硬件设计 (28) 4.2.1 设计框图 (29) 4.2.2 电路原理图 (29) 4.3 元件清单 (30) 第五章软件设计 (30)

推荐-基于51单片机控制的语音报时万年历课程设计1 精品

基于51单片机控制的语音报时万年历 -----20/11/20XX SDU(WH) 一.实验要求 运用单片机及相关外设实现以下功能: 1)万年历及时钟显示 2)时间日期可调 3)可对时间进行整点报时和随机报时 二.方案分析 根据实验要求,选用STC公司的8051系列,STC12C5A16S2增强型51单片机。此单片机功能强大,具有片内EEPROM、1T分频系数、片内ADC转换器等较为实用功能,故选用此款。 实验中,对日期和时间进行显示,显示的字符数较多,故选用12864LCD屏幕。该屏幕操作较为便捷,外围电路相对简单,实用性较强。 为了实现要求中的时间日期可调,故按键是不可缺少的,所以使用了较多的按键。一方面,单片机的I/O口较为充足;另一方面,按键较多,选择的余地较大,方便编程控制。 实验中,并未要求对时间和日期进行保存和掉电续运行,所以并未添加EEPROM和DS12C887-RTC芯片。实际上,对万年历来说,这是较为重要的,但为了方便实现和编程的简单,此处并未添加,而是使用单片机的定时器控制时间,精度有差别。且上电默认时间为20XX-01-01 09:00:00 之后需要手动调整为正确时间。 要求中的语音报时功能,这里选用ISD1760芯片的模块来帮助实现。此模块通过软件模拟SPI协议控制。先将所需要的声音片段录入芯片的EEPROM区域,之后读出各段声音的地址段,然后在程序中定义出相应地址予以控制播放哪一声音片段。 三.电路硬件设计 实际效果图 四.程序代码部分

Main.h #ifndef _MAIN_H #define _MAIN_H #include "reg52.h" #include "INTRINS.H" #include "math.h" #include "string.h" #include "key.h" #include "led.h" #include "12864.h" #include "main.h" #include "isd1700.h" #include "sound.h" extern unsigned int count; extern unsigned int key_time[8]; extern unsigned char key_new; extern unsigned char key_old; extern unsigned char stop_flag; extern unsigned char key_follow[8]; extern unsigned int key_num[8]; sbit BEEP=P3^7; sbit ISD_SS=P0^7; sbit ISD_MISO=P0^4; sbit ISD_MOSI=P0^5; sbit ISD_SCLK=P0^6; extern unsigned char date_show[]; extern unsigned char time_show[]; extern unsigned char sec; extern unsigned char min; extern unsigned char hour; extern unsigned char day; extern unsigned char month; extern unsigned char year_f; extern unsigned char year_l; extern unsigned char leap_year_flag;

基于单片机的万年历时钟设计【文献综述】

毕业设计开题报告 测控技术与仪器 基于单片机的万年历时钟设计 1前言部分 在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,需要一款灵活、稳定而又功能强大的自动定时控制系统,以规范本单位的作息时间或定时控制一些设备。目前,市面上出现的一些时控设备或功能单一,或使用烦琐,或价格昂贵,总有一些不尽如人意的地方[1]。我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,17 世纪中叶, 由荷兰人C. Huygens来发明的第一个钟摆与以前任何计时装置相比, 摆钟的精确度提高了上百倍,而他随后发明的螺旋平衡弹簧,又进一步提高精度、减小体积, 导致了怀表的出现。然而再好的摆钟,其精度也只能达到每年误差不超过一秒[2]。1939年出现了利用石英晶体振动计时的石英钟, 每天误差只有千分之二秒, 到二次大战后精度提高到30 年才差一秒。很快, 测年的技术又推进到原子层面, 1948 年出现第一台原子钟, 1955年又发明了铯原子钟, 利用Cs133原子的共振频率计时,现在精度已经高达每天只差十亿分之一秒[2]。 从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,无法更大程度上的满足人们的需求。发展到现在人们广泛使用的万年历。万年历在家庭居室、学校、车站和广场使用越来越广泛,给人们的生活、学习、工作带来极大的方便[3]。电子万年历具有信息量大、直观清晰、经济实用等优点,正成为家庭、商场、公共场所等新的消费热点,具有重要的开发价值[4]。随着科技的不断发展,家用电子产品不但种类日益丰富,而且变得更加经济实用,,功能也越来越齐全,除了公历年月、日、时分秒、星期显示及闹铃外,又增加了农历、温度、24节气及l2生肖等显示。甚至还有语音报时等独特功能。再加上造型新颖别致,附带立体动感画面,

基于单片机的多功能电子万年历设计开题报告

毕业设计开题报告 1.结合毕业设计课题情况,根据所查阅的文献资料,撰写2000字左右的文献综述: 文献综述 一、本课题研究背景 单片机从20世纪70年代末出现后,以其卓越的性能,得到了广泛的应用,已经深入到各个领域。单片机芯片本身是按工业测控环境要求设计的,分为民用、工业品、军品,其中工业品和军品具有较强的适合恶劣环境的能力[1]。由于单片机本身就是一个计算机系统,因此,只要在单片机的外围适当加一些必要的扩展电路及通道接口,就可有构成各种应用系统,如控制系统、数据采集系统、自动控制系统、自动测试系统、检测监视系统、智能仪表、功能模块等[2]。单片机的应用领域十分广泛,自20世纪80年代以来,单片机的应用已经深入到工业、农业、国防、科研、机关、教育、商业以及家电、生活、娱乐、玩具等各个领域中。单片机应该在检测、控制领域中,具有以下特点:1)小巧灵活、成本化、易于产品化。2)可靠性好,适用范围广[3]。 近年来,电子钟已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来了极大的方便。随着技术的发展,人们已不再满足于钟表原先简单的计时功能,希望出现一些新的功能,诸如日历的显示、闹钟的应用等,以带来更大的方便,而所有这些,又都是以数字化的电子时钟为基础的。因此,研究实用电子时钟及其扩展应用,有着非常现实的意义,具有很大的实用价值[4]。 由于数字集成电路技术的发展和采用了先进的石英技术,现代电子钟具有走时准确、性能稳定、制作维修简单等优点,弥补了传统钟表的许多不足之处[5]。我们利用单片机技术设计制作的电子万年历, 可以很方便的由软件编程进行功能的调整和改进,使其在能够准确显示年、月、日、时间、星期的同时,还能具有很多其他的功能[6]。如设定闹钟、语音报时、阴阳历的转换、二十四节气的显示等,有一定的新颖性和实用性,同时体积小、携带方便,使用也更为方便,具有技术更新周期短、成本低、开放灵活等优点,具备一定的市场前景。这里要介绍的就是一款可满足使用者特殊要求,输出方式灵活、计时准确、性能稳定、维护方便的实用电子万年历[7]。

单片机课程设计—万年历[1]

郑州轻工业学院 软件学院 单片机与接口技术课程设计总结报告 设计题目:电子万年历 学生姓名: 系别: 专业: 班级: 学号: 指导教师: 2011年12月16日

设计题目: 电子万年历 设计任务与要求: 1、显示年月日时分秒及星期信息 2、具有可调整日期和时间功能 3、增加闰年计算功能 方案比较: 方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用 AT89C52单片机为控制中心,显示模块采用普通的共阴LED数码管,键输入采用中断实现 功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通 过按键盘开关实现对时间、日期的调整。 方案二:系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源 电路、复位电路、晶振电路等模块。主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对 时间、日期的操作。 两个方案工作原理大致相同,只有显示模块和时钟电路不同。LED数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功 能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说 要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的 应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具 有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。单片机有定时 器的功能,但时间误差较大,且需要编写时钟程序,因此采用DS1302作为时钟电路。 对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。

基于51单片机温湿度检测+电子万年历的毕业设计论文

毕业设计论文 基于51单片机温湿度检测+电子万年历的设计

[摘要]:温湿度检测是生活生产中的重要的参数。本设计为基于51单片机的温湿度检测与控制系统,采用模块化、层次化设计。用新型的智能温湿度传感器SHT10主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52RC进行数据的分析和处理,为显示提供信号,显示部分采用LCD1602液晶显示所测温湿度值。系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。 [关键字]:STC89C52RC SHT10 LCD1602 按键指示灯蜂鸣器电子万年历Based on 51 single chip microcomputer temperature and humidity detection + electronic calendar design Abstract:Temperature and humidity detection is important parameters in the production of life. This design is based on 51 single chip microcomputer temperature and humidity detection and control system, adopting modular, hierarchical design. With new type of intelligent temperature and humidity sensor SHT10 main realization about the detection of temperature, humidity, temperature humidity signal acquisition is converted into digital signals through the sensor signal, using SCM STC89C52RC for data analysis and processing, provides the signal for display, display part adopts LCD1602 LCD display the measured temperature and humidity values. Simple circuit, high integration, work stability, convenient debugging, high detection precision, has certain practical value. Key words:STC89C52RC SHT10 LCD1602 key indicator light buzzer The electronic calendar

基于单片机的数字万年历设计

论文题目: 基于单片机的数字万年历设计 完成日期: 指导教师签字: 答辩小组成员签字:

潍坊科技学院毕业论文摘要 摘要 现代工业革命代表性特征就是计算机产品出现和应用,而随着计算机技术的不断深入创新和发展,基于计算机核心技术思维模式的电子类产品,已经逐步作为人类社会生活的密不可分的重要组成部分,较为典型代表就是:有效记录时间电子类产品。本次毕业设计选题定为:基于单片机的数字万年历设计,选择AT89S52作为数字万年历的核心控制处理器,系统以串行DS1302芯片记录日历时间,AT89S52作为数字万年历的核心控制处理器,可以进行闰年补偿并且可以进行精确的计,本文所设计数字万年历的,能够满足用户对于温度的检测功能,芯片上选择具有应用广泛和功能强大的芯片,同时选择具有较强抗干扰能力的液晶显示板,作为数字万年历的用户交互界面。这种万年历具有数据读取十分方便、功能丰富、电路看起来十分的简单明了并且制作成本并不是太高等各方面的优点。因此,会有十分良好的市场前景。它可通过设计一个基于单片机的数字万年历的设计,有效解决了现在现有的产品中存在的问题,因此在推向市场的时候会具有很好的应用价值。 关键词:单片机;万年历;AT89S52;DS1302;DS18B20; I

潍坊科技学院毕业论文摘要 ABSTRACT Modern Industrial Revolution represents the characteristic is the computer products and applications, and along with the computer technology the deepening of innovation and development, based on computer the thinking patterns of the core technology of electronic products has gradually as inseparable and important component of human social life, the typical representative is: effective recording time electronics products. The graduation design topic is: Design of digital calendar based on MCU, using AT89S52 as the core of digital calendar control processor system with serial chip DS1302 calendar to record time AT89S52 as the core of digital calendar control processor can leap year compensation and accurate. In this paper, the design digital calendar, can meet the user for temperature detection function, chip selection is widely used and powerful chip, and a liquid crystal display panel having strong anti-interference ability, as the interface of the digital calendar. This calendar with data read is very convenient, feature rich, the circuit looks very simple and the manufacturing cost is not too high and the advantages. Therefore, there will be a very good market prospects. It can be through the design of a design based on single chip digital calendar, an effective solution to the problems existing in the existing product. Therefore, in pushing the market has a good application value. Key Words:SCM;calendar;DS1302;DS18B20; II

单片机万年历程序..

单片机万年历程序 #include //调用单片机头文件 #define uchar unsigned char //无符号字符型宏定义变量范围0~255 #define uint unsigned int //无符号整型宏定义变量范围0~65535 #include "eeprom52.h" #include "nongli.h" bit flag_200ms ; bit flag_100ms ; sbit beep = P3^7; //蜂鸣器定义 bit flag_beep_en; uint clock_value; //用作闹钟用的 sbit dq = P3^1; //18b20 IO口的定义 uint temperature ; //温度变量 uchar flag_nl; //农历阳历显示标志位 uchar menu_1,menu_2; uchar key_time,flag_value; //用做连加的中间变量 bit key_500ms ; uchar n_nian,n_yue,n_ri; //农历显示的函数

#include "ds1302.h" #include "lcd1602.h" /******************把数据保存到单片机内部eeprom中******************/ void write_eeprom() { SectorErase(0x2000); byte_write(0x2000, fen1); byte_write(0x2001, shi1); byte_write(0x2002, open1); byte_write(0x2058, a_a); } /******************把数据从单片机内部eeprom中读出来*****************/ void read_eeprom() { fen1 = byte_read(0x2000); shi1 = byte_read(0x2001); open1 = byte_read(0x2002); a_a = byte_read(0x2058); } /**************开机自检eeprom初始化*****************/ void init_eeprom() { read_eeprom(); //先读 if(a_a != 1) //新的单片机初始单片机内问eeprom { fen1 = 3;

相关文档
最新文档