51单片机制作万年历

51单片机制作万年历
51单片机制作万年历

万年历

一、题目要求:

1、实现目标:用液晶屏显示时间、日期、星期和温度,时间、日期可调,且可以设置闹钟。

2、所用功能:1602液晶屏,独立按键,矩阵键盘,DS18B20温度传感器,1302时钟器,蜂鸣器,定时、中断。

二、程序框图:

主程序框图

计算阳历程序图

三、程序:

;==================变量和管脚的定义=================== LCD_RW EQU P2.5

LCD_RS EQU P2.6

LCD_EN EQU P2.7 ; LCD液晶显示控制端接口

RS BIT P2.0

RW BIT P2.1

E BIT P2.2

LCD EQU P0

JIDIANQI EQU P2.3

BEER EQU P2.4

H_BIT EQU 20H

M_BIT EQU 21H

S_BIT EQU 22H

HH EQU 23H

MM EQU 24H

SS EQU 25H

HH_BIT EQU 26H

MM_BIT EQU 27H

SS_BIT EQU 28H

BUF EQU 30H ; 30H-33H保存解码结果

FLAG1 BIT F0 ;DS18B20存在标志位

DQ BIT P3.4 ;DS18B20占用的总线

TEMPER_L EQU 29H

TEMPER_H EQU 28H

ROM1 EQU 2AH

ROM2 EQU 2BH

ROM3 EQU 2CH

ROM4 EQU 2DH

ROM5 EQU 2EH

ROM6 EQU 2FH

ROM7 EQU 30H

ROM8 EQU 31H

A_BIT EQU 35H

B_BIT EQU 36H

LG EQU 45H

LG1 EQU 46H ; LCD1602液晶显示位

ORG 0000H

LJMP INTI

ORG 000BH

;===================================================

; 初始化

;=================================================== ORG 1000H

INTI:

MOV LG, #35H

MOV LG1, #34H ; LCD1602液晶显示初值

MOV TMOD, #11H ; 定时器方式1和0

MOV TH0, #4CH

MOV TL0, #B0H ; 定时器0初值,控制中断时间

MOV TH1, #D8H ;设定时1初值

MOV TL1, #F0H

MOV TCON, #50H

MAIN:

LCALL LCD_INIT

LCALL LCDSET1 ; LCD1602液晶显示初始化

SETB ET0 ; 打开定时器中断

SETB EA ; 打开总中断

SETB TR0 ; 开定时器

SETB TR1 ; 开定时器

MOV SP, #60H

MOV P1, #00H

MOV R5, #00H

MOV H_BIT, #00H

MOV M_BIT, #00H

MOV S_BIT, #00H

MOV HH_BIT, #00H

MOV MM_BIT, #00H

MOV SS_BIT, #00H

MOV HH, #00H

MOV MM, #00H

MOV SS, #00H

MOV TMOD, #01H

MOV TH0, #3CH

MOV TL0, #0B0H

MOV LCD, #01H

LCALL LCDWC

LCALL INIT_18B20 ;复位程序

LCALL GET_TEMPER ;读转换后的温度

AJMP CHANGE

MOV SP, #70H ;堆栈指针设到70H的地方

MOV R7, #10

ACALL DELAY_MS

MOV DPTR, #MSG1

CALL DISPLAY_LINE1;在第一行显示

MOV DPTR, #MSG2

CALL DISPLAY_LINE2;在第二行显示

HERE:

LCALL KEY

JMP HERE ; 按键标志,不断循环

KEY:

ORL P1, #11111111B ; 拉高独立按键

MOV A, P1

CPL A

ANL A, #0CFH

JZ KEY0 ; 若为0,跳到KEY0

LJMP KEY1

KEY0:

LJMP KEY2

KEY1:

JB P1.2, KEY2

CLR EA ; 开中断

MOV A, #02H ; 清除屏幕

ACALL LCD_CMD ; 进行LCD忙检测MOV A, #80H

