文档库 最新最全的文档下载
当前位置:文档库 › 多功能电子万年历课程设计报告

多功能电子万年历课程设计报告

多功能电子万年历课程设计报告
多功能电子万年历课程设计报告

重庆三峡学院

课程设计报告书题目:基于可调的电子万年历与温度显示

学院(系):

年级专业:

学号:

学生姓名:

指导教师:

教师职称:

完成日期年月日

目录

摘要 (3)

第一章引言 (4)

1.1 设计任务 (4)

1.2 设计目的 (4)

1.3 设计思路 (4)

1.3.1 方案论证 (4)

1.3.2 芯片的选择 (5)

1.3.3 显示模块选择方案和论证 (5)

1.3.4 时钟信号的选择方案和论证 (5)

1.3.5 最终方案 (6)

第二章硬件系统的设计

2.1原理图设计 (6)

2.2温度感应电路 (7)

2.3 复位电路部分 (7)

2.4液晶显示电路 (7)

2.5时钟信号电路 (8)

2.6 AT89C52原理及说明 (8)

2.6.1引脚功能 (9)

第三章软件系统的设计.

3.1系统程序流程图 (9)

3.2系统具体程序代码 (10)

第四章系统调试 (23)

4.1 软件调试 (23)

4.2 硬件调试 (23)

第五章设计心得 (23)

元件清单表 (24)

致谢 (24)

参考文献 (24)

基于可调式电子万年历与温度显示的设计

重庆三峡学院应用技术学院 5人

摘要:本文介绍了一种基于单片机的可调的电子万年历和温度显示。该设计主要由五个模块组成:微处理器(单片机),温度传感器,控制调节按键,实时时钟模块及显示模块。温传感器器主要由DS18B20来完成,它负责把采集到的温度传给单片机。实时时钟模块主要由DS1302构成,它负责产生始终数据送给单片机,微处理器芯片AT89C52来完成DS18B20,DS1302,按键传来的数据进行处理,并送与显示模块(LCD1602)进行显示。

该系统的电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。可以测量-55°到+125°的温度和显示年,月,日,星期,时,分,秒,并且可通过按键调节时间。

关键词单片机;万年历;温度;AT89C52;LCD1602,DS1302,DS18B20

第一章引言

1.1 设计任务

(1)根据具体题目要求,设计以单片机为控制核心的测量系统或控制系统,完成对指定目标或对象的测量及控制。

(2)设计单片机与测量及控制对象的接口并进行硬件调试。

(3)针对要求测量或控制的对象完成程序的编制。

(4)硬件软件联调,完成题目所要求的功能。

(5)设计能支持时、分、秒的时钟,时钟要具有时间调整功能。

1.2 设计目的

(1)通过课程设计,使我们能够深入理解单片机系统的工作原理,接口电路的设计及调试方法,培养综合运用所学理论知识分析和解决实际问题的能力。

(2)使用AT89C51芯片的串口功能,利用实时时钟芯片DS1302与液晶显示器LCD1602和DS18D20实现年、月、星期、日、时、分、秒、温度的显示。

(3)用keil软件进行编程与调试,利用Proteus 7 Professional软件进行绘制硬件电路图且进行仿真。

1.3 设计思路

1.3.1 方案论证

单片机芯片的选择方案和论证

方案一:

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V 的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:

采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。

1.2 显示模块选择方案和论证

方案一:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。

方案二:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。

方案三:

采用LCD液晶显示来实现万年历的显示,我采用的LCD1602芯片,它可以显示16*2个字符,完全可以用于电子万年历的时间和日期的显示内容,但是LCD1602部能显示汉字,对于日期的显示可以采用数字显示的方法。

1.3 时钟芯片的选择方案和论证

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。

方案二:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。

1.4 温度显示的选择方案和论证

方案一:

直接采用的是DS18B20传感器来测试温度,这样既简单又方便,对于在短时间就可以掌握的温度传感器。

1.5最终确定芯片的选择方案和论证

综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;LCD1602液晶显示屏作为显示,DS18B20传感器作为温度测试。

1.3.2 芯片的选择

采用AT89C51芯片,其为高性能CMOS 8位单片机,该芯片内含有4k bytes的可反复擦写的只读程序存储器(PEROM)、128 bytes的随机存取数据存储器(RAM)、 32位可编程I/O 口线、2个16位定时/计数器、6个中断源、可编程串行UART通道及低功耗空闲和掉电模式。

因此,我们选用AT89C51。

1.3.3 显示模块选择方案和论证

采用LCD液晶显示,显示较为清楚直观,时间和日期在液晶显示器LCD1602中分两行来显示。

1.3.4 时钟信号的选择方案和论证

直接采实时时钟DS1302芯片来给予电子万年历的初始信号,系统直接在DS1302中读取时间和日期,并且可以修改DS1302中的初始时间和日期。时钟和日期的修改通过三个按键设置,分别为模式按键、曾量按键、减量按键。

1.3.5 最终方案

综上方案所述,对于可调的电子万年历与温度显示方案选定为:AT89C51作为主控器,DS1302作为时钟信号,LCD1602作为显示器,DS18B20作为测温器。

图1

第二章硬件系统的设计

2.1原理图设计

此次单片机数字时钟的设计采用AT89C51为主控制芯片,并由实时时钟DS1302芯片提供时钟信号,LCD液晶显示器1602提供液晶显示,温度传感器DS18B20作为温度测试。

图2

2.2温度感应电路

图3

由图3所示温度感应电路是由一个DS18B20传感器作为主要器件,采用单总线传输数据与电阻R2来线与。

2.3 复位电路部分

单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位[1]。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图6是51系列单片机统常用的上电复位电路。

图4 复位电路

2.4液晶显示电路

图5

通过图五可以看出液晶显示芯片与单片机之间的数据传输是由液晶显示的D0~D7口和

