基于利用时钟芯片DS1302实现万年历,1602LCD显示电子表
- 格式:doc
- 大小:2.76 MB
- 文档页数:26
电子设计大赛培训第二阶段
第**组报告
《基于利用时钟芯片DS1302实现万年历,1602LCD显示电子表》
成员姓名:*** 学号:******
成员姓名:HG**学号:******
成员姓名:*** 学号:*******
一、主要功能
1、在1602液晶上显示年、月、日、星期、时、分、秒以及实
时温度,并且实时更新显示;
2、通过按键随时调节各显示参数,分别实现光标定位、数值增大、数值减小、闹钟和温度上下限查看的功能;
3.在时间出现乱码的情况下,具有一键初始化时间的功能。二、电路图
三、实物图
1.开关模块
2、显示模块
3、at89c52模块
4、总体连接图
四、心得体会
本次设计是我们遇到过的较大的设计,所以遇到的问题也比较的多,尤其是以前没有接触过如此复杂的硬件电路以及软件编程,在软、硬件设计和调试中遇到了不少的困难,在同学的帮助才逐一克服了难题,学习到了不少的专业知识。
在整个设计过程之前,我已经在网上找了相关方面的资料,万事开始难,一开始不知道从哪里下手。后来慢慢学会分析系统,将系统模块化,各个模块可以在软件或者硬件上实现。在确保各个模块的硬件电路和与之相搭配的程序能够正常工作后在把它们组成一个系统。在今后的日子里,我会进一步加强自己的动手能力,丰富自己的知识面。
总之,这次设计给我的最大感触就是,在以后的学习中勤动脑,多动手。
附录:
1、元件清单
AT89C52一块
LCD 一个
排阻 3个
DS1302一个
DS18B20一个
开关 5个
晶振2个
瓷片电容2个, 30PF
电解电容一个,33Uf
插针若干
杜邦线若干
2、程序
#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; //实时时钟复位线引脚
sbitwireless_1 = P3^0;
sbit wireless_2=P3^1;
sbit wireless_3 = P3^2;
sbit wireless_4 = P3^3;
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; //加法按钮
sbitDown = P2^2;//减法按钮
sbit out = P2^3; //立刻跳出调整模式按钮
sbit DQ =P1^0; //温度传送数据IO口
char done,count,temp,flag,up_flag,down_flag;
uchar temp_value;//温度值
uchar TempBuffer[5],week_value[2];
void show_time(); //液晶显示程序
/***********1602液晶显示部分子程序****************/
//Port Definitions**********************************************************
sbitLcdRsﻩ= P2^5;
sbit LcdRwﻩ= P2^6;
sbitLcdEn = P2^7;
sfr DBPort = 0x80;ﻩ//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
//内部等待函数**************************************************************************
unsignedchar LCD_Wait(void)
{
ﻩLcdRs=0;
ﻩLcdRw=1;ﻩ_nop_();
LcdEn=1; _nop_();
ﻩﻩﻩﻩ
LcdEn=0;
ﻩreturnDBPort;
}//向LCD写入命令或数据************************************************************
#define LCD_COMMAND ﻩﻩ0 // Command
#define LCD_DATAﻩ 1 //Data
#defineLCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING ﻩ0x02// 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
LcdEn=0;
ﻩLcdRs=style;
LcdRw=0; ﻩ_nop_();
DBPort=input;ﻩ_nop_();//注意顺序
LcdEn=1; ﻩ_nop_();//注意顺序
ﻩLcdEn=0; ﻩ_nop_();
ﻩLCD_Wait();
}
//设置显示模式************************************************************
#define LCD_SHOW ﻩﻩ0x04 //显示开
#defineLCD_HIDEﻩ0x00 //显示关
#define LCD_CURSORﻩ0x02 ﻩ//显示光标
#define LCD_NO_CURSORﻩﻩ
0x00 //无光标
#define LCD_FLASH ﻩ0x01//光标闪动
#define LCD_NO_FLASH ﻩ0x00 //光标不闪动
void LCD_SetDisplay(unsignedchar DisplayMode)
{
ﻩLCD_Write(LCD_COMMAND, 0x08|DisplayMode);ﻩ
}
//设置输入模式************************************************************
#define LCD_AC_UP ﻩ0x02
#define LCD_AC_DOWNﻩﻩ0x00 // default
#define LCD_MOVEﻩﻩ0x01 // 画面可平移
#define LCD_NO_MOVE ﻩ0x00 //default
void LCD_SetInput(unsigned char InputMode)
{
ﻩLCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//初始化LCD************************************************************
void LCD_Initial()
{
LcdEn=0;