当前位置:文档之家› 单片机C语言-万年历电子钟设计报告含电路图和源程序

单片机C语言-万年历电子钟设计报告含电路图和源程序

单片机C语言-万年历电子钟设计报告含电路图和源程序
单片机C语言-万年历电子钟设计报告含电路图和源程序

万年历设计报告

学院:机械与电子工程学院班级:09通信2班

组员:李培文

一、设计要求与方案论证 (3)

1.1设计要求: (3)

1.1.1基本要求 (3)

1.1.2发挥部分 (3)

1.2 系统基本方案选择和论证 (3)

1.2.1单片机芯片的选择方案和论证: (3)

1.2.2 显示模块选择方案和论证: (4)

1.2.3时钟芯片的选择方案和论证: (4)

1.3 电路设计最终方案决定 (4)

二、理论分析与计算 (4)

2.1,秒数的产生由定时器T0产生: (4)

三.系统的硬件设计与实现 (5)

3.1 电路设计框图: (5)

3.2 系统硬件概述: (6)

3.3 主要单元电路的设计 (6)

3.3.1单片机主控制模块的设计 (6)

3.3.2显示模块的设计 (7)

3.3.3闹钟模块的设计 (9)

3.3.4电源稳压模块 (9)

四、系统的软件设计 (10)

4.1程序流程框图 (10)

4.2闹钟模块流程图: (11)

4.3按键调整模块流程图: (11)

五、测试方案与测试结果分析 (13)

5.1 测试仪器 (13)

5.2软件测试平台Keil C51 (13)

5.3 模块测试 (13)

5.3.1显示模块测试 (13)

5.4测试结果分析与结论 (14)

5.4.1测试结果分析 (14)

5.4.2 测试结论 (14)

六、作品总结 (14)

参考文献 (14)

附录一:系统电路图 (15)

附录三:系统C程序 (16)

一、设计要求与方案论证

1.1设计要求:

1.1.1基本要求

(1)准确显示:时、分、秒(24小时制)

(2)显示星期

(3)显示公历

(4)时间、日期、星期可调节

(5)断电记忆功能

1.1.2发挥部分

(1)闹钟功能

(2)显示阴历

(3)显示24节气

(4)其他

1.2 系统基本方案选择和论证

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

方案一:

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

方案二:

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

所以选择采用A T89S52作为主控制系统.

1.2.2 显示模块选择方案和论证:

方案一:

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

方案二:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,但无法显示图形文字,在显示星期是也只能用数字表示,而且采用动态扫描法与单片机连接时,在编程时比较复杂。所以也不采用了LED数码管作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,所以在此设计中采用LCD液晶显示屏.

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

方案一:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.但在,题目中明确规定不能选用不可以使用任何专用的时钟芯片和模块,因此不采用此方案。

方案二:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案可以减少芯片的使用,也可以节约成本。所以采用此方案。

1.3 电路设计最终方案决定

综上各方案所述,对此次作品的方案选定: 采用A T89S52作为主控制系统;采用单片机定时器提供时钟; 液晶显示屏作为显示。

二、理论分析与计算

2.1,秒数的产生由定时器T0产生:

T0置10ms定时初值dc00H(2^16=65536D,dc00H=56320D)

定时时间=(65536-56320)*(1/11.0592)*12=10ms (单片机晶振f0=11.0592Mhz)

用累加的方法让定时时间累加一百次即可产生一秒时间:100*10ms=1000ms=1s

2.2. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是

闰年,该年的总天数为366,否则,为355。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

2.3 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。

2.4. 算出输出月份的完整日历算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

5,计算某一天是星期几的算法:蔡勒(Zeller)公式

历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。即:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于5,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C 是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。)算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:

蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1

=49+[12.25]+5-40+[28.6]

=49+12+5-40+28

=54 (除以7余5)

即2049年10月1日(100周年国庆)是星期5。

三.系统的硬件设计与实现

3.1 电路设计框图:

3.2 系统硬件概述:

本电路是由A T89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V 超低压工作;显示部份LCD1602实现,能够同时显示16x02即32个字符;闹钟部分由蜂鸣器构成,蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