单片机的P2口来进行数据之间的传输。由于我们没有用到液晶显示器的背光所以就没有对VSS与VEE提供工作电压,由于液晶显示芯片的数据不用被单片机所读取,所以这里我们就直接给予液晶显示器读端R给予低电平这样单片机就只能对晶显示器写入数据.液晶显示器

的RS端是控制是传送数据还是传送指令直接接在单片机的P3.0口。

2.5时钟信号电路

图6

根据图6可以看出我们采用的是DS1302实时时钟芯片,这个这个芯片完全可以提供我们所设计的电子万年历的日期与时间,在使用时需提供一个32.768MHZ的晶振来给予芯片的时钟信号,实时时钟芯片它采用的是I/O总线传输。

2.6 AT89C52原理及说明

AT89C52美国Intel公司生产的低电压,高性能CHMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和蔼可亲128 bytes的随机存取数据存储器(RAM),器件采用Intel公司的高密度、非易失性存储技术生产,片内置通用4位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机适合于许多较为复杂控制应用场合。

AT89C52脚图

2.6.1引脚功能

Vcc(40):电源电压 GND(20):接地

P0口(32-39):P0口是一个8位双向I/O接口,也即地址/数据总线复用口。作为输出口用时,每位吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数据存储器时,这组口线分时转换地址(低8位)和数据总线复用。

P1口(1-8):P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”通过内部的上拉电阻把端口拉到高电平时,此时可作输入口。作为输入品使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

RST(9):复位信号输入端。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG(30):地址锁存有效信号输出端。当访问片外程序存储器或数据存储器时,ALE (地址锁存允许)输出脉冲用于锁存地址的低8位字节,一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的,要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。

XTAL1(19):振荡器反相放大器的及内部时钟发生器的输入端。

XTAL1(18):振荡器反相放大器的输出端。通过XTAL1、XTAL2外接晶振后,即可构成自激振荡器,驱动内部时钟发生器向主机提供时钟信号。

第三章软件系统的设计

DS1302、液晶显示器LCD1602、温度传感器DS18B20、和定时器T0的初始化,还有时钟的时间设定与读取、液晶的显示与按键处理等。

3.1系统程序流程图

图8

为了实现时间和日期的显示功能,需要在DS1302中读取时间和日期,并送LCD1602中显示,这样需要设计DS1302和LCD1602进行初始化程序、DS1302的时间日期的读取和修改程序、LCD1602的初始化和显示程序。另外时间和日期需要修改,则需要设计按键处理子程序。

系统主程序流程图如图所示。系统首先对LCD1602、DS1302和定时器T0初始化后,只是循环的调用按键处理子程序,检测是否需要调节时间。程序在定时器T0中断服务程序中,定时读取DS1302的时间和日期并送液晶显示。

3.2系统具体程序代码

可调的电子万年历与温度显示系统的具体程序代码如下:

(1)函数声明及变量定义

为方便程序的编写,把部分常用的变量进行伪定义。

/*********************************************

函数声明,变量定义

**********************************************/

#define uchar unsigned char /*宏定义,在下文出现uchar都表示无符号字符型*/

#define uint unsigned int /*宏定义,在下文出现uint都表示无符号整型*/

sbit rs=P3^0; /*根据系统的整体电路连接AT98C52的并行接口*/

sbit e=P3^1;

sbit io=P3^7;

sbit rst=P3^5;

sbit sck=P3^6;

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

sbit DQ=P1^7;

uchar str1[] = " - - Week: "; /* 定义一个数组名为str1的数组*/

uchar str2[] = "T : : . C"; /*因为这些是固定不变得字符,所以可以将它以一个固定的字符形式 */

uchar table2[]="0123456789 ";/*定义一个数组,里面是显示的年月日温度等字符*/ uchar table1[]="6712345 "; /*显示星期的字符*/

uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,

0x82,0x80}; /*写地址*/

uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,

0x83,0x81}; /*读地址*/

uchar init1[7]={12,5,10,26,15,46,35};//年周月日时分秒

uchar init0[7];

uchar num,sec,min,hour,dat,mon,year,week;

uint temp;

float f_temp;

(2)main():主函数

在主函数中主要是完成液晶LCD1602、实时时钟芯片DS1302、温度传感器DS18B20和定

时器T0的初始化。然后一直检测调用按键处理子程序。

/***************************************

主函数

***************************************/

void main()

{

int_t(); /*调用定时器初始化子程序*/

init_lcd(); /*调用液晶显示初始化子程序*/

init_ds18b20(); /*调用温度传感器初始化子程序*/

// set_rtc(); /*调用DS1602初始化子程序*/

while(1)

{

keycan(); /*一直循环调用按键检测*/

}

}

(3)液晶显示程序部分

在本部分主要是液晶显示所需要的子程序、显示时间日期星期等。

void write_dat(uchar dat);写数据子程序;

void write_com(uchar com);写命令子程序;

void init_lcd();液晶初始化子程序;

void pros(),液晶显示子程序;

具体程序代码如下:

1)void write_dat(uchar dat);写数据子程序;

该子程序功能为向LCD1602中写数据。写数据时,输入rs=H,R/W=L,D0~D7=数据,e=高脉冲;输出:无。

/***************************************

向LCD1602写数据

***************************************/

void write_dat(uchar dat)

{

rs=1;delay(1); /*置为写入数据*/

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

P2=dat; /*送入数据*/

e=0;delay(1); /*完成高脉冲*/

rs=0;

}

2)void write_com(uchar com);写命令子程序;

该子程序功能为向LCD中写命令字。写指令时,输入:rs=L,R/W=L,D0~D7=指令码,e=高脉冲,输出:无。

/***************************************

向LCD1602写指令

***************************************/

void write_com(uchar com)

{

rs=0;delay(1); /*置为写入命令*/

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

P2=com; /*写入数据*/

e=0;delay(1); /*完成高脉冲*/

rs=1;

}

3)void init_lcd();液晶初始化子程序;