LCALL LCD_CMD

MOV A, #53H

LCALL LCD_WDATA ; 查表,得到显示数

MOV A, #81H

LCALL LCD_CMD

MOV A, #51H

LCALL LCD_WDATA

MOV A, #82H

LCALL LCD_CMD

MOV A, #52H

LCALL LCD_WDATA

MOV A, #85H

LCALL LCD_CMD

MOV A, #46H

LCALL LCD_WDATA

MOV A, #86H

LCALL LCD_CMD

MOV A, #30H

LCALL LCD_WDATA

MOV A, #87H

LCALL LCD_CMD

MOV A, #37H

LCALL LCD_WDATA

MOV A, #89H

LCALL LCD_CMD

MOV A, #41H

LCALL LCD_WDATA

MOV A, #8AH

LCALL LCD_CMD

MOV A, #32H

LCALL LCD_WDATA

MOV A, #8BH

LCALL LCD_CMD

MOV A, #34H

LCALL LCD_WDATA

MOV A, #8CH

LCALL LCD_CMD

MOV A, #30H

LCALL LCD_WDATA

SETB EA ; 开中断

LJMP KEY7

D1MS:

MOV R5, #10

D1:

MOV R6, #250

DJNZ R6, $

DJNZ R5, D1

RET

;=================================================== ; 延时10MS

; 占用资源:R5, R6

;=================================================== D10MS:

MOV R5, #3

D2:

MOV R6, #200

DJNZ R6, $

DJNZ R5, D2

RET

;=================================================== ; 检测LCD控制器忙状态

; 读数据

; RS=L,RW=H,E=H,输出:D0-D7=数据

;=================================================== CHECKBUSY:

PUSH ACC

MOV P0, #0FFH

CLR LCD_RS

SETB LCD_RW

SETB LCD_EN

BUSYLOOP:

NOP

JB P0.7, BUSYLOOP

CLR LCD_EN

POP ACC

RET

;=================================================== ; 写显示数据到LCD

; RS=H,RW=L,D0-D7=数据,E=高脉冲

;=================================================== LCD_WDATA:

ACALL CHECKBUSY

; 高4字节

SETB LCD_RS

CLR LCD_RW

CLR LCD_EN

MOV P0, A

NOP

NOP

NOP

NOP

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

; 低4字节

SETB LCD_RS

CLR LCD_RW

CLR LCD_EN

NOP

NOP

NOP

NOP

ANL A, #0FH

SWAP A

MOV P0, A

NOP

NOP

NOP

NOP

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

RET

;=================================================== ; 写指令数据到LCD

; RS=L,RW=L,D0-D7=指令码,E=高脉冲

;=================================================== LCD_CMD:

ACALL CHECKBUSY

LCD_CMD_NC:

; 高4字节

CLR LCD_RS

CLR LCD_RW

CLR LCD_EN

NOP

NOP

MOV P0, A

NOP

NOP

NOP

NOP

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

; 低4字节

ANL A, #0FH

SW AP A

MOV P0, A

NOP

NOP

NOP

NOP

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

RET

;=================================================== ; 写8位指令数据到LCD

; RS=L,RW=L,D0-D7=指令码,E=高脉冲

;=================================================== LCD_CMD_8BIT:

ACALL CHECKBUSY

LCD_CMD_8BIT_NC:

CLR LCD_RS

CLR LCD_RW

CLR LCD_EN

NOP

NOP

MOV P0, A

NOP

NOP

NOP

NOP

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

RET

;===================================================

; LCD初始化设定子程序

;===================================================

LCD_INIT:

ACALL D1MS ; 延时15MS

ACALL D1MS ; 等待LCD电源稳定

ACALL D1MS

MOV A, #38H ; 16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_8BIT_NC ; 不进行LCD忙检测

ACALL D1MS

MOV A, #38H ; 16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_8BIT_NC ; 不进行LCD忙检测

ACALL D1MS

