综合设计实验时钟.doc
《综合设计实验时钟.doc》由会员分享,可在线阅读,更多相关《综合设计实验时钟.doc(26页珍藏版)》请在沃文网上搜索。
1、 xxx设计性实验报告 学院 专业 班级 学年第 学期学号姓名指导教师课程名称实验项目名称同组成员实验地点实验时间实验目的与要求:设计智能电子钟,采用时钟芯片DS1302进行制作。DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。功能要求如下:1) 计时:秒、分、时、天、周、月、年。2) 显示采用lcd1602。3)定时效果要求有声光报警。4)三路以上定时输出,可任意关断。4)要求设置的定时时间具有掉电
2、不丢失。设计的思路:(设计原理、设计的方案及流程)电路整体上由AT89C51CPU控制模块、LCD显示模块、DS1302时钟采集模块、按键处理模块四大模块组成,以AT89C51为核心电路,控制LCD显示,具体的显示内容和方式由软件来完成;由于有时钟和日期的调节功能需要校准电路,按键由时间闹钟切换键,移位键,加1键、减1键,闹钟关断键五个按键组成,计时功能由DS1302完成,显示功能则由LCD1602液晶完成。1.电子钟的总的设计框图:AT89C51CPU控制DS1302时钟采集模块LCD显示模块按键处理模块2. 原理图3. DS1302时钟采集模块 DS1302是DALLAS公司推出的涓流充电
3、时钟芯片。内含6有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作。DS1302芯片广脚介绍:X1、X2为32.768KHz晶振管脚。GND为地。RST复位脚。I/O数据输入/输出引脚。SCLK串行时钟。Vcc1,Vcc2电源供电管脚。 实时时钟复位线引脚DS1302_SCLK 接P27; 实时时钟时钟线引脚DS1302_IO 接P20; 实时时钟数据线引脚DS1302_RST 接P24; 4.按键处理模块 其中,ko为光标移位切换键、k1为加1键、k2为减1键、k3为切换时间与闹钟键、
4、k4为关断闹钟键。与51的连接:k0.k7并联接入P10。5. LCD显示模块液晶显示器是一种功耗极低的被动式显示器件,1602广脚介绍:D0D7数据传送引脚,VSS为接地线,VDD为电源线,VEE为LCD驱动电压调节,由此可以调节显示亮度。RS为寄存器选择信号,高电平选择数据寄存器,低电平选择指令寄存器。RW为读写控制信号,高电平读,低电平写。EN使能信号,读状态下高电平有效,写状态下下降沿有效。RS连接P24寄存器选择信号;RW连接P23读写控制信号线;EN连接P22使能信号线。6. 主程序流程图初始化lcd、定时器 初始化ds1302 按键扫描 显示切换按下?flag=1? Y闹钟按键处
5、理子程序Key_job1()时间按键处理子程序Key_job() N闹铃函数 时间LCD显示子程序Display()闹钟LCD显示子程序Display1() 实验设备与材料:单片机开发板、万利仿真机、稳压电源、计算机、KeiluVision4万利仿真软件MedWinV3.0方法(或步骤 ):1、将所设计的程序通过keil编译并产生hex文件2、通过protues连接原理图,并载入hex文件,进行软件仿真3、protues仿真确保无误之后,用usb连接开发板与计算机4、给仿真机接上电源,并连接仿真机与开发板接口5、打开万利仿真软件,输入测试好的程序,产生代码并装入仿真机6、在开发板上调试观察实验
6、现象并记录7、调试完毕,切断仿真机电源,整理好实验仪器。智能电子钟程序如下:#include#include#define uint unsigned int#define uchar unsigned charuchar 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 qqq;#define yh 0x80 /LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=8
7、0)#define er 0x80+0x40 /LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)/液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)sbit rs=P24; /寄存器选择sbit en=P22; /下降沿使能sbit rw=P23; /读写信号线/DS1302时钟芯片与C51之间的引脚连接定义sbit Key_Input=P10;sbit LEDCLK=P34;sbit LEDDIN=P23;sbit IO=P20;/数据线sbit SCLK=P27;sbit RST=P24;sbit ACC0=ACC0;sbit ACC7=ACC7;uchar k
8、eytemp=0;uchar keyval=0;uchar keyback;int t;bit keyup;/ACC累加器=A/ACC.0=E0H /校时按键与C51的引脚连接定义sbit buzzer=P12;/蜂鸣器,端口低电平响uchar code tab1=20 - - ; /年显示的固定字符uchar code tab2= : : ;/时间显示的固定字符 /延时函数,后面经常调用void delay(uint xms)/延时函数,有参函数uint x,y;for(x=xms;x0;x-) for(y=120;y0;y-);void write_1602com(uchar com)/*
9、液晶写入指令函数*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_
10、1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);/开显示不显示光标write_1602com(0x06);/整屏不移动,光标自动右移write_1602com(0x01);/清显示write_1602com(yh+1);/日历显示固定符号从第一行第1个位置之后开始显示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏写日历显示的固定符号部分/delay(3);write_1602com(er+2);/时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a0;a-) IO
11、=ACC0; SCLK=0; /产生上升沿写入数据,从低位写入 SCLK=1; ACC=ACC1;uchar read_byte()/读一个字节RST=1;for(a=8;a0;a-) ACC7=IO; SCLK=1; /产生下降沿输出数据,先输出低位,保存到ACC中 SCLK=0; ACC=ACC1;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_130
12、2(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=bcd4;return(Decimal=Decimal*10+(bcd&=0x0F);void ds1302_init1() /1302芯片初始化子函数(2012-06-18,12:00:00,week7)R
13、ST=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_D
14、ecimal(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写入初始秒数据58write_1302(0x82
15、,0x08);/向DS1302内写分寄存器82H写入初始分数据08write_1302(0x84,0x08);/向DS1302内写小时寄存器84H写入初始小时数据08write_1302(0x8a,0x03);/向DS1302内写周寄存器8aH写入初始周数据3write_1302(0x86,0x08);/向DS1302内写日期寄存器86H写入初始日期数据08write_1302(0x88,0x05);/向DS1302内写月份寄存器88H写入初始月份数据05write_1302(0x8c,0x13);/向DS1302内写年份寄存器8cH写入初始年份数据13write_1302(0x8e,0x80
16、); /打开写保护/时分秒显示子函数void write_sfm(uchar add,uchar dat)/向LCD写时分秒,有显示位置加、现示数据,两个参数uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十位数字write_1602com(er+add);/er是头文件规定的值0x80+0x40write_1602dat(0x30+sw);/数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的LCD1602显示码 /年月日显示子函数void write_nyr(uchar add,uchar da
17、t)/向LCD写年月日,有显示位置加数、显示数据,两个参数uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十位数字write_1602com(yh+add);/设定显示位置为第一个位置+addwrite_1602dat(0x30+sw);/数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的LCD1602显示码void write_week(uchar week)/写星期函数write_1602com(yh+0x0c);/星期字符的显示位置switch(week) case 1:write_1602
18、dat(M);/星期数为1时,显示 write_1602dat(O); write_1602dat(N); break; case 2:write_1602dat(T);/星期数据为2时显示 write_1602dat(U); write_1602dat(E); break; case 3:write_1602dat(W);/星期数据为3时显示 write_1602dat(E); write_1602dat(D); break; case 4:write_1602dat(T);/星期数据为4是显示 write_1602dat(H); write_1602dat(U); break; case
19、5:write_1602dat(F);/星期数据为5时显示 write_1602dat(R); write_1602dat(I); break; case 6:write_1602dat(S);/星期数据为6时显示 write_1602dat(T); write_1602dat(A); break; case 7:write_1602dat(S);/星期数据为7时显示 write_1602dat(U); write_1602dat(N); break;void Read_Key() /*键值读取函数*/keytemp=1;if(Key_Input=1)keytemp+;void keyscan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合 设计 实验 时钟