该程序为初始化液晶,包括清楚屏幕、开显示、设置光标是否显示、是否闪烁、输入字符后光标左右移动方向、屏幕是否移动,屏幕的显示放肆是2行还是1行,字符的点阵、数据线的位数是8位还是4位,并显示不需要变动的部分。

一般情况下,设置16*2显示、5*7点阵、8位数据接口、光标左移、显示屏袶、开显示光标、不闪烁、清屏。

/***************************************

初始化lcd1602液晶

***************************************/

void init_lcd()/*液晶初始化函数*/

{

uchar i;

write_com(0X38);delay(100); /*16*2,5*7点阵,8为数据线/

write_com(0x0c); /*开始是不显示光标不闪烁*/

write_com(0x06); /*显示不移动,光标右移*/

write_com(0x01); /*清屏*/

write_com(0x80+0x00); /*第一行字符写入的位置*/

for(i=0;i<16;i++)

{

write_dat(str1[i]);

delay(5);

}

write_com(0x80+0x40); /*第二行字符写入的位置*/

for(i=0;i<16;i++)

{

write_dat(str2[i]);

delay(5);

}

}

4)void pros(),液晶显示子程序;

该程序可用于在1602对应位置显示年、月、日、时、分、秒、星期、温度。

/***************************************

1602液晶显示温度与时间

***************************************/

void pros()

{

write_com(0x80+0x40+11);

write_dat(table2[readtemperature()/100]);

write_com(0x80+0x40+12);

write_dat(table2[readtemperature()%100/10]);

write_com(0x80+0x40+14);

write_dat(table2[readtemperature()%10]);

write_com(0x80+0x40+9);

write_dat(table2[sec%10]);

write_com(0x80+0x40+8);

write_dat(table2[sec/10]);

write_com(0x80+0x40+6);

write_dat(table2[min%10]);

write_com(0x80+0x40+5);

write_dat(table2[min/10]);

write_com(0x80+0x40+3);

write_dat(table2[hour%10]);

write_com(0x80+0x40+2);

write_dat(table2[hour/10]);

write_com(0x80+7);

write_dat(table2[dat%10]);

write_com(0x80+6);

write_dat(table2[dat/10]);

write_com(0x80+4);

write_dat(table2[mon%10]);

write_com(0x80+3);

write_dat(table2[mon/10]);

write_com(0x80+14);

write_dat(table1[week%10]);

write_com(0x80+1);

write_dat(table2[year%10]);

write_com(0x80);

write_dat(table2[year/10]);

}

(4)DS1302程序部分

在本部分主要是实时时钟芯片DS1302的字节读、字节读、写对应地址数据、向对应地址写数据和初始化等,具体为:

void set_rtc();初始化DS1302;

void write_byte(uchar dat);向DS1302写一个字节;

uchar read_ds1302(uchar add) ;从DS1302的寄存器读取数据;

uchar bcd(uchar a);数据的转换;

void read_rtc();从DS1302读取数据

void write_ds1302(uchar add,uchar dat) 向DS1302的寄存器写数据

具体程序代码如下:

1)void set_rtc();初始化DS1302;

通过调用此函数完成DS1302的初始化,启动DS1302工作。

/***************************************

初始化DS1302

***************************************/

void set_rtc()

{

uchar i,j;

for(i=0;i<7;i++)

{

j=init1[i]/10;

init1[i]=init1[i]%10;

init1[i]=init1[i]+j*16;

}

write_ds1302(0x8e,0x00);

for(i=0;i<7;i++)

{

write_ds1302(write_add[i],init1[i]);

}

write_ds1302(0x8e,0x80);

}

2)void write_byte(uchar dat);向DS1302写一个字节;

该函数中,待发送数据被送入ACC寄存器,通过向右移位的方式,将ACC最低位数据通过io口发送至DS1302中,每一位数据是在时钟信号clk的下降沿接收的。

/***************************************

向DS1302写一个字节

****************************************/

void write_byte(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{

sck=0;

io=dat&0x01;

dat>>=1;

sck=1;

}

}

3)uchar read_ds1302(uchar add) ;从DS1302读一个字节;

该函数中,通过io口接受DS1302的发送数据,每一位数据是在时钟信号clk的下降沿接收的,每接受一位数据,ACC中的数据就右移一位,8位数据接受完毕后,将读取的数据返回。/***************************************

从DS1302读一个字节

***************************************/

uchar read_ds1302(uchar add)

{

uchar i,dat;

rst=0;_nop_();

sck=0;_nop_();

rst=1;_nop_();

write_byte(add);

for(i=0;i<8;i++)

{

dat>>=1;

sck=0;

if(io)

dat=dat|0x80;

sck=1;

}

rst=0;_nop_();

sck=0;_nop_();

sck=1;io=1;

return dat;

}

4)void read_rtc();从DS1302里读数据;

该函数可以完成向目的地址读出一个字节数据的功能,其中add是待读数据的地址,返回为读取的数据。

/***************************************

从DS1302里读数据

***************************************/

uchar bcd(uchar a)

{

uchar dat;

dat=a>>4;

return(dat=dat*10+(a&=0x0f));

}

void read_rtc()

{

sec=bcd(read_ds1302(0x81));

min=bcd(read_ds1302(0x83));

hour=bcd(read_ds1302(0x85));

dat=bcd(read_ds1302(0x87));

mon=bcd(read_ds1302(0x89));

week=bcd(read_ds1302(0x8b));

year=bcd(read_ds1302(0x8d));

}

5)void write_ds1302(uchar add,uchar dat) 向DS1302写数据

该函数可以完成向目的地址写入一个字节数据的功能,其中add是待写入数据的地址,dat是待写入的数据。

/***************************************

向DS1302写数据

***************************************/

void write_ds1302(uchar add,uchar dat)

{

rst=0;_nop_();

sck=0;_nop_();

rst=1;_nop_();

write_byte(add);

write_byte(dat);

rst=0;_nop_();

sck=1;io=1;

}

(5)uchar set_rtc1(uchar dat);按键处理子程序