MOV A, #28H ; 16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_8BIT_NC ; 不进行LCD忙检测

ACALL D1MS

; 转4位界面

MOV A, #28H ; 16*2显示,5*7点阵,8位数据

ACALL LCD_CMD ; 不进行LCD忙检测

ACALL D1MS

MOV A, #0cH ; 显示关

ACALL LCD_CMD ; 进行LCD忙检测

ACALL D1MS

MOV A, #02H ; 清除屏幕

ACALL LCD_CMD ; 进行LCD忙检测

ACALL D1MS

MOV A, #01H ; 移动光标

ACALL LCD_CMD ; 进行LCD忙检测

ACALL D1MS

RET

;===================================================

; 显示位置与移动光标设定

;===================================================

LCDSET1:

MOV A, #01H ; 清除屏幕

ACALL LCD_CMD

ACALL D1MS

MOV A, #06H ; 移动光标(光标加1)

ACALL LCD_CMD

ACALL D1MS

MOV A, #87H ; 显示第一行左边第一位位置

ACALL LCD_CMD

ACALL D1MS

RET

;===================================================

LOOP:

LCALL EY

LCALL KEY

LCALL EYY

LJMP LOOP

;***************************时钟显示***************************************

;===================子程序=================

EY:

LCALL LOOP1

LCALL LCDSET

MOV DPTR,#TAB1

MOV A,H_BIT

LCALL DISP

MOV A,HH_BIT

LCALL DISP

MOV A,#58

MOV LCD,A

LCALL WRR

MOV A,M_BIT

LCALL DISP

MOV A,MM_BIT

LCALL DISP

MOV A,#58

MOV LCD,A

LCALL WRR

MOV A,S_BIT

LCALL DISP

MOV A,SS_BIT

LCALL DISP

RET

;=======BCD码转换子程序=============== LOOP1:

MOV A,SS

MOV B,#10

DIV AB

MOV S_BIT,A

MOV SS_BIT,B

MOV A,MM

MOV B,#10

DIV AB

MOV M_BIT,A

MOV MM_BIT,B

MOV A,HH

MOV B,#10

DIV AB

MOV H_BIT,A

MOV HH_BIT,B

RET

;==========中断子程序================= TIME0:

PUSH ACC

PUSH PSW

MOV TH0,#3CH

MOV TL0,#0B0H

INC R5

CJNE R5,#20,LOOP2

MOV R5,#00H

INC SS

MOV A,SS

CJNE A,#60,LOOP2

MOV SS,#00H

INC MM

MOV A,MM

CJNE A,#60,LOOP2

MOV MM,#00H

INC HH

MOV A,HH

CJNE A,#24,LOOP2

MOV HH,#00H

LOOP2:

POP PSW

POP ACC

RETI

;=====按键检测子程序==================== KEY:

clr ea

JNB P3.2,SS_KEY

KEY1:

setb ea

RET

;========秒钟调整子程序================

SS_KEY:

LCALL EY1

LCALL DIS1

JNB P3.2,SS_KEY

SSA:

LCALL EY1

JNB P3.3,S_ADDKEY

JNB P3.4,S_DECKEY

LCALL DIS1

JNB P3.2,MM_KEY

JNB P3.5,KEY3

LJMP SSA

KEY3:

LJMP KEY1

;=========秒加1========================== S_ADDKEY:

lcall ey1

LCALL DIS1

JNB P3.3,S_ADDKEY

INC SS

MOV A,SS

CJNE A,#60,SS_KEY1

MOV SS,#00H

SS_KEY1:

LJMP SSA

;=========秒减1=========================

lcall ey1

LCALL DIS1

JNB P3.4,S_DECKEY

MOV A,SS

CJNE A,#00,SS_KEY2

MOV SS,#60

SS_KEY2:

DEC SS

LJMP SS_KEY1

;=========分钟调整子程序=============== MM_KEY:

LCALL EY2

LCALL DIS1