3.3 主要单元电路的设计

3.3.1单片机主控制模块的设计

A T89S52单片机为40引脚双列直插芯片,有四个I/O 口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O 口(P0、P1、P2、P3),每一条I/O 线都能独立地作输出或输入。 单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图-1 所示

A T89S52

主控制 模 块

液晶显示模块

闹钟模块 键盘模块

图-1 主控制系统

3.3.2显示模块的设计

LCD1602液晶显示屏工业字符型液晶,能够同时显示16x02即32个字符。(16列2行),有16个引脚,通过D0~D7的8位数据端传输数据和指令,引脚图如图6-5。

图6-5LCD1602引脚示意图

LCD1602液晶显示屏引脚功能如表6-5所示:

表6-5 LCD1602引脚功能

管脚1 V

一般接地

ss

接电源(+5V)

管脚2 V

dd

管脚3 V

液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对0

比度最高

管脚4 RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择

指令寄存器

管脚5 R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写

操作。

管脚6 E E(或EN)端为使能(enable)端,下降沿使能。

底4位三态、双向数据总线0位

管脚7 DB

管脚8 DB

底4位三态、双向数据总线1位

1

管脚9 DB

2

底4位三态、双向数据总线2位

管脚10 DB

3

底4位三态、双向数据总线3位

管脚11 DB

4

高4位三态、双向数据总线4位

管脚12 DB

5

高4位三态、双向数据总线5位

管脚13 DB

6

高4位三态、双向数据总线6位

管脚14 DB

7

高4位三态、双向数据总线7位

管脚15 BLA 背光电源正极

管脚16 BLK 背光电源负极

1602液晶模块内部的控制器共有11条控制指令,如表10-14所示:

序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0

1 清显示0 0 0 0 0 0 0 0 0 1

2 光标返回0 0 0 0 0 0 0 0 1 *

3 置输入模式0 0 0 0 0 0 0 1 I/D S

4 显示开/关控制0 0 0 0 0 0 1 D C B

5 光标或字符移位0 0 0 0 0 1 S/C R/L * *

6 置功能0 0 0 0 1 DL N F * *

7 置字符发生存贮器地

0 0 0 1

字符发生存贮器地址

8 置数据存贮器地址0 0 1 显示数据存贮器地址

9 读忙标志或地址0 1 BF 计数器地址

10 写数到CGRAM或

DDRAM)

1 0

要写的数据内容

11 从CGRAM或DDRAM读数 1 1 读出的数据内容

表10-14:控制命令表

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)

指令1:清显示,指令码01H,光标复位到地址00H位置。

指令2:光标复位,光标返回到地址00H。

指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。

指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:字符发生器RAM地址设置。

指令8:DDRAM地址设置。

指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:写数据。

指令11:读数据。

将lcd的引脚与单片机连接,通过单片机实现对显示的输出,电路图实现如下:

3.3.3闹钟模块的设计

闹钟模块采用蜂鸣器实现,蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。通过单片机的p3.7引脚输出的电平变化来控制蜂鸣器的导通与否,设计如下:

3.3.4电源稳压模块

方案一:LM7805稳压

方案二:USB 接口+5V

供电

四、系统的软件设计

4.1程序流程框图

开始

初始化LCD 、时间日期处理程序

允许LCD 显

示?

读取时间

LCD 显示 LCD 关闭

YES

NO

扫描按键

时间设定 闹钟设定

开始

初始化

扫描按

键4.2闹钟模块流程图:

闹钟设

数据保

返回4.3按键调整模块流程图:

五、测试方案与测试结果分析

5.1 测试仪器

序号名称作用

1 KELL 51 软件编写调试C程序并生成可烧录hex文件

2 仿真软件Proteus 对电路进行焊接前的仿真与测试

3 变压器提供5伏输出电源

4 数字万用表测试工作电源检测电路运行状况

5.2软件测试平台Keil C51

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。Keil C51工具包的整体结构,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

5.3 模块测试

5.3.1显示模块测试

出现的问题:LCD1602液晶显示屏背景灯亮但不显示内容。

