文档详情

综合设计实验时钟

aa****6
实名认证
店铺
DOC
477.50KB
约26页
文档ID:39218700
综合设计实验时钟_第1页
1/26

xxxxxx 设计性实验报告设计性实验报告学院 专业 班级 学年第 学期 学号姓名指导教师 课程名称实验项目名称 同组成员 实验地点实验时间 实验目的与要求: 设计智能电子钟,采用时钟芯片 DS1302 进行制作DS1302 是 DALLAS 公司推出的涓流 充电时钟芯片,内含一个实时时钟/日历和 31 字节静态 RAM,可以通过串行接口与计算机 进行通信,使得管脚数量减少实时时钟/日历电路能够计算 2100 年之前的秒、分、时、 日、星期、月、年的,具有闰年调整的能力 功能要求如下: 1) 计时:秒、分、时、天、周、月、年 2) 显示采用 lcd1602 3)定时效果要求有声光报警 4)三路以上定时输出,可任意关断 4)要求设置的定时时间具有掉电不丢失设计的思路:(设计原理、设计的方案及流程) 电路整体上由 AT89C51CPU 控制模块、LCD 显示模块、DS1302 时钟采集模块、按键 处理模块四大模块组成,以 AT89C51 为核心电路,控制 LCD 显示,具体的显示内容和方 式由软件来完成;由于有时钟和日期的调节功能需要校准电路,按键由时间闹钟切换键, 移位键,加 1 键、减 1 键,闹钟关断键五个按键组成,计时功能由 DS1302 完成,显示功 能则由 LCD1602 液晶完成。

1.电子钟的总的设计框图:AT89C51CP U 控制DS1302 时钟采 集 模块按键处理模块LCD 显示模块2.原理图3.DS1302 时钟采集模块DS1302是 DALLAS公司推出的涓流充电时钟芯片内含 6有一个实时时钟/日历和 31字节 静态 RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时 日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作DS1302芯片广脚 介绍:X1、X2为32.768KHz 晶振管脚GND 为地RST 复位脚 I/O 数据输入/输出引脚 SCLK 串行时钟 Vcc1,Vcc2电源供电管脚实时时钟复位线引脚 DS1302_SCLK 接 P2^7; 实时时钟时钟线引脚 DS1302_IO 接 P2^0; 实时时钟数据线引脚 DS1302_RST 接 P2^4; 4.按键处理模块其中,ko 为光标移位切换键、k1 为加 1 键、k2 为减 1 键、k3 为切换时间与闹钟键、k4 为 关断闹钟键与 51 的连接:k0..k7 并联接入 P1^05.LCD 显示模块液晶显示器是一种功耗极低的被动式显示器件,1602广脚介绍:D0—D7数据传送引脚, VSS 为接地线,VDD 为电源线,VEE 为 LCD 驱动电压调节,由此可以调节显示亮度。

RS 为寄存器选择信号,高电平选择数据寄存器,低电平选择指令寄存器 RW 为读写控制信号, 高电平读,低电平写EN 使能信号,读状态下高电平有效,写状态下下降沿有效RS 连 接 P2^4寄存器选择信号;RW 连接 P2^3读写控制信号线;EN 连接 P2^2使能信号线6.主程序流程图YN初始化 lcd、定时器初始化 ds1302按键扫描显示切换按下? flag=1?闹钟按键处理子程 序 Key_job1()时间按键处理子程 序 Key_job()闹钟 LCD 显示子程 序 Display1()时间 LCD 显示子程 序 Display()闹铃函数实验设备与材料:单片机开发板、万利仿真机、稳压电源、计算机、KeiluVision4 万利仿真软件 MedWinV3.0方法(或步骤 ):1、将所设计的程序通过 keil 编译并产生 hex 文件 2、通过 protues 连接原理图,并载入 hex 文件,进行软件仿真 3、protues 仿真确保无误之后,用 usb 连接开发板与计算机 4、给仿真机接上电源,并连接仿真机与开发板接口 5、打开万利仿真软件,输入测试好的程序,产生代码并装入仿真机 6、在开发板上调试观察实验现象并记录 7、调试完毕,切断仿真机电源,整理好实验仪器。