JNB P3.2,MM_KEY

MMA:

LCALL EY2

JNB P3.3,M_ADDKEY

JNB P3.4,M_DECKEY

LCALL DIS1

JNB P3.2,HH_KEY

JNB P3.5,KEY4

LJMP MMA

KEY4:

LJMP KEY1

;============分加1==================== M_ADDKEY:

lcall ey2

LCALL DIS1

JNB P3.3,M_ADDKEY

INC MM

MOV A,MM

CJNE A,#60,MM_KEY1

MOV MM,#00H

MM_KEY1:

LJMP MMA

;===========分减1==================== M_DECKEY:

lcall ey2

LCALL DIS1

JNB P3.4,M_DECKEY

MOV A,MM

CJNE A,#00,MM_KEY2

MOV MM,#60

DEC MM

LJMP MM_KEY1

;=======时钟调整子程序============== HH_KEY:

LCALL EY3

LCALL DIS1

JNB P3.2,HH_KEY HHA:

LCALL EY3

JNB P3.3,H_ADDKEY

JNB P3.4,H_DECKEY

LCALL DIS1

JNB P3.2,SSB

JNB P3.5,KEY5

LJMP HHA

KEY5:

LJMP KEY1

;==========时加1================== H_ADDKEY:

lcall ey3

LCALL DIS1

JNB P3.3,H_ADDKEY

INC HH

MOV A,HH

CJNE A,#24,HH_KEY1

MOV HH,#00H

HH_KEY1:

LJMP HHA

;==========时减1================= H_DECKEY:

lcall ey3

LCALL DIS1

JNB P3.4,H_DECKEY

MOV A,HH

CJNE A,#00,HH_KEY2

MOV HH,#24

HH_KEY2:

DEC HH

LJMP HH_KEY1

SSB:

LJMP SS_KEY

DISP:

MOVC A,@A+DPTR

MOV LCD,A

LCALL WRR

RET

;======================== LCDSET:

MOV LCD,#38H

LCALL LCDWC

MOV LCD,#06H

LCALL LCDWC

MOV LCD,#0CH

LCALL LCDWC

MOV LCD,#0C4H

LCALL LCDWC

RET

;============================ LCDWC:

CLR RS

CLR RW

CLR E

LCALL LCDBF

SETB E

RET

;=========================== WRR:

SETB RS

CLR RW

CLR E

LCALL LCDBF

SETB E

RET

;================================ LCDBF:

MOV LCD,#0FFH

CLR RS

SETB RW

CLR E

NOP

SETB E

JB LCD.7,LCDBF

RET

;================================ EYY:

MOV LCD,#80H

LCALL LCDWC

MOV DPTR,#TAB2

MOV R2,#16

MOV R1,#00H EYY1:

MOV A,R1

LCALL DISP

INC R1

DJNZ R2,EYY1

RET

;========================== EY1:

MOV LCD,#0C4H

LCALL LCDWC

MOV R4,#02

EY11:

LCALL HIND

DJNZ R4,EY11

LCALL LOOP1

MOV A,S_BIT

LCALL DISP

MOV A,SS_BIT

LCALL DISP

RET

;========================== EY2:

MOV LCD,#0C4H

LCALL LCDWC

LCALL HIND

LCALL LOOP1

MOV A,M_BIT

LCALL DISP

MOV A,MM_BIT

LCALL DISP

LCALL HIND

RET

;=======================

EY3:

MOV LCD,#0C4H

LCALL LCDWC

LCALL LOOP1

MOV A,H_BIT

LCALL DISP

MOV A,HH_BIT

LCALL DISP

MOV R4,#02

EY33:

LCALL HIND

DJNZ R4,EY33

RET

;==============================

HIND:

MOV R3,#3

HIND1:

MOV A,#' '

MOV LCD,A

LCALL WRR

DJNZ R3,HIND1

RET

;==========延时程序=============

DIS1:

MOV R6,#20

DJNZ R6,$