解决问题:初步假设电源已经供电但单片机没有工作。用万用表测试LCD使能端6引脚和写命令选择端4引脚,均有电位变化,推出单片机已经工作。再次假设,LCD1602的显示屏对比度没调好。让电路工作,慢慢旋转变阻器,但仍无内容显示。三次假设,LCD1602某些引脚短路,经检测各引脚电平,发现6脚线路某地方与电源VCC相连,导致数据命令无法写入LCD1602显示器,导致内容无法显示,改正后,显示正常,问题解决。VCC1602MOXx01) //");

5.4测试结果分析与结论

5.4.1测试结果分析

在测试过程中遇到lcd1602显示不出来,首先使用万用表对电路进行测试,检查工作电压是否正常并查找出电路没正常工作的部分,再次检查各引脚接线情况。

5.4.2 测试结论

经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力

与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时

对所学的知识得到很大的提高与巩固.

六、作品总结

在整个设计过程中,发挥团队精神,分工合作,我吴余壮健负责电路设计,软件编程,设计报告的编写,李培文负责网上查阅相关有用资料,王文龙负责电路的焊接,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品。达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。相互学习、相互讨论、研究。完了最初的设想。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次比赛中学到了很多很多东西,这是最重要的。总之,参加电子竞赛我们的能力得到了全方位的提高。

参考文献

新概念51单片机C语言教程郭天祥编电子工业出版社2009

单片机C语言应用一百例王东锋王会良董冠强编电子工业出版社2009

杨子文编单片机原理及应用西安电子科技大学出版社2006

附录二:仿真效果图

#include

#include

unsigned char code dis_week[]={"SUN,MON,TUE,WED,THU,FRI,SAT"}; unsigned char code para_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5}; //星期月参变数

unsigned char data dis_buf1[16]; //lcd上排显示缓冲区

unsigned char data dis_buf2[16]; //lcd下排显示缓冲区

unsigned char data year,month,date,week;//年、月、日、星期

unsigned char data armhour,armmin,armsec;//闹钟时、分、秒

unsigned char data hour,min,sec,sec100; //时、分、秒、百分之一秒unsigned char data flag,vkey,skey;//设置状态计数标志、按键先前值、按键当前值

bit alarm; //标识是否启用闹钟,1--启用,0--关闭

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

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

sbit ep = P2^2; //LCD使能控制

sbit PRE = P1^6; //调整键(k3)

sbit SET = P1^7; //调整键(k4)

sbit SPK = P3^7;

void delayms(unsigned char ms); //延时程序

bit lcd_busy(); //测试LCD忙碌状态程序

void lcd_wcmd(char cmd); //写入指令到LCD程序

void lcd_wdat(char dat); //写入数据到LCD程序

void lcd_pos(char pos); //LCD数据指针位置程序

void lcd_init(); //LCD初始化设定程序

void pro_timedate(); //时间日期处理程序

void pro_display(); //显示处理程序

void pro_key(); //按键处理程序

void time_alarm(); //定时报警功能(闹钟)

unsigned char scan_key(); //按键扫描程序

unsigned char week_proc(); //星期自动计算与显示函数

bit leap_year(); //判断是否为闰年

void lcd_sef_chr(); //LCD自定义字符程序

void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s); //更新显示缓冲区函数

// 延时程序

void delay(unsigned char ms)

{ while(ms--)

{ unsigned char i;

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

{

_nop_(); //执行一条_nop_()指令为一个机器周期

_nop_();

_nop_();

_nop_();

}

}

}

//测试LCD忙碌状态

bit lcd_busy()

{

bit result;

rs = 0;

rw = 1;

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result =(bit)(P0&0x80); //LCD的D0--D7中,D7=1为忙碌,D7=0为空闲ep = 0;

return result;

}

//写入指令到LCD

void lcd_wcmd(char cmd)

{

while(lcd_busy()); //当lcd_busy为1时,再次检测LCD忙碌状态,lcd-busy 为0时,开始写指令

rs = 0;

rw = 0;

ep = 0;

_nop_();

_nop_();

P0 = cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;

}

//写入数据到LCD

void lcd_wdat(char dat)

