欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    [信息与通信]PIC单片机电子时钟设计.doc

    • 资源ID:1970505       资源大小:471KB        全文页数:68页
    • 资源格式: DOC        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [信息与通信]PIC单片机电子时钟设计.doc

    PIC单片机电子时钟设计摘要单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务 液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,近年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD可分为段式LCD、字符式LCD和点阵式LCD。其中,段式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线以及汉字、动画,并且可以实现屏幕滚动、反转、闪烁等功能,用途十分广泛。电子时钟主要由单片机芯片(AT89C52)、实时钟芯片(DS1302)、LCD显示器、键盘等组成。设计思路硬件设计:结构框图主控模块单片机AT89C52键盘模块 蜂鸣器(闹钟功能)液晶显示器LCD电池供电实时钟芯片DS1302主要模块、单片机AT89C52参数介绍:表1-1 89c52的主要性能参数主要性能参数:与MCS51产品指令和引脚完全兼容8k字节可重擦写Flash闪速存储器1000次擦写周期全静态操作:0Hz24MHz三级加密程序存储器256×8字节内部RAM32个可编程I/O口线3个16位定时/计数器8个中断源可编程串行UART通道低功耗空闲和掉电模式表1-2 AT89C52的极限参数工作温度-55to+125储藏温度-65to+150任一引脚对地电压-1.0Vto+7.0V最高工作电压6.6V实时钟芯片DS1302主要性能简介:a. 实时钟能够计算时间的时、分、秒,年、月、星期、日的功能,也具有调整闰年的能力。b.31x8位寄存存储RAM,串行I/O口方式,是的管脚数量最少c.八脚DIP封装或可选八脚SOIC封装d,工作电压 2.0v,电流 I<=300mAe.读写实时钟后RAM数据时、有两种方式 单字节传送或多字节传送f.与VTL兼容(Vcc=5.0v)LCD显示器说明:液晶显示器LCD(Liquid Crystal Display);液晶显示器简称是利用液晶经过处理后能够改变光线传输方向的特性,达到显示字符或者图形的目的。其特点是体积小、重量轻、功耗极低、显示内容丰富等特点,在单片机应用系统中有着日益广泛的应用。1602芯片:主要用于显示时间和定时时间。1602芯片由点阵字符液晶显示器件和专用的行、列驱动器、控制及必要的链接件、结构件组装而成,可以显示数字和西文字符,但不能显示图形,已经可以满足本次设计的需要。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点3。1602型LCD可以显示2行16个字符,有8位数据总线D0D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。1. 外型尺寸:80X36X13(LXWXH)2.接口信号说明表1-3 1602型LCD的接口信号说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(H/L)12D5Data I/O5R/W读写选择端(H/L)13D6Data I/O6E使能信号14D7Data I/O7D0Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极3.主要技术参数表1-4 1602型LCD的主要技术参数显示容量16X2个字符芯片工作电压4.55.5V工作电流2.0mA(5.0V)模块最佳工作电压5.0V字符尺寸2.95X4.35(WXH)mm4基本操作程序读状态:输入:RS=L,RW=H,E=H输出:D0D7=状态字读数据:输入:RS=H,RW=H,E=H输出:无写指令:输入:RS=L,RW=L,D0D7=指令码,E=高脉冲 输出:D0D7=数据写数据:输入:RS=H,RW=L,D0D7=数据,E=高脉冲 输出:无5RAM地址映射图控制器内部带有80字节的RAM缓冲区,对应关系1-5表所示表1-5对应关系LCD16字X2行000102030405060708090A0B0C0D0E0F10。27404142434445464748494A4B4C4D4E4F50。676.状态字说明表1-6状态字说明STA7STA6STA5STA4STA3STA2STA1STA0D7D6D5D4D3D2D1D0STA0STA6当前地址指针的数值STA7读写操作使能1:禁止;0:允许注意 每次对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0。建模设计模块按键按照结构原理可分为两类,一类是触点式开关按键,另一类是无触点式开关按键,这里采用触点式开关按键,因为价格便宜按键的软件结构:按键中有一个复位键及定时键、调时键加一键和减一键,一个按键接在复位电路上,另外四个按键接在P0P4口,低电平表示有按钮按下;按钮没有接防抖电路,需要设计软件防抖。1、定时。按下定时键后可以开始定时,过程如下:定时-小时加/减-按定时-分钟加/减-按定时。2、调时。按下调时键后可以调时,过程如下:调时-年加/减-调时-月加/减-调时-日加/减-调时-时加/减-调时-分加/减-调时-秒加/减 -调时。声音提示模块蜂鸣器:89C52的P2.0口接了一个蜂鸣器,定时时间到, P1.0输出一定频率脉冲时,蜂鸣器将发出响声;一分钟后停止。直流稳压电源部分直流稳压电源是给电子设备提供稳定直流电压的电子电路。这次电路需要的是+5V直流电源。硬件电路测试电路ERC测试:如下图(a)所示,选择ERC做电路测试。如果通过测试,则出现(b) 所示界面。 ERC测试 (b)电路原理图(硬件电路网格化图) 软件程序设计模块程序分为主程序和子程序, 主程序:设计中采用定时器T0中断完成,其余状态循环调用显示子程序,当P3.7端口或者P1.7端口开关按下时,转入调整时间或者调整日期功能程序。 子程序:数码管显示的数据存放在内存单元70H-75H中,其中70H71H存放秒数据,72H73H存放分数据,74H75H存放时数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出70H75H某一地址中的数据,然后查的对应的显示段码从P1口输出。P3口将对应的数码管选中,就是显示该地址单元的数据值。中断、调时(1)定时器T0中断服务程序定时器T0用于时间计时。定时溢出中断周期设为50ms,中断累计20次(即1s)时对秒计数单元进行加1操作。时间计数单元地址分别在70H71H(s)、76H77H(min)、78H79H(h),7AH单元存放“熄灭符”数据(#0AH)。在计数单元中采用十进制BCD码计数,满60进位。T0中断服务程序流程图3所示。(2)T1中断服务程序T1中断服务程序应用于指示调整单元数字的亮闪。在时间调整状态下,每过0.3秒,将对应单元的显示数据换成熄灭符数据(#0AH)。这样,在调整时间时,对应调整单元的显示数据就会间隔闪亮。(3)调时功能程序调时功能程序的设计方法是:按下按键,若按下时间小于1秒,进入省电状态(数码管不亮,时钟不停),否则进入调分状态,等待操作,此时计时器停止走动。当再次按下按钮时,若按下的时间小于0.5秒,则时间加1分钟;若按下时间大于0.5秒,则进入小时调整状态。在小时调整状态下,当按键按下的时间大于0.5秒时退出调整状态,时钟继续走动。程序语言编译:#include <AT89C52.h>#include <string.h>#define LCM_RW P2_1 /定义引脚#define LCM_RS P2_0#define LCM_E P2_2#define LCM_Data P0#define Busy 0x80 /用于检测LCM状态字中的Busy标识#define uchar unsigned charsbit T_CLK=P25;sbit T_IO =P27; =#include <AT89C52.h>#include <string.h>#define LCM_RW P2_1 /定义引脚#define LCM_RS P2_0#define LCM_E P2_2#define LCM_Data P0#define Busy 0x80 /用于检测LCM状态字中的Busy标识#define uchar unsigned charsbit T_CLK=P25;sbit T_IO =P27;sbit T_RST=P26;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit LCD=P37; /背光灯输出sbit system=P10; /模式sbit TimerUp=P11; /时间加sbit TimerDown=P12; /时间减sbit Speaker=P23; /蜂鸣器void Set(uchar,uchar); /根据选择调整相应项目void RTInputByte(uchar); /输入 1Byte */uchar RTOutputByte(void); /输出 1Byte */void W1302(uchar, uchar); /向DS1302写入一个字节uchar R1302(uchar); /从DS1302读出一个字节void Set1302(uchar * ); /设置时间 void KeySound(); /按键音void ClockSound(); /闹铃uchar inittime7=0x00,0x10,0x140x05,0x06,0x05,0x2011; /初始化后设置为:2011年5月6日星期5 14点10分0秒void Out_LCM(void); /显示屏幕void model0(void); /显示输出void model1(void);void model2(void);void model3(void);void model4(void);void model5(void);void model6(void);void id_case1_key(); /项目调整void Modset(); /模式键处理void WriteDataLCM(uchar WDLCM);void WriteCommandLCM(uchar WCLCM,BuysC);uchar ReadStatusLCM(void);void LCMInit(void);void OutputInformation(uchar X, uchar Y, uchar DData);void DisplayListChar(uchar X, uchar Y, uchar code *DData);void Delay5Ms(void);void Delay400Ms(void);void systemsetup(void); /进入系统设置uchar code systemp="System.setup" /字符串输出(系统设定)uchar code TIMER="Time" /字符串输出(时间)uchar code DATE="Date" /字符串输出(日期)uchar code alarmclock="Clock" /字符串输出(闹铃)uchar code lamp="Lamp" /字符串输出(背光灯)uchar code reset="Reset" /字符串输出(时间归零)uchar code exit="Exit" /字符串输出(退出)uchar code set="Set" /字符串输出(设置)uchar code sec="sec" /字符串输出(秒)uchar code ClockSet="ClockSet" /字符串输出(闹铃设置)uchar code ClockOn="ON" /字符串输出(ON)uchar code ClockOff="OFF" /字符串输出(OFF)void timesetup(void); /时间设置void datesetup(void); /日期设置void alarmclockset(void); /闹铃设置void lampsetup(void); /背光灯设置 void timereset(void); /时间清零void main(void) Speaker=1; /关闭蜂鸣器 LED=0; /打开LED ,低电平有效,外接9012驱动 Delay400Ms(); /启动等待,等LCM讲入工作状态 LCMInit(); /LCM初始化 TMOD=0x01; /16位定时 TH0=0x3c; /50ms TL0=0xb0; EA=1; TR0=1; ET0=1; while(1) if(TimerDown=0) /左移键按下后把背光灯打开 Delay5Ms(); if(TimerDown=0) KeySound(); /蜂鸣声 LED=0; /打开背光灯 LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16; /取出背光灯时间并转换为十进制数 b=1; /模式键是否动作标志。为1时不动作,为0时动作。 Modset(); /调用模式键处理程序判断按键是否按下。 if(b=0) KeySound(); /蜂鸣声 LED=0; /打开背光灯 systemsetup(); /进入系统设置模式 LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16; /取出背光灯时间并转换为十进制数 if(LED=0)&&LedTime=0) /延时间是否到 LED=1; /关闭背光灯 if(R1302(0xc3)=1) /闹铃是否打开,0xc3为读闹铃寄存器地址。 if(R1302(0x85)=R1302(0xc5)&&(R1302(0x83)=R1302(0xc7) /判断闹铃时间是否到, ClockSound(); /发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。 model0(); /输出显示屏幕 void KeySound() /按键音Speaker=0; /开蜂鸣声Delay5Ms();Speaker=1; /关蜂鸣声void ClockSound() /闹铃蜂鸣声if(a=0) Speaker=0; /开蜂鸣声 Delay5Ms(); Delay5Ms(); Delay5Ms(); Speaker=1; /关蜂鸣声 void Modset() /模式键处理 if(system=0) Delay5Ms(); if(system=0) while(system=0); KeySound(); /蜂鸣声 a=0;msec=0;b=0; /a、msec为闪烁标志,按键有动作时清零,不闪烁。 /b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。 void systemsetup(void) /系统设置 model=1; while(model!=0) Out_LCM(); if (TimerUp=0) /设置项目左移 Delay5Ms(); if(TimerUp=0) a=0;msec=0;KeySound();/蜂鸣声 if(model-=1) /6种系统设置项目 model=6; while(TimerUp=0); if (TimerDown=0) /设置项目右移 Delay5Ms(); if(TimerDown=0) a=0;msec=0;KeySound();/蜂鸣声 if(model+=6) model=1; while(TimerDown=0); b=1; /模式键是否动作标志。为1时不动作,为0时动作。 Modset(); /调用模式键处理程序判断按键是否按下。 if(b=0) KeySound(); /蜂鸣声 switch(model) /进入项目设置 case 1: timesetup(); break; /时间设置 case 2: datesetup();break; /日期设置 case 3: alarmclockset();break;/闹铃设置 case 4: lampsetup();break; /背光灯设置 case 5: timereset();break; /时间清零 case 6: model=0;break; /退出系统设置 void timesetup() /时间调整id=6;while(model=1) /model为1时进入时间调整 b=1; Modset(); if(b=0) KeySound(); /蜂鸣声 if(id+=9) /6.9为时分秒调。 . id=6; id_case1_key(); /调用按键处理 Out_LCM(); /显示输出 void datesetup() /对日期进行调整id=1;while(model=2) /model为2时进入日期调整 b=1; Modset(); /模式键是否动作 if(b=0) KeySound(); /蜂鸣声 if(id+=5) /1.5为年月日星期 exit id=1; id_case1_key(); /日期调整Out_LCM(); /显示输出 void alarmclockset(void) /闹铃调整id=12;while(model=3) /进入闹铃设置 b=1; Modset(); /模式键是否动作 if(b=0) KeySound(); /蜂鸣声 if(R1302(0xc3)%16=0) id=0;model+; /0xc2为闹铃开关寄存器。当为关时按下模式键时将退出闹铃设置,当开时进入闹铃时间设置 else if(id+=15) /12.15为闹铃开关和时间设置 exit id=12; id_case1_key(); /调整 Out_LCM(); /显示输出 void lampsetup(void) /背光灯时间设置id=10; /背光灯存储空间DS1302(0xc0) while(model=4) /model为3时进入背光灯调整 b=1; Modset(); /模式键是否动作 if(b=0) KeySound(); /蜂鸣声 if(id+=11) /10为背光灯 exit id=10; id_case1_key(); Out_LCM(); /显示输出 void timereset() /时间清零 Set1302(inittime); /清时间 W1302(0x90,0xa5); /打开充电二级管 一个二级管串联一个2K电阻 model+; /对相应的项目进行加、减调整。void id_case1_key() /按键处理 if (TimerUp=0) /增加 Delay5Ms(); if(TimerUp=0) a=0;msec=0;KeySound(); /蜂鸣声 if(id=9)|(id=5)|(id=11)|(id=15) /当ID为9、5时按下加、减键将退出调整 model+; /退出时间、日期设置 id=0; else Set(id,1); while(TimerUp=0); if (TimerDown=0) /减少 Delay5Ms(); if(TimerDown=0) a=0;msec=0;KeySound(); /蜂鸣声 if(id=9)|(id=5)|(id=11)|(id=15) /当ID为9、5时按下加、减键将退出调整 model+; /退出时间、日期设置 id=0; else Set(id,0); /调用DS1302写入函数 while(TimerDown=0); void timer_1(void) interrupt 1 /中断入口,闪烁 TH0=0x3c; /50ms定时 TL0=0xb0; if(msec+=10) /500ms msec=0;a=a; /闪烁标志反转 if(a=0) /1秒后背光时间减一秒。 LedTime-; /根据选择调整相应项目并写入DS1302void Set(uchar sel,uchar sel_1) uchar address,item; uchar max,min; if(sel=1) address=0x8c; max=99;min=0; /年 if(sel=2) address=0x88; max=12;min=1; /月 if(sel=3) address=0x86; max=31;min=1; /日 if(sel=4) address=0x8a; max=7; min=1; /星期 if(sel=6) address=0x84; max=23;min=0; /小时 if(sel=7) address=0x82; max=59;min=0; /分钟 if(sel=8) address=0x80; max=59;min=0; /秒 if(sel=10) address=0xc0; max=59;min=0; /背光时间,最长1分钟 if(sel=12) address=0xc2; max=1;min=0; /闹铃开关寄存器 if(sel=13) address=0xc4; max=23;min=0; /闹铃时寄存器 if(sel=14) address=0xc6; max=59;min=0; /闹铃分寄存器 item=R1302(address+1)/16*10+R1302(address+1)%16; if (sel_1=0) item+; else item-; if(item>max) item=min; if(item<min) item=max; W1302(0x8e,0x00); /允许写操作 W1302(address,item/10*16+item%10); /写入DS1302 /转成BCD码 W1302(0x8e,0x80); /写保护,禁止写操作 /屏幕显示void Out_LCM(void) switch(model) case 0: model0(); break; case 1: model1(); break; case 2: model2(); break; /在不同的条件下显示不同的字符 case 3: model3(); break; case 4: model4(); break; case 5: model5(); break; case 6: model6(); break; /*model为零时第一行显示时间,不为零时显示system setup*/void model0() DisplayListChar(0,0,TIMER); /显示固定字符串(Time) OutputInformation(13,0,0x20); /不显示 OutputInformation(4,0,0x20); /不显示 OutputInformation(4,1,0x20); /不显示 OutputInformation(15,1,0x20); /不显示 OutputInformation(7,1,0x2f); /显示固定字符 "/" OutputInformation(10,1,0x2f); /显示固定字符 "/" OutputInformation(13,1,0x2f); /显示固定字符 "/" DisplayListChar(0,1,DATE); /显示固定字符串Date(日期) if(a=1) /冒号闪烁 OutputInformation(7,0,0x3a); OutputInformation(10,0,0x3a); else OutputInformation(7,0,0x20); OutputInformation(10,0,0x20);/*model为零时第二行显示日期,不为零显示设置项目*/ OutputInformation(5,1,R1302(0x8d)/16+0x30); /显示年 OutputInformation(6,1,R1302(0x8d)%16+0x30); OutputInformation(8,1,R1302(0x89)/16+0x30); /显示月

    注意事项

    本文([信息与通信]PIC单片机电子时钟设计.doc)为本站会员(音乐台)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开