RET

;=======段码表=====================

TAB1:

DB 30H,31h,32H,33H,34H,35H,36H,37H,38H,39H

TAB2: DB "TIM"

;******************************************************************** ; 读取数据表并将数据写入子程序

;******************************************************************** WRITE1:

MOVC A,@A+DPTR ;查表

LCALL WR_DATA

RET

;******************************************************************** ; 写数据子程序

;******************************************************************** WR_DATA:

MOV P0,A

SETB RS ;RS=1

CLR RW ;RW=0 ;准备写入数据

CLR E ;E=0 ;执行显示命令

LCALL BUSY ;判断液晶模块是否忙?

SETB E ;E=1 ;显示完成,程序停车

RET

;********************************************************************

; 写命令子程序

;******************************************************************** WR_CODE:

CLR RS ;写入控制命令的子程序

CLR RW

CLR E

LCALL BUSY

SETB E

RET

;********************************************************************

; 判断忙碌子程序

;******************************************************************** BUSY:

MOV P0,#0FFH ;判断液晶显示器是否忙的子程序

CLR RS

SETB RW

CLR E

NOP

SETB E

JB P0.7,BUSY ;如果P1.7为高电平表示忙就循环等待

RET

;****************** HEX转BCD碼****************************

hex_BCD:

mov a,hex

add a,#00h

da a

ret

;***************BCD碼转dec*********************************

bcd_dec:

mov a,bcd

mov b,#16

div ab ;a中放置十位,b中放置个位

swap a

add a,b

ret

;***************** 温度显示**************************************** common:

mov scon,#50h ;串口方式1,允许接收

mov 87h,#00h ;PCON设置(将SMOD置0,使波特率不加倍)

setb tr1 ;启动计时

;********************************************************************

;**********DS18B20复位程序*****************

INIT_18B20: ;SETB DQ ;DS18B20占用的总线

;NOP

CLR P1.0 ;二极管指示用于观察调试

CLR DQ ;DS18B20占用的总线

MOV R0,#0FBH

TSR1: DJNZ R0,TSR1 ;延时

SETB DQ

MOV R0,#25H

TSR2: ;JNB DQ ,TSR3 ;延时

DJNZ R0,TSR2

TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在

;AJMP TSR5

;TSR4: CLR FLAG1

;LJMP TSR7

TSR5: MOV R0,#06BH ;yf延时

TSR6: DJNZ R0,TSR6

;TSR7: SETB DQ ;表明不存在

SETB P1.0 ;二极管指示用于观察调试

RET

;********************设定DS18B20暂存器设定值**************

RE_CONFIG:

JB FLAG1,RE_CONFIG1

RET

RE_CONFIG1: MOV A,#0CCH ;放跳过ROM命令

LCALL WRITE_18B20

MOV A,#4EH

LCALL WRITE_18B20 ;写暂存器命令

MOV A,#00H ;报警上限中写入00H

LCALL WRITE_18B20

MOV A,#00H ;报警下限中写入00H

LCALL WRITE_18B20

MOV A,#1FH ;选择九位温度分辨率

LCALL WRITE_18B20

RET

;*****************读转换后的温度值****************

GET_TEMPER:

SETB DQ

LCALL INIT_18B20 ;yf复位

JB FLAG1,TSS2 ;yf若FLAG1位为1则跳转

RET ;若不存在则返回

TSS2: MOV A,#033H ;读ROM

LCALL WRITE_18B20

MOV A,#44H ;发出温度转换命令

LCALL WRITE_18B20

LCALL DISPLAY ;延时

LCALL INIT_18B20

MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#0BEH ;发出读温度换命令

LCALL WRITE_18B20

LCALL READ2_18B20 ;读两个字节的温度

RET

;***************写DS18B20命令程序************

WRITE_18B20:

MOV R2,#8

CLR C

WR1:

CLR DQ

MOV R3,#6 ;yf延时

DJNZ R3,$