{

while(lcd_busy()); //当lcd_busy为1时,再次检测LCD忙碌状态,lcd-busy 为0时,开始写数据

rs = 1;

rw = 0;

ep = 0;

P0 = dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;

}

//LCD数据指针位置程序

void lcd_pos(char pos)

{

lcd_wcmd(pos|0x80); //数据指针=80+地址码(00H~27H,40H~67H)

}

//设定二个自定义字符,(注意:LCD1602中自定义字符的地址为0x00--0x07,

即可定义8个字符)

//这里我们设定把一个自定义字符放在0x00位置(000),另一个放在0x01位子(001)

void lcd_sef_chr()

{ //第一个自定义字符

lcd_wcmd(0x40); //"01 000 000" 第1行地址(D7D6为地址设定命令形式 D5D4D3为字符存放位置(0--7),D2D1D0为字符行地址(0--7))lcd_wdat(0x1f); //"XXX 11111" 第1行数据(D7D6D5为XXX,表示为任意数(一般用000),D4D3D2D1D0为字符行数据(1-点亮,0-熄灭)lcd_wcmd(0x41); //"01 000 001" 第2行地址

lcd_wdat(0x11); //"XXX 10001" 第2行数据

lcd_wcmd(0x42); //"01 000 010" 第3行地址

lcd_wdat(0x15); //"XXX 10101" 第3行数据

lcd_wcmd(0x43); //"01 000 011" 第4行地址

lcd_wdat(0x11); //"XXX 10001" 第4行数据

lcd_wcmd(0x44); //"01 000 100" 第5行地址

lcd_wdat(0x1f); //"XXX 11111" 第5行数据

lcd_wcmd(0x45); //"01 000 101" 第6行地址

lcd_wdat(0x0a); //"XXX 01010" 第6行数据

lcd_wcmd(0x46); //"01 000 110" 第7行地址

lcd_wdat(0x1f); //"XXX 11111" 第7行数据

lcd_wcmd(0x47); //"01 000 111" 第8行地址

lcd_wdat(0x00); //"XXX 00000" 第8行数据

//第二个自定义字符

lcd_wcmd(0x48); //"01 001 000" 第1行地址

lcd_wdat(0x01); //"XXX 00001" 第1行数据

lcd_wcmd(0x49); //"01 001 001" 第2行地址

lcd_wdat(0x1b); //"XXX 11011" 第2行数据

lcd_wcmd(0x4a); //"01 001 010" 第3行地址

lcd_wdat(0x1d); //"XXX 11101" 第3行数据

lcd_wcmd(0x4b); //"01 001 011" 第4行地址

lcd_wdat(0x19); //"XXX 11001" 第4行数据

lcd_wcmd(0x4c); //"01 001 100" 第5行地址

lcd_wdat(0x1d); //"XXX 11101" 第5行数据

lcd_wcmd(0x4d); //"01 001 101" 第6行地址

lcd_wdat(0x1b); //"XXX 11011" 第6行数据

lcd_wcmd(0x4e); //"01 001 110" 第7行地址

lcd_wdat(0x01); //"XXX 00001" 第7行数据

lcd_wcmd(0x4f); //"01 001 111" 第8行地址

lcd_wdat(0x00); //"XXX 00000" 第8行数据

}

//LCD初始化设定

void lcd_init()

{

lcd_wcmd(0x38); //设置LCD为16X2显示,5X7点阵,八位数据借口delay(1);

lcd_wcmd(0x0c); //LCD开显示及光标设置(光标不闪烁,不显示"-") delay(1);

lcd_wcmd(0x06); //LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)

delay(1);

lcd_wcmd(0x01); //清除LCD的显示内容

delay(1);

}

//闰年的计算

bit leap_year()

{

bit leap;

if((year%4==0&&year%100!=0)||year%400==0)//闰年的条件

leap=1;

else

leap=0;

return leap;

}

//星期的自动运算和处理

unsigned char week_proc()