按键处理子程序,主要是检测功能按键是否按下,按下后再检测增量键和减量键实现年、月、日、时、分、秒、星期、温度的调节作用。

/***************************************

按键检测

***************************************/

uchar set_rtc1(uchar dat)

{

uchar j;

j=dat/10*16+dat%10;

return j;

}

void keycan()

{

if(key1==0)

{

delay(10);

if(key1==0)

{

num++;

switch(num)

{

case 1: write_com(0x80+0x49);

write_ds1302(0x8e,0x00);

//write_ds1302(0x80,0x80|set_rtc1(init0[6]));

write_com(0x0f);TR0=0;

break;

case 2: write_com(0x80+0x46);break;

case 3: write_com(0x80+0x43);break;

case 4: write_com(0x80+0x0e);break;

case 5: write_com(0x80+0x07);break;

case 6: write_com(0x80+0x04);break;

case 7: write_com(0x80+0x01);break;

case 8: num=0;write_com(0x0c);

TR0=1;write_ds1302(0x8e,0x80);

//write_ds1302(0x80,0x00|set_rtc1(init0[6]));

break;

}

}

while(!key1);

}

if(num!=0)

{

if(key2==0)

{

delay(10);

if(key2==0)

{

switch(num)

{

case 1:sec++;

if(sec==60)

sec=0;

write_com(0x80+0x40+9);

write_dat(table2[sec%10]);

write_com(0x80+0x40+8);

write_dat(table2[sec/10]);

write_ds1302(0x80,set_rtc1(sec));break;

case 2:min++;

if(min==60)

min=0;

write_com(0x80+0x40+6);

write_dat(table2[min%10]);

write_com(0x80+0x40+5);

write_dat(table2[min/10]);

write_ds1302(0x82,set_rtc1(min));break;

case 3:hour++;

if(hour==24)

hour=0;

write_com(0x80+0x40+3);

write_dat(table2[hour%10]);

write_com(0x80+0x40+2);

write_dat(table2[hour/10]);

write_ds1302(0x84,set_rtc1(hour));break;

case 4:week++;

if(week==8)

week=1;

write_com(0x80+14);

write_dat(table2[week%10]);

write_ds1302(0x8a,set_rtc1(week));break;

case 5:dat++;

if(dat==32)

dat=1;

write_com(0x80+7);

write_dat(table2[dat%10]);

write_com(0x80+6);

write_dat(table2[dat/10]);

write_ds1302(0x86,set_rtc1(dat));break;

case 6:mon++;

if(mon==13)

mon=1;

write_com(0x80+4);

write_dat(table2[mon%10]);

write_com(0x80+3);

write_dat(table2[mon/10]);

write_ds1302(0x88,set_rtc1(mon));break;

case 7:year++;

if(year==100)

year=0;

write_com(0x80+1);

write_dat(table2[year%10]);

write_com(0x80+0);

write_dat(table2[year/10]);

write_ds1302(0x8c,set_rtc1(year)); break;

}

}

while(!key2);

}

if(key3==0)

{

delay(10);

if(key3==0)

{

switch(num)

{

case 1:if(sec==0)

sec=59;sec--;

write_com(0x80+0x40+9);

write_dat(table2[sec%10]);

write_com(0x80+0x40+8);

write_dat(table2[sec/10]);

write_ds1302(0x80,set_rtc1(sec));break;

case 2:if(min==0)

min=59;min--;

write_com(0x80+0x40+6);

write_dat(table2[min%10]);

write_com(0x80+0x40+5);

write_dat(table2[min/10]);

write_ds1302(0x82,set_rtc1(min));break;

case 3:if(hour==0)

hour=23;hour--;

write_com(0x80+0x40+3);

write_dat(table2[hour%10]);

write_com(0x80+0x40+2);

write_dat(table2[hour/10]);

write_ds1302(0x84,set_rtc1(hour));break;

case 4:if(week==0)

week=7;week--;

write_com(0x80+14);

write_dat(table2[week%10]);

write_ds1302(0x8a,set_rtc1(week));break;

case 5:if(dat==0)

dat=31;dat--;

write_com(0x80+7);

write_dat(table2[dat%10]);

write_com(0x80+6);

write_dat(table2[dat/10]);

write_ds1302(0x86,set_rtc1(dat));break;

case 6:if(mon==0)

mon=12;mon--;

write_com(0x80+4);

write_dat(table2[mon%10]);

write_com(0x80+3);

write_dat(table2[mon/10]);

write_ds1302(0x88,set_rtc1(mon));break;

case 7:if(year==0)

year=99;year--;

write_com(0x80+1);

write_dat(table2[year%10]);

write_com(0x80+0);

write_dat(table2[year/10]);

write_ds1302(0x8c,set_rtc1(year));break;

}

}

while(!key3);

}

}

}

(6)DS18B20程序部分

void init_ds18b20(void);初始化DS18B20

void write_byte_18b20(uchar dat) ;向DS18B20写一个字节;uchar read_byte(void) 从DS18B20;读一个字节;

uint readtemperature(void);从DS18B20里读取温度

1)void init_ds18b20(void);初始化DS18B20

/************************************

初始化DS18B20

************************************/

void init_ds18b20(void)

{

DQ=1;

delay1(4);

DQ=0;

delay1(100);

DQ=1;

delay1(40);

}

2)void write_byte_18b20(uchar dat) ;向DS18B20写一个字节;

/***************************************

向DS18B20写一个字节

***************************************/

void write_byte_18b20(uchar dat)