RRC A ;yf带进位右移

MOV DQ,C ;yf象总线写一位数

MOV R3,#23 ;yf延时

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1 ;yf判断8位是否发完

SETB DQ

RET

;***********读18B20程序,读出两个字节的温度*********

READ2_18B20:CLR P1.1 ;二极管指示用于观察调试yf

MOV R4,#2 ;给2字节数,低位存在29 H,高位存在28H

MOV R1,#29H ;yf给地址初值

RE00: MOV R2,#8 ;yf给R2给一字节循环数

RE01: CLR C

SETB C

NOP

NOP

CLR DQ

NOP

单片机万年历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单片机的电子日历设计

成都电子机械高等专科学校成教院毕业设计(论文) 论文题目:基于51单片机的电子日历设计 教学点:重庆科创职业学院 指导老师:张忠雨职称:讲师 学生姓名:聂燕学号: 2011700558 专业:应用电子技术 成都电子机械高等专科学校成教院制 2012 年 3 月 9 日

成都电子机械高等专科学校成教院毕业设计(论文)任务书 题目:基于51单片机的电子日历设计 任务与要求: 通过单片机设计电子日历数码管正常显示阳历、阴历日期,显示的格式为年-月-日,利用外部按键的操作实现阳历和阴历之间的 转换,实现阴历和阳历显示的暂停、运行等功能。 时间:2011年12月15日至2012 年3月15日共12 周教学点:重庆科创职业学院 学生姓名:聂燕学号:2011700558 专业:应用电子技术 指导单位或教研室: 指导教师:张忠雨职称:讲师 成都电子机械高等专科学校成教院制

毕业设计(论文)进度计划表

摘要 设计以单片机AT89C51为核心部件的电子日历,利用74LS245作为驱动器,74LS138作为译码器使用,六个七段数码管均采用共阴极的方式,P0口作为段选码输出口,P2口作为位选码输出口。 本次设计的题目是基于单片机的电子日历设计,可以正常的显示年、月、日,还可以利用外部按键实现阴历和阳历之间的转换以及暂停等功能。电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。适用于家庭、公司、机关等众多场所。为人们的日常生活、出行安排提供了方便,成为人们日常生活中不可缺少的一部分。 本次设计可分为两部分:硬件系统、软件系统。 硬件系统包括:AT89S51单片机、74LS245驱动器、74LS138译码器、RC复位电路、+5V直流电源电路、去抖电路、动态显示扫描电路。 软件系统主要有单片机的编程构成。 关键词:单片机,日历,位码,段码,显示

基于单片机的万年历实习报告

基于单片机的万年历实习报告

————————————————————————————————作者: ————————————————————————————————日期:

桂林理工大学信息科学与工程学院“电子系统设计创新与实践” 课程设计(实习)报告 题目: 具有温湿度测量功能的万年历设计专业(方向):电子信息工程 班级:电信二班 指导老师:蒋存波

2016年3月27日 目次 1. 绪论----------------------------------------------- 1 2. 总体设计方案--------------------------------------- 2 2.1 技术方案比较----------------------------------- -- 2 2.2总体技术方案------------------------------------- 3 3.硬件系统设计---------------------------------------- 4 3.1 硬件总体原理框图--------------------------------- 4

3.2关键元件介绍-------------------------------------- 4 3.2.1 LCD602显示屏-------------------------------- 4 3.2.3 DS1302时钟芯片------------------------------ 7 3.2.2 SHT10温湿度感应器--------------------------- 9 3.3 硬件设计------------------------------------------ 10 3.3.1 复位电路设计-------------------------------- 10 3.3.2晶振电路设计-------------------------------- 10 3.3.3 时钟芯片电路设计---------------------------- 10 3.3.4 温湿度感应器模块电路设计-------------------- 11 3.3.5按键模块电路设计---------------------------- 11 3.3.6 LCD1602显示模块电路设计--------------------- 11 3.3.7 电量检测报警电路设计------------------------- 12 3.3.8 蜂鸣器报警电路设计--------------------------12 3.3.6 总体电路原理图------------------------------- 12 4. 软件系统设计------------------------------------------13 4.1 软件功能设计-------------------------------------- 13 4.2 程序设计总体方案----------------------------------13 4.2.1 总体设计思路--------------------------------- 13