智能电子钟程序如下: #include #include #define uint unsigned int #define uchar unsigned char uchar a,miao,shi,fen,ri,yue,nian,week,key1n,temp; uchar shi1,fen1=5,shi2,fen2=2,shi3,fen3=4; uint flag; uint flag1; uint flag2; uint q; #define yh 0x80 //LCD 第一行的初始位置,因为 LCD1602 字符地址首位 D7 恒定为 1(=80) #define er 0x80+0x40 //LCD 第二行初始位置(因为第二行第一个字符位置地址是 0x40) //液晶屏的与 C51 之间的引脚连接定义(显示数据线接 C51 的 P0 口) sbit rs=P2^4; //寄存器选择 sbit en=P2^2; //下降沿使能 sbit rw=P2^3; //读写信号线 //DS1302 时钟芯片与 C51 之间的引脚连接定义 sbit Key_Input=P1^0; sbit LEDCLK=P3^4; sbit LEDDIN=P2^3;sbit IO=P2^0;//数据线 sbit SCLK=P2^7; sbit RST=P2^4; sbit ACC0=ACC^0; sbit ACC7=ACC^7; uchar keytemp=0; uchar keyval=0; uchar keyback; int t; bit keyup; //ACC 累加器=A //ACC.0=E0H //校时按键与 C51 的引脚连接定义 sbit buzzer=P1^2;//蜂鸣器,端口低电平响 uchar code tab1[]={“20 - - “}; //年显示的固定字符 uchar code tab2[]={“ : : “};//时间显示的固定字符 //延时函数,后面经常调用 void delay(uint xms)//延时函数,有参函数 { uint x,y; for(x=xms;x>0;x--)for(y=120;y>0;y--); } void write_1602com(uchar com)//****液晶写入指令函数**** { rs=0;//数据/指令选择置为指令 rw=0; //读写选择置为写 P0=com;//送入数据 delay(1); en=1;//拉高使能端,为制造有效的下降沿做准备 delay(1); en=0;//en 由高变低,产生下降沿,液晶执行命令 } void write_1602dat(uchar dat)//***液晶写入数据函数**** { rs=1;//数据/指令选择置为数据 rw=0; //读写选择置为写 P0=dat;//送入数据 delay(1); en=1; //en 置高电平,为制造下降沿做准备 delay(1); en=0; //en 由高变低,产生下降沿,液晶执行命令 }void lcd_init()//***液晶初始化函数**** { write_1602com(0x38);//设置液晶工作模式,意思:16*2 行显示,5*7 点阵,8 位数据 write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移 write_1602com(0x01);//清显示 write_1602com(yh+1);//日历显示固定符号从第一行第 1 个位置之后开始显示 for(a=0;a0;a--) {IO=ACC0;SCLK=0; //产生上升沿写入数据,从低位写入SCLK=1;ACC=ACC>>1; } } uchar read_byte()//读一个字节 { RST=1; for(a=8;a>0;a--) {ACC7=IO;SCLK=1; //产生下降沿输出数据,先输出低位,保存到 ACC 中SCLK=0;ACC=ACC>>1; } return (ACC); } void write_1302(uchar add,uchar dat)//向 1302 芯片写函数,指定写入地址,数据{ RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0; } uchar read_1302(uchar add)//从 1302 读数据函数,指定读取数据来源地址 { uchar temp; RST=0; SCLK=0; RST=1; write_byte(add); temp=read_byte(); SCLK=1; RST=0; return(temp); } uchar BCD_Decimal(uchar bcd)//BCD 码转十进制函数,输入 BCD,返回十进制 { uchar Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd }void ds1302_init1() //1302 芯片初始化子函数(2012-06-18,12:00:00,week7) { RST=0; SCLK=0; write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0xc0,0x04); 设置三个闹钟初值 write_1302(0xc2,0x06); write_1302(0xc4,0x04); write_1302(0xc6,0x03); write_1302(0xc8,0x02); write_1302(0xca,0x08); write_1302(0x8e,0x80); //打开写保护fen1= BCD_Decimal(read_1302(0xc1));shi1 = BCD_Decimal(read_1302(0xc3));fen2 = BCD_Decimal(read_1302(0xc5));shi2 = BCD_Decimal(read_1302(0xc7));fen3= BCD_Decimal(read_1302(0xc9));shi3=BCD_Decimal(read_1302(0xcb)); } void ds1302_init() //1302 芯片初始化子函数(2013-05-08,108:08:58,week3) { RST=0; SCLK=0; write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,0x58); //向 DS1302 内写秒寄存器 80H 写入初始秒数据 58 write_1302(0x82,0x08);//向 DS1302 内写分寄存器 82H 写入初始分数据 08 write_1302(0x84,0x08);//向 DS1302 内写小时寄存器 84H 写入初始小时数据 08 write_1302(0x8a,0x03);//向 DS1302 内写周寄存器 8aH 写入初始周数据 3 write_1302(0x86,0x08);//向 DS1302 内写日期寄存器 86H 写入初始日期数据 08 write_1302(0x88,0x05);//向 DS1302 内写月份寄存器 88H 写入初始月份数据 05 write_1302(0x8c,0x13);//向 DS1302 内写年份寄存器 8cH 写入初始年份数据 13 write_1302(0x8e,0x80); //打开写保护 } //时分秒显示子函数 void write_sfm(uchar add,uchar dat)//向 LCD 写时分秒,有显示位置加、现示数据,两个参数 { uchar gw,sw; gw=dat%10;//取得个位。

下载提示
相似文档
正为您匹配相似的精品文档