{

uchar i;

数字电子课设:万年历的设计

编号 北京工商大学 数字电子技术基础 《万年历的设计》 姓名 学院 班级 学号 设计时间

一、设计目的 1、熟悉集成电路的引脚安排 2、掌握芯片的逻辑功能及使用方法 3、了解数字电子钟及万年历的组成及工作原理 4、熟悉数字电子钟及万年历的设计与制作 5、熟悉multisim电子电路设计及仿真软件的应用 二、设计思路 1、设计60进制秒计数器芯片 2、设计24进制时计数器芯片 3、设计31进制天计数器芯片 4、设计12机制月计数器芯片 5、设计7进制周计数器芯片 6、设计闰年平年不同月份不同进制逻辑 三、设计过程 1、Tr_min and s 60进制计数器芯片: “秒”、“分”电路都六十进制,它由一级十进制计数器和一级六进制计数器组成,六十进制计数器的设计图如下,采用四个片74ls161N串联而成,低位芯片的抚慰信号作为下级输入信号,串接起来构成“秒”、“分”计数器芯片。

2、Tr_hour24进制计数器芯片: 24进制计数器芯片的设计图如下,时计数电路由两片74ls161串联组成。当时个位计数为4,十位计数为2时,两片74ls160N复零,从而构成24进制计数。 3、Tr_day天计数器芯片: 采用两片74ls160N和一片74ls151N串联而成,天计数器的进制受到月计数器反馈M、N影响和年计数器反馈R4的影响,在M、N不收到反馈信息的时候,天计数器为28进制,电路设计图如下:

4、Tr_week周计数器芯片: 周计数器由一块74ls161N构成一个七进制计数器,原理与秒、分、时计数器相似,电路设计图如下 5、Tr_month月计数器芯片: 采用两片74160N和两片74HC151D_2V串联而成,月计数器的反馈信息M、N影响

C++万年历实验报告

《高级语言程序设计》课程设计报告万年历程序设计

(1)课程设计名称:C++万年历设计 (2)使用工具软件:Microsoft visual C++ (3)课程设计内容简介 1、以开关语句进行执行功能的选择,这些功能分别是: A、判断闰年; B、判断某天是星期几; C、判断某年的隶属生肖; D、输出某年的日历; E、输出某月的日期; F、退出系统; 2、建立类wnl,定义类的成员函数; void isleapyear(); //判断闰年,用于输出判断结果,以流的形式bool isleap(int year); //判断闰年,返回判断结果,用于计算天数int getdays(int year,int month,int day); //获取据第一天天数 void weekdays(int year,int month,int day);//获取星期几 void printyear(int year); //输出年的日历 void printyearmonth(int year,int month); //输出某年某月的日历 void animal(int year); //判断某年的生肖 int getyear(){return Year;} //返回私有成员的值 int getmonth(){return Month;} int getday(){return Day;} 3、定义私有成员:i nt Year,Month,Day; 4、定义类的对象:_wnl; 5、为类的成员函数填写代码,满足功能实现; 6、运行环境:控制台应用程序的源程序; (4)得意之处: 1、可以满足多功能实现,可以循环执行功能; 2、可以选择每行输出的月份数; 3、有欢迎界面; 4、客户输入错误会有提示; 5、使用了C语言的流的形式,判断闰年,提高执行速度; 6、使用I/O流控制头文件iomanip.h控制月份日历的输出,更加整齐;(5)创意的技术实现

电子万年历课程设计报告

课程:创新与综合课程设计 电子与电气工程系 实践教学环节说明书 题目名称电子万年历 院(系)电子与电气工程学院 专业电子信息工程 班级119411 学号1109635010 学生姓名11 指导教师q1 起止日期13周周一~14周周五

电子万年历 一.设计目的 设计一个具有报时功能、停电正常运行(来电无需校时)、带有年月日、时分秒及星期显示的电子日历。 二.方案设计 硬件控制电路主要用了AT89S52芯片处理器、LCD1602显示器等。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及星期显示程序等组成。主控程序中对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是电子万年历中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第二个月天数不为28天,而是29天。再用公式s=v-1 +〔(y-1/4〕-〔(y-1/100〕+〔(y-1/400〕+ d计算当前显示日期是星期几,当调节日期时,星期自动的调整过来。闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。在我们的这个设计中由于只涉及100年范围内,所以判断是否闰年就只需要用该年份除4来判断就行了。 三.系统的设计框图 本系统以AT89S52单片机为核心,结合时钟芯片DS1302,LCD1602,键盘等外围器件,实现电子万年历的一系列功能,并通过液晶屏和按键控制完成人机交互的功能。系统总体设计框图如图(1)所示

万年历实验报告

篇一:电子万年历实验报告 重庆电力高等专科学校 计算机科学系 实训报告 课程名称 实验名称 班级信息0911 姓名廖林单片机应用技术电子万年历 学号 200903020243 教师任照富 日期 2010-12-28 地点一教七机房一、实训任务: 1、看实训要求,计划出自己实训所要用元件,在网上查找资料。 2、思考仿真原理图,然后画出来(具体i/o口暂时不确定)。 3、在网上找一些程序,然后自己改一些,进行编译。 4、编译无误之后,跟原理图相联系,完成最终的仿真图。 5、进行最后的改写,把程序和仿真原理图确定下来。 6、根据仿真图形,制作出实物图。 7、在实物制作过程中,进行电路检查和最后的调试。 二、实训要求: 要求:能显示阳历的年、月、日、星期、时、分、秒; 能显示阴历的年、月、日; 能进行日期、时间的调整。 扩展:能显示当前温度; 有闹钟功能(至少2个) 选择ds1302时钟芯片,温度传感器采用ds18b20数字温度传感器。 三、实训环境(软件、硬件): 软件:keil protues7.5 硬件:计算机2单片机的应用 四、实训意义:在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌的人,而数字化的钟表给人们带来了极大的方便。由于单片机具有灵活性强、成本低、功耗低、保密性好等特点,所以电子日历时钟一般都以单片机为核心,外加一些外围设备来实现。 电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历无论作为竞赛题目还是毕业设计题目都是很有价值。对于这个实验项目,我们还要有一些其他的基本知识掌握和意义:(1)在学习了《数字电子技术》和《单片机原理及接口技术》课程后,为了加 深对理论知识的理解,学习理论知识在实际中的运用,为了培养动手能力和解决实际问题的经验,了解专用时钟芯片ds1302,并会用ds1302芯片开发时钟模块,应用到其他系统中去。熟悉keil和protues软件调试程序和仿真. (2)通过实验提高对单片机的认识; (3)通过实验提高焊接、布局、电路检查能力; (4)通过实验提高软件调试能力; (5)进一步熟悉和掌握单片机的结构及工作原理。

万年历电子钟设计报告

课程设计报告课程设计名称 SOPC原理及应用专业电子科学与技术 班级电子13-1班 学号 姓名郑航 指导教师冯丽 成绩

2016年1月13日

目录 一、设计目的 (1) 二、设计内容要求 (1) 三、系统软、硬件需求分析 (1) 1. 硬件系统组成规划 (1) 2. 软件系统规划 (2) 四、设计步骤 (3) 3. 新建工程“count_binary” (3) 4. 添加ip核 (4) 5. 添加SDRAM Controller (5) 6. 添加flash (6) 7. 添加外部RAM总线(Avalon三态桥) (7) 8. 添加pio核 (7) 9. 添加cpu核 (8) 10. 添加LCD核 (9) 11. 自动分配基地址并生成系统 (9) 12. 设置顶层模块图 (10) 13. 管脚分配并编译 (11) 14. 启动Nios II IDE,新建工程 (12)

15. 导入设计程序 (12) 16. 编译工程并烧录 (13) 五、设计结果 (14) 六、源程序 (16) 1. 程序......................................... 错误!未定义书签。 2. 程序......................................... 错误!未定义书签。 3. 程序......................................... 错误!未定义书签。 4. 程序 (16) 七、实验心得 (28)

项目基于NiosII系统的电子钟设计 一、设计目的 1.掌握基本的开发流程。 2.熟悉QUARTUS II软件的使用。 3.熟悉NIOS II软件的使用。 4.掌握SOPC硬件系统的搭建和NIOSII软件编程方法。 5.掌握SOPC系统设计方法。 6.进一步了解简单的设置及其编程。 二、设计内容要求 NiosII系统的硬件设计,软件设计,该系统能实现一个电子钟功能。 三、系统软、硬件需求分析 1.硬件系统组成规划 根据系统要实现的功能和开发板配置,本项目中需要用到的Cyclone II开发板上的外围器件有: LCD:电子钟显示屏幕 按钮:电子钟设置功能键 Flash存储器:存储软、硬件程序 SRAM存储器:程序运行时将其导入SRAM 根据所用到的外设和器件特性,在SOPC Builder中建立系统要添加的模块包括:NiosII CPU定时器,按键PIO,LCD,外部RAM总线(Avalon三态桥),

Java课程设计-万年历

河北科技大学课程设计报告 号:学生姓名:学 专业班级:程序设计课程设计Java课程名称:学期学年第 2 2 015 学年学期: 2 014 — 指导教师:刘伟月年 2 0

的?.................................................................. ................................1?? 2.需求分................................................................... .........析................................1? 3.总体设计................................................................... ........................................1? 4.详细设计................................................................... ........................................1?

5.软件测试................................................................... . (10) 6.课程设计总结................................................................... ................................11. 一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。? (2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;? (3)学会自己调试程序的方法并掌握一定的技巧。 二、需求分析本程序的要求为: 1.使用图形用户界面;? 2.本程序能够实现日期与星期的查询。 ?三、总体设计(1)可以通过图形界面显示日历。? (2)能以月历形式显示日期与星期。? (3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。? ?四、详细设计1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。 ,0若是取余得几既为星期几,7使总天数除以输出月份第一天为星期几的算法:2. 则为星期日。? 3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。? 4.查询年份必须为四位有效数字,否则不予显示。 程序源代码: import import import import import import; import import import ; import ; import import import java.awt.*; import import java.text.*; import ;

万年历课程设计实验报告

百度文库- 让每个人平等地提升自我 黄淮学院 JAVA 课程设计报告 题目:《万年历》课程设计 学院:信息工程学院 专业:计算机科学与技术 班级:计科1101班 指导老师: 二0一三年六月

目录 前言 (2) 1需求分析 (2) 1.1需求分析 (2) 1.2功能设计 (3) 2.概要设计 (3) 2.1程序设计思路 (3) 3.流程图 (5) 4.程序的主要类,和说明: (6) C (17) F (18) G (18) I (19) M (19) S (19) U (20) 类分层结构 (20) 接口分层结构 (21) 前言 Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、

Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都 有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。 1需求分析 1.1需求分析 本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。 1.2功能设计 本程序要构建的万年历程序,其功能有以下几个方面: (1)实现图形界面,通过简单的单击按钮能实现查询日期操作。 (2)能以月历形式显示日期与星期。 (3)提供月份的下拉形式菜单来选择月份。 2.概要设计 2.1程序设计思路 (1)日期类的设计: 设定日期年的方法 public void changeYear(String year){ cal.set(Calendar.YEAR,Integer.parseInt(year)) ; updateCalendar();//每次修改年后,更新日期

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

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 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课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

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

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

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

电子万年历课程设计

烟台南山学院单片机课程设计题目电子万年历 姓名: 所在学院:烟台南山学院 所学专业:自动化 班级: 学号: 指导教师: 完成时间:

摘要 单片机作为当今领域应用广泛的电子器件,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本设计由单片机AT89C51芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,构成了一个单片机电子时钟。

1 绪论 (1) 2 总体方案设计与论证 (2) 2.1数字时钟方案 (2) 2.2显示方案 (3) 3 硬件系统的方案设计 (4) 3.1 系统框图 (4) 3.2 单片机的选择 (4) 3.3 时钟电路DS1302 (7) 3.4 时钟电路及复位电路 (9) 3.5 驱动电路 (9) 3.6 显示电路 (10) 3.7 按键接口 (11) 4 软件系统设计 (12) 4.1 时间信息获取程序 (12) 4.2 显示程序 (12) 5 系统调试 (13) 5.1 系统调试 (13) 5.2 时钟显示 (13) 5.3 DS1302的调试 (13) 5.4 按键电路调试 (13) 6 总结 (14) 参考文献 (15) 附录:系统程序 (16)

万年历时钟实验报告

万年历时钟设计报告 专业: 年级: 姓名: 学号: 指导老师:

万年历的设计与仿真 一、实验目的; 电子时间显示器现在在任何地方都有涉及到,例如电子表和商场、车站的时间显示等等,所以它是一种既方便又实用的技术,而我们所做的万年历则是在它的基础上做出来的,通过万年历的制作,我们可以进一步了解计数器的使用,了解各个进制之间的转换,以及他的任意进制计数器的构成方法等,并且进一步了解74LS160以及74ls90的性质,以及门电路的使用等。 二、实验要求: A. 设计一个能显示“年月日”、“星期”、“时分秒“的十进制万年历时钟显示器; B. 要求要满足一天24小时,一小时60分,一分60秒; C. 关于显示星期天时,要用8来代替; D. 年月日显示时,要满足大月31天,小月30天,闰年二月29天,平年二月28天; 三、实验器材: ISIS 仿真软件、一些常用逻辑门(与门、非门,或门等); 本实验要用到得芯片有:74ls160 74ls161 74ls160 74ls160: 74ls160是一块十进制上升沿触发计数器如右下图: 其中MR 是异步清零端,LOAD 是同步置数端 CLK 是时钟脉冲输入端;D0、D1、D2、D3是 置数输入端,Q0、Q1、Q2、Q3是计数输出端, RCO 是进位端; 74ls161与74ls160的功能基本相同,74ls160是十进制的,而74ls161是十六进制的。 异步清零端 进位端 同步置数端

置九端 74ls90: 74ls90是一块二—五—十进制计数器其图如下: 其中 2、3端为置零端,6、7端为置九端, CKB 为五进制脉冲输入端,CKA 二进制脉冲输入端, ,Q0、Q1、Q2、Q3是计数输出端; LED 七段显示器: 其功能是将BCD 码以十进制形式显示出来,其图如下: 四、万年历时钟构架图: 万年历时钟显示器需要有显示“年”、“月”、“日”、“星期”、“时”、“分” “秒”的功能,又根据它们之间的进位和置位关系 可知,它们主要有以下各部分组成,其整个电路的 框架图如下图所示: 五进制脉冲输入端 置零端 二进制脉冲输入端

多功能电子万年历课程设计

课程设计(论文) 题目名称多功能电子万年历课程设计 课程名称单片机原理及应用 2012年6月18 日

摘要 本设计基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。 关键词:AT89C51;电子万年历; DS1302

目录 1 绪论 (1) 1.1课题研究的背景 (1) 1.2课题的研究目的与意义 (1) 1.3课题解决的主要内容 (1) 2 系统的总体设计 (1) 2.1系统方案构思 (2) 2.2系统硬件框图 (2) 3 系统硬件的设计 (3) 3.1.1 器件的选用 (3) 3.1.2 AT89C51单片机 (3) 3.1.3单片机的选择 (6) 3.1.4 显示电路 (7) 3.1.5 ds1302时钟电路 (11) 4 系统软件的设计 (14) 4.1 算法设计、流程图、主程序 (14) 4.2 从1302读取日期和时间程序 (15) 5 系统仿真 (16) 5.1仿真环境PROTEUS (16) 5.2用PROTEUS ISIS对电子万年历的硬件电路设计 (16) 5.3用PROTEUS ISIS进行电子万年历的仿真测试 (20) 结论 (23) 致谢 (24) 参考文献 (25) 附录 (26) 附录1 (26)

课程设计万年历的设计52503328

课程设计万年历的设计52503328

兰州理工大学 计算机与通信学院 2014年秋季学期 面向对象课程设计 题目:万年历的设计

序言 《面向对象的程序设计》是计算机专业一门重要的专业基础课。此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,学生在下述各方面的能力应该得到锻炼: (1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。 (4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象的程序设计方法。 (6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。

目录 摘要 (2) 第一章系统总体设计 (3) 一.理论说明 (3) 二.流程图说明 (4) 1.总体流程说明图 (4) 2.部分流程说明图 (4) 第二章系统详细设计 (7) 一.主要组成部分 (7) 二.源程序 (9) 第三章系统测试 (34) 四软件使用说明书 (40) 一.系统运行环境 (40) 二.系统操作提示 (40) 总结 (41) 参考文献 (42) 致谢 (42)

接口实验报告

接口实验课程结课报告 学号、专业:控制工程 1508202024 姓名:** 报告题目:基于STM32的实时时钟设计 指导教师:潘明 所属学院:电子工程与自动化学院 成绩评定 教师签名 桂林电子科技大学研究生院 2016年6月4日

摘要 本设计以STM32F103芯片为控制核心,利用其内部的RTC设计了一个实时时钟。本系统主要由以下几个部分组成:微处理器,实时时钟模块,显示模块,调节模块。其中MCU 采用STM32F103芯片,实时时钟采用RTC实时时钟,显示模块为4.3寸的TFTLCD显示屏,采用独立按键调节。另外整个系统是在系统软件控制下工作的,能实现年、月、日、时、分、秒的实时显示及闹钟功能,并增加了温度显示。 关键字:STM32F103;实时时钟(RTC);TFTLCD显示屏

Abstract This design with STM32F103 chip as the control core, using its internal RTC design a real-time clock. The system is mainly composed of the following parts: microprocessor, real-time clock module, display module, control module. MCU using STM32F103 chip, real-time clock using RTC , display module use the 4.3 inch TFTLCD display screen, using independent buttons to adjust . In addition, the whole system is under the control of the system software,and accomplish the year, month, day, hour, minute, second real-time display and alarm clock function,and added to temperature display. Key words: STM32F103;real time clock(RTC); TFTLCD display screen

万年历C++课程设计报告

徐州师范大学科文学院本科生课程设计 课程名称:计算机程序设计实训 题目:万年历的设计 专业班级:电子信息工程08电信 学生姓名: 学生学号: 日期:2010/12/20 指导教师:姜芳艽 科文学院教务部印制

指导教师签字: 年月日

目录 摘要...................................................错误!未定义书签。 Abstract ...................错误!未定义书签。 1 绪论...................................................错误!未定义书签。 课题的设计......................................................................... 错误!未定义书签。 课题的背景……………………………………………………………………….错误!未定义书签。 课题的目的………………………………………………………………………..错误!未定义书签。 课题的意义………………………………………………………………………..错误!未定义书签。 2 设计方案简述 ..................................................... 错误!未定义书签。 设计总体规划..................................................................... 错误!未定义书签。 实现的功能………………………………………………………………………..错误!未定义书签。 结构模块分析……………………………………………………………………...错误!未定义书签。 3 详细设计 ............................................................. 错误!未定义书签。 设计思路............................................................................. 错误!未定义书签。 设计语言…………………………………………………………………………..错误!未定义书签。 设计程序流程图…………………………………………………………………..错误!未定义书签。 模块详细设计....................................................................... 错误!未定义书签。 大月和小月的定义………………………………………………………………..错误!未定义书签。 闰年与非闰年二月的定义………………………………………………………..错误!未定义书签。 日历表的输出……………………………………………………………………..错误!未定义书签。 4 设计结果及分析.................................................. 错误!未定义书签。 软件测试............................................................................... 错误!未定义书签。 设计成果............................................................................... 错误!未定义书签。 5 总结..................................................错误!未定义书签。 参考文献 ................................................................. 错误!未定义书签。

Java万年历课程设计报告

Java课程设计 设计题目:万年历 系别:计算机科学与工程学院 专业:信息管理与信息系统 学号: 1100340116 姓名:岑少兵 指导教师:汪华澄 时间: 2013-6-29

目录 摘要 (3) 系统功能结构图 (3) 1 系统模块设计 (4) 1.1 需求设计 (4) 1.2 开发和运行环境 (4) 1.3 功能设计 (4) 2 万年历详细设计思路 (4) 2.1 程序设计思路 (5) 2.2 程序运行主界面 (5) 2.3 流程图 (6) 3 各模块功能实现及代码说明 (6) 3.1 MainFramel类 (6) 3.2 Lunar类 (14) 3.3 national类 (22) 3.4 SetClock类 (26) 4 小结 (34) 5 参考文献 (34)

基于Myeclipse的万年历 摘要:万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。在万年历上添加了显示本地时间以后会更加准确地显示时间。无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。 系统功能结构图:主要描述系统要实现的各个模块的功能。

1系统模块设计 1.1需求分析 本程序的要求为:1.使用图形用户界面 2.能够实现日期与星期的查询 3.能够显示农历 4.能够查看世界时间 5.能够添加闹钟 1.2 开发和运行环境 开发工具:Myeclipse 运行环境: windows 7 1.3功能设计 本程序要构建的万年历程序,其功能有以下几个方面: (1)通过 (2)提供年份、月份的下拉形式菜单来选择年份和月份。 (3)通过Lunar类实现农历日期。 (4)通过national类实现世界时间。 (5)能以月历形式显示日期与星期。 (6)通过SetClock类来实现闹钟功能。 (7)通过点击世界时间按钮查询世界时间 (8)通过点击闹钟按钮设置闹钟 (9)显示系统当前时间和日期。 (10)显示作者信息。 2万年历详细设计思路 2.1程序设计思路 1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,

基于PIC单片机电子万年历实验报告

实验报告 姓名:文可鑫学号:20072121010 专业:电子信息工程1编写一个秒表程序,使用查询方式。 list p=16f877a include"p16f877a.inc" include count equ 20h count_s equ 21h org 000h start nop call InitSPI banksel OPTION_REG movlw 04h movwf OPTION_REG banksel INTCON movlw 00h movwf INTCON movlw 06h movwf TMR0 movlw d'131' movwf count movlw 00h movwf count_s main btfss INTCON,T0IF goto $-1 movlw 06h movwf TMR0 bcf INTCON,T0IF incf count,f btfss STATUS,Z goto main movlw d'131' movwf count incf count_s,f movf count_s,w sublw d'60' btfsc STATUS,Z clrf count_s movf count_s,w call Bin2BCD movf DIS_TEMP2,w call CHAR_CODE1

movwf DIS_TEMP2 movf DIS_TEMP1,w call CHAR_CODE1 movwf DIS_TEMP1 call LEDlight nop goto main CHAR_CODE1;共阴极字符表 ADDWF PCL,F RETLW 3fh ;0 RETLW 06h ;1 RETLW 5bh ;2 RETLW 4fh ;3 RETLW 66h ;4 RETLW 6dh ;5 RETLW 7dh ;6 RETLW 07h ;7 RETLW 7fh ;8 RETLW 6fh ;9 Bin2BCD CLRF DIS_TEMP1 MOVWF DIS_TEMP2 Ttenth MOVLW .10 SUBWF DIS_TEMP2,W BTFSS STATUS,C GOTO OUT MOVWF DIS_TEMP2 INCF DIS_TEMP1,F GOTO Ttenth OUT RETURN end 2编写一个秒表程序,使用中断方式。list p=16f877a include"p16f877a.inc" include count equ 20h count_s equ 21h W_temp equ 23H STA_temp equ 24H org 000h goto start org 004h

单片机电子万年历课程设计报告书

单片机课程设计 姓名:吕长明 学号:04040804021 专业班级:机电四班

一、单片机原理及应用简介 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术 的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工 业控制系统、数据采集系统、自动测试系统、万年历电子表等。 二、系统硬件设计 8052 是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图图1: 图1 8052引脚 P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。 8052芯片管脚说明: 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的一些特殊功能口,如表1所示: 表1 特殊功能口 P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

相关文档
相关文档 最新文档