基于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)

基于单片机的多功能万年历毕业论文

基于单片机的多功能万年历毕业论文 目录 1 设计任务与要求 2 方案设计与论证 2.1方案一 (3) 2.2 方案二 (4) 2.3 方案三 (4) 2.4 方案论证 (5) 3 硬件单元电路设计与参数计算 3.1 主控制系统 (6) 3.2时钟振荡电路 (7) 3.3复位电路 (8) 3.4 DS1302时钟电路 (9) 3.5按键电路 (10) 3.6 显示电路 (10) 3.7蜂鸣器电路 (11) 4 流程图与各模块的程序 4.1 流程图 (12) 4.2 部分子程序 (13) 5 电路仿真调试 5.1 总原理图 (18) 5.2 整体电路仿真图以及仿真结果分析 (19) 5.3 调试 (20) 参考文献 (21) 致谢 (22) 附录 (23) 毕业设计(论文)工作容及完成时间:

工作安排如下: 1、查阅文献,翻译英文资料,书写开题报告第1---4周 2、相关资料的获取和必要知识的学习第5---9周 3、设计系统的硬件和软件模块并调试第10--14周 4、撰写论文第15--16周 5、总结,准备答辩第17周 参考文献 [1]朱月秀冷祖祁,单片机基础(第3版):航航天大学 [2] 华成英童诗白,模拟电子技术基础(第四版):高等教育 [3}建领薛园园,零基础学单片机C语言程序设计:机械工业 [4]楼然苗光飞. 单片机课程设计指导:航航天大学 [5]凤霞. C语言程序设计教程(第二版):理工大学 [6]亮侯国锐. 单片机C语言编程与实例:人民邮电 [7]义和王敏男许宏昌余春长 . 例说5单片机(C语言版):人民邮电 [8]郭天祥编.新概念51单片机C语言教程.:电子工业,2009. [9]周兴华编.手把手教你学单片机C程序设计.:航空航天大学,2008.6. [10] 谭浩强编.C程序设计:清华大学,2008.7. 信息工程系自动化专业类 0882021班 学生(签名): 填写日期:2012 年 5 月20日 指导教师(签名): 助理指导教师(并指出所负责的部分): 信息工程系主任(签名):

基于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)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

单片机万年历程序..

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

基于单片机的电子万年历的设计文献综述

文献综述 基于单片机的电子万年历的设计 学生: 学号: 专业: 指导教师: 四川理工学院自动化与电子信息学院 二O一五年三月

前言 在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求。因此在这里,我想能不能把一些辅助功能加入钟表中。人类不断研究,不断创新纪录。发展到现在人们广泛使用的万年历。本文主要查阅近几年有关万年历的文献期刊。 诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。它可以对年、月、日、周日、时、分、秒进行计时,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。

正文 1.本课题的研究意义 低功耗实时时钟电路DS1302。它可以对年、月、日、周、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3—5V电压供电。 近些年我国开始重视电子万年历的开发与设计,但是中国电子万年历出现的问题中,许多不容乐观,如产业结构不合理、产业集中于劳动力密集行产品;技术密集型产品明显落后于发达工业国家;生产要素决定性作用正在消弱;产业能源消耗大、产出率低、环境污染严重、对自然资源破坏力大;企业总体规模偏小、技术创新能力薄弱;管理水平落后等。中国电子万年历产业发展已到了岔口;中国电子万年历产业生产企业急需选着发展方向 2.本课题国内外研究现状 当今社会,应用单片机的产品已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的足迹。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等,这些都离不开单片机。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的工程师和科学家。科技越发达,智能化的东西就越多。学习单片机是社会发展的必然需求,也是大学期间的必修课。 在国内单片机学习呈上升趋势,但是很多人学习时没有头绪,不知道从何下手。面对种类繁多的各类开发板,仿真器,让初学者无所事从,不但多花钱还多走不少弯路,学生学习单片机没有大的资金投入,能够做到少花钱多办事才是最好的。 8051系列是我们在大学课堂中学习的。因此本课题围绕8051系列单片机设计,从电路图绘制,PCB板设计,硬件焊接,程序设计,在线仿真到各项功能实现,目的在于让学生将课堂上学来的理论知识与实践相结合,提高对单片机的认识,学习专业软件的操作,熟悉制作过程,掌握一门技能,加强专业知