{ unsigned char num_leap;

unsigned char c;

num_leap=year/4-year/100+year/400;//自00年起到year所经历的闰年数if( leap_year()&& month<=2 ) //既是闰年且是1月和2月

c=5;

else

c=6;

week=(year+para_month[month]+date+num_leap+c)%7;//计算对应的星期return week;

基于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封装。

单片机万年历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

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

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

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

基于51单片机电子万年历设计

基于51单片机电子万年历设计 专业:机电设备维修与管理姓名:杜洪浦指导老师: 摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序,显示程序等。程序采用汇编语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 关键词时钟电钟,DS1302,液晶LCD1602,单片机 目录 1设计要求与方案论证 (2) 1.1 设计要求 (2) 1.2 系统基本方案选择和论证 (2) 1.2.1单片机芯片的选择方案和论证 (2) 1.2.2 显示模块选择方案和论证 (3) 1.2.3时钟芯片的选择方案和论证: (3) 1.3 电路设计最终方案决定 (3) 2系统的硬件设计与实现 (3) 2.1 电路设计框图 (4) 2.2 系统硬件概述 (4) 2.3 主要单元电路的设计 (4) 2.3.1单片机主控制模块的设计 (4)

基于AT89C51单片机的电子万年历的设计_课程设计报告

课程设计报告 设计名称:电子万年历设计 专业班级:自动化10101班 完成时间:2013年6月9日 报告成绩:

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

1 绪论 1.1 课题研究的背景 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89C51单片机作为核心,功耗小,能在3V 的低压工作,电压可选用3~5V电压供电。 此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 1.2课题的研究目的与意义 二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。 由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。 1.3课题解决的主要内容 本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面: (1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。 (2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。 (3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。 (4)根据设计的硬件电路,编写控制AT89C51芯片的单片机程序。 (5)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。 (6)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。 (7)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

推荐-基于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;

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

单片机课程设计 题目基于51单片机的万年历设计学生姓名 专业班级 学号 院(系) 指导教师 完成时间

目录 1课程设计的目的 (1) 2课程设计的任务与要求 (1) 2.1设计任务 (1) 2.2设计要求 (1) 3单片机发展概况 (1) 4设计原理与功能说明 (4) 4.1设计思想 (4) 4.2总体电路图 (5) 4.3时钟模块 (5) 4.4液晶显示模块 (6) 4.5按键模块 (7) 5系统测试 (7) 5.1硬件测试 (7) 5.2软件测试 (8) 6总结 (8) 参考文献 (10) 附录一:总体电路原理图 (11)

附录二:主程序 (12) 附录三:元器件清单 (26) 附录四:实物图 (27)

1课程设计的目的 1.通过制作万年历,可以对单片机这门课程更好的认识。 2.理论与实践结合,提高自己的动手能力。 3.学会与合作者更好的交流学习,共同进步和提高。 4.能够增长查阅资料的能力,视野更加开阔。 5.拓展其他学科的联系,全面发展。 6.培养自我发现问题,解决问题的能力。 2课程设计的任务与要求 2.1设计任务 1.可以去学校图书馆或者网上,搜集整理相关的资料,做好前期理论准备,为以后设计电路,看懂电路图做理论支持。 2.构想万年历电路图,并且具有可行性,画出电路图。 3.列举电路所需的电子元件,仔细对比所需的元件的参数,通过去电子元件经销商或者网购购买。 2.2设计要求 1.显示年、月、日、时、分、秒。 2.可通过键盘自动调整时间。 3.计时精度:月误差小于20秒。 3单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段:第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有8 位CPU,并行I/O 端口、8 位时序同步计数器,寻址范围4KB,但是没有串行口。

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

单片机课程设计报告 万年历的设计

基于51单片机的万年历 摘要: 电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LCD显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用了1602液晶显示,并且使用蜂鸣器实现了整点报警的功能,温度测试的功能实现使用了DS18B20,并实现了温度过高或过低时的温度报警。 软件方面主要包括日历程序、时间调整程序,显示程序等。程序采用C语言编写。所有程序编写完成后,在KeilC51软件中进行调试,

确定没有问题后,在Proteus软件中嵌入单片机内进行仿真,并最终实现基本要求。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 一、设计要求 基本要求: 1,8 个数码管上显示,显示时间的格式为(假如当前时间是19:32:20)“19-32-20”; 2,具有日历功能; ③时间可以通过按键调整。 发挥部分: ④具有闹钟功能(可以设定多个)。 二:总体设计 电路设计框图

基于单片机的万年历设计毕业设计

目录 摘要...................................................................... I Abstract ................................................................. II 第1章绪论.. (1) 1.1 课题背景和意义 (1) 1.2 课题的主要内容 (2) 第2章系统总体方案设计 (3) 2.1 单片机的选择 (3) 2.2 显示模块的方案选择 (3) 2.3 时钟芯片的选择方案 (3) 2.4 键盘的选择 (4) 2.5 最终方案的选择 (4) 第3章万年历系统硬件设计 (6) 3.1 电路设计框图 (6) 3.2 各模块硬件电路设计 (6) 3.2.1 晶振电路模块的设计 (6) 3.2.2 复位电路模块的设计 (7) 3.2.3 单片机的控制模块 (7) 3.2.4 DS1302时钟电路 (11) 3.2.5 LCD12864液晶显示电路 (13) 3.2.6 键盘模块设计 (15) 第4章万年历系统软件设计 (17) 4.1 主程序模块 (17) 4.2 LCD12864显示程序 (18) 4.3 DS1302时钟程序 (19) 4.4 农历转换程序 (20) 4.5 星期自动刷新程序 (21) 4.6 时间调整程序 (22) 第5章系统调试 (24)

5.1 硬件调试 (24) 5.2 软件测试 (24) 5.3 总体调试 (25) 结论 (26) 参考文献 (27) 致谢 (28) 附录1 设计任务书 (29) 附录2 开题报告 (31) 附录3 外文翻译 (36) 附录4 程序清单 (55)

基于单片机的电子万年历设计

基于单片机的电子万年历设计 摘要:本文借助电路仿真软件Protues对基于AT89S52单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用AT89S52单片机作为主控核心,由DS1302时钟芯片提供时钟、12864LCD液晶显示屏显示。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中进行电路设计并仿真。 论文主要研究了液晶显示器LCD及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件互联及通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。 研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。关键词:单片机;DS1302;DS18B20;LCD12864 The Design Of Electronic Calender Based On MCU Abstract:This paper mainly discuss the design of electronic calender based on AT89S52 with the help of Protues.On the hardware side, the electronic calendar using AT89S52 microcontroller as the main control center, clock provided by the DS1302 clock chip , 12864LCDdot matrix LCD display. In terms of software, including calendar program, time to adjust procedures, display procedures. All programming is complete, the Keil software debugging, make sure there is no problem, in the Proteus software embedded within the simulated MCU. This article focus on liquid crystal screen LCD12864 and clock chip DS1302,temperature sensor DS18B20 which connected and communicated with Microcontroller.Several solutions will also compared with each other.On software side,calender calculation will be discussed as well. The results are as follows:as electronic calender are widely used in our daily life.It should be chip and convenient so as to win more profit.

单片机万年历程序..

单片机万年历程序 #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;

单片机课程设计报告(万年历)

v .. . .. 目录 一、摘要 (2) 二、设计任务 (4) 三、总体方案设计与论证 (4) 1、液晶显示模块 (4) 2、实时时间计算模块 (5) 3、实时环境温度采集模块 (5) 4、报警模块 (6) 5、设置模块 (6) 四、总体方案组成框图 (7) 五、系统硬件设计 (8) 1、LCD显示模块 (8) 2、实时时间计算模块 (12) 3、实时环境温度检测模块 (16) 4、报警模块 (21) 5、设置模块 (22) 六、系统软件设计 (23) 七、系统硬件电路设计 (24) 八、系统硬件PROTEUS仿真原理图 (25) 九、系统硬件仿真运行情况图 (26) 1、显示欢迎界面 (26) 2、显示实时时间 (26) 3、显示当前温度 (27) 4、时间设置 (27) 5、最高报警温度设置 (28) 6、闹钟时间设置 (28) 7、超温 (29) 8、闹钟时间到 (29) 附录一:实物图 (30) 附录二:PCB图 (32) 附录三:源程序代码 (33) 附录四:参考文献 (62) . . . 资料. .

v .. . .. 摘要 单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时显示年、月、日、时、分、秒;实时监测环境温度(可根据需要启动高温报警功能);电子闹钟。M bn 本设计采用的是AT89S52单片机,该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有8KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。 计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。 温度检测采用DALLAS公司的数字化温度传感器,该芯片采用的是独特的“一线总线”的方式与单片机进行通信,一线总线独特而且经济的特点,是用户可以轻松的组建传感器网络,为测量系统的构建引入全新的概念。实时温度采用一线总线的方式传输大大的提高了信号的抗干扰性,分辨率可通过软件设置,其小巧的体积为各种环境下测量温度提供了方便。 . . . 资料. .

最新基于单片机的万年历设计

基于单片机的万年历设计 二、实验要求 设计一个万年历,将时钟显示在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个机器周期的高电平将使单片机复位。

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

单片机课程设计 姓名:吕长明 学号: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脚两个机器周期的高电平时间。

51单片机实现万年历程序文件

51单片机实现万年历 利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。 原理图: pcb图:

源程序: #include #define uint unsigned int #define uchar unsigned char sbit beep=P2^0;//蜂鸣器控制口 sbit timeadd=P2^1;//调节时间加 sbit timesub=P2^2;//调节时间减 sbit timeclk=P2^3;//闹钟设定键 sbit timefun=P2^4;//时间设定键 sbit lcdrs=P2^5;//液晶的命令和数据控制口 sbit ledrw=P2^6;//液晶的写数据口 sbit lcden=P2^7;//液晶显示模块的使能端 sbit timeds=P3^3;//时钟芯片地址闸 sbit timerw=P3^4;//时钟芯片读写 sbit timeas=P3^5;//时钟芯片地址闸 sbit timeen=P3^6;//时钟芯片片选 uchar code table[]="20 - - week "; uchar code table1[]=" : : ";//要显示的字符串 char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1; uchar leap;

void delay(uint x){ uchar i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void didi() { beep=0; delay(1000); beep=1; delay(1000); } void write_(uchar ){ lcdrs=0; P0=; delay(5); lcden=1; delay(20); lcden=0; } void write_date(uchar date){ lcdrs=1; P0=date; delay(5); lcden=1; delay(20); lcden=0; } void write_sfm(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10; write_(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } void write_nyr(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10;

单片机课程设计-万年历、数字时钟

单片机课程设计-万年历、数字时钟 采用MAX7221可以极大的节省I/O口线,同时DS1302时钟芯片可以提供精确的时间信息 汇编语言程序编写 DSRST BIT P1.0 DSCLK BIT P1.1 DSIO BIT P2.2 DIN BIT P2.5 CS BIT P2.6 CLK BIT P2.7 D158 EQU 30H D70 EQU 31H ADDRESS EQU 32h CONTENT EQU 33h COMMAND EQU 34h SECOND equ 35h MINITE equ 36h HOUR equ 37h ORG 0000H LJMP MAIN ORG 0030H MAIN: LCALL INTI7221 LCALL INTI1302

LOOP: LCALL READ1302 LCALL CONVERT LCALL DELAY LCALL DISPLAY LCALL DELAY SJMP LOOP ;DS1302初始化 INTI1302:MOV ADDRESS, #8EH MOV CONTENT, #00H LCALL SENT_BYTE MOV ADDRESS, #90H MOV CONTENT, #0A7H ;慢充电寄存器LCALL SENT_BYTE READ1302: MOV ADDRESS, #81h LCALL REV_BYTE MOV SECOND, A MOV ADDRESS, #83h LCALL REV_BYTE MOV MINITE, A MOV ADDRESS, #85h LCALL REV_BYTE MOV HOUR, A RET SENT_BYTE: CLR DSRST CLR C NOP CLR DSCLK NOP SETB DSRST MOV A, ADDRESS MOV R3, #2 MOV R2, #8 LOOP0: RRC A MOV DSIO, C SETB DSCLK NOP CLR DSCLK DJNZ R2, LOOP0 MOV A, CONTENT MOV R2, #8 DJNZ R3, LOOP0 CLR DSRST RET

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

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

相关主题
文本预览
相关文档 最新文档