基于单片机C51的简单万年历设计

第十届学生科技节 -----单片机设计大赛 作品名称:万年历 专业:物联网 班级:1 指导老师:郑旭丹 组长:邓清兰学号:3112113111 组员:黄孟秋学号:3112113101

目录 一、绪论........................................... 0矚慫润厲钐瘗睞枥庑赖。 二、系统功能....................................... 0聞創沟燴鐺險爱氇谴净。 三、硬件电路....................................... 0残骛楼諍锩瀨濟溆塹籟。 3.1. 电路设计框图............................... 0酽锕极額閉镇桧猪訣锥。 3.2. 系统硬件概述............................... 1彈贸摄尔霁毙攬砖卤庑。 四、各模块功能及工作原理........................... 1謀荞抟箧飆鐸怼类蒋薔。 4.1. 单片机主控制模块的设计..................... 1厦礴恳蹒骈時盡继價骚。 4.2. LCD1602显示模块........................... 2茕桢广鳓鯡选块网羈泪。 4.3. 键盘模块................................... 5鹅娅尽損鹌惨歷茏鴛賴。 五、实现结果....................................... 8籟丛妈羥为贍偾蛏练淨。 六、系统的实用性及创新性........................... 9預頌圣鉉儐歲龈讶骅籴。 七、调节中遇到的问题及心得体会..................... 9渗釤呛俨匀谔鱉调硯錦。 八、程序设计...................................... 10铙誅卧泻噦圣骋贶頂廡。 8.1. 流程图.................................... 10擁締凤袜备訊顎轮烂蔷。 8.2. 源代码.................................... 11贓熱俣阃歲匱阊邺镓騷。 九、总结及感谢.................................... 23坛摶乡囂忏蒌鍥铃氈淚。

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

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

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

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

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;

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

基于51单片机的万年历 中文摘要 本设计万年历以AT89C51为控制中心,与温度传感器DS18B20,时钟芯片DS1302综合应用为一体,不仅能够准确显示时间、日期,闹钟设置,环境温度测量及温度高低温报警等功能。 单片机是一种集CPU、RAM、ROM、I/O接口和中断系统等于一体的器件,只需要外加电源和晶振就可实现对数字信息的处理和控制。单片机与数字万年历相结合,用于时间显示,温度测试等不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被检测数值的技术指标,从而能够大大提高产品的质量和数量。 关键词:单片机,温度传感器,C语言,液晶显示

ABSTRACT This design USES AT89C51 as calendar control center, and the temperature sensor DS18B20, the clock DS1302 chip integrated application as a whole, and not only be able to accurately display the time, date, alarm, the environment temperature measurement and high temperature, low temperature alarm functions. SCM is a collection of CPU, RAM, ROM, I/O interface and interrupt system is one of the devices, only require additional power can be used for vibration and grain is the process of digital information and control. Single-chip microcomputer and digital calendar, combining for time to show, temperature testing has not only control convenient, simple and flexible configuration advantages, and which could increase the technical index of the tested value, which can greatly improve the quality of the products and quantity. Key words:Single-chip microcomputer, Temperature Sensor,C language,Liquid crystal displ

相关文档
最新文档