万年历电子系统设计方案_第1页
万年历电子系统设计方案_第2页
万年历电子系统设计方案_第3页
万年历电子系统设计方案_第4页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、万年历电子系统设计方案一、设计要求与方案论证1.1项目设计容、功能、指标:()基本要求具有年、月、日、时、分、秒等功能;具有自动判别闰年闰月的功能有一路闹钟(2)创新要求具有闹钟功能,时间到后蜂鸣器响,led灯亮。设置的时间日期掉电不丢失具有温度计功能;1.2 项目设计方案和比较1.2.1单片机芯片的选择方案和论证:方案一 :采用 89C51 芯片作为硬件核心,采用Flash ROM,部具有4KB ROM存储空间 , 能于 3V 的超低压工作 , 而且与 MCS-51系列单片机完全兼容, 但是运用于电路设计中时由于不具备ISP 在线编程技术 ,当在对电路进行调试时,由于程序的错误修改或对程序的

2、新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二 :采用 STC89C52,片 ROM全都采用Flash ROM;能以3V 的超底压工作;同时也与MCS-51系列单片机完全该芯片部存储器为8KB ROM存储空间,同样具有89C51 的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用AT89S52作为主控制系统.1.2.2显示模块选择方案和论证:方案一:采用Lcd 液晶显示屏 , 液晶显示屏的显示功能强大, 可显示大量文字, 图形 , 显示多样清晰可见。方案二

3、:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合 , 如采用在显示数字显得太浪费, 且价格也相对较高, 所以也不用此种作为显示.方案三:采用 LED 数码管动态扫描,LED 数码管价格适中, 对于显示数字最合适, 而且采用动态扫描法与单片机连接时, 占用的单片机口线少。由于显示的容较多,采用led 数码管不方便,所以采用了LCD液晶作为显示。,1.2.3时钟芯片的选择方案和论证:方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。方案二:采用 DS13

4、02 时钟芯片实现时钟,DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高, 位的 RAM做为数据暂存区,工作电压2.5V 5.5V 围, 2.5V 时耗电小于300nA,但成本高。最终确定采用方案一,直接用单片机定时器提供秒信号。.2.4温度传感器的选择方案与论证:方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D 转换。此设计方案需用A/D 转换电路, 增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差

5、。方案二:采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输, 易于与单片机连接, 可以去除 A/D 模块,降低硬件成本, 简化系统电路。 另外,数字式温度传感器还具有测量精度高、测量围广等优点。最终采用DS18B20。1.2.5掉电不丢失采用 EEROM 24C02存储设定的时间日期,实现掉电不丢失。1.3 电路设计最终方案决定综上各方案所述 , 对此次作品的方案选定 : 采用 STC89C52作为主控制系统; 单片机计数器提供时钟; 数字式温度传感器 18B20;LCD液晶屏作为显示; 用独立按键控制时间的调整、闹钟的设定。二 . 系统的硬件设计与

6、实现 2.1 电路设计框图LCD 液晶显示模STC89C51602 E2ROM块2 主控制键盘模块单片机内部计数器定时模 块温度采集模块2.2系统硬件概述本电路是由STC89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V 超低压工作;时钟电路由单片机部计数器构成,1602 存储,掉电不丢失;温度的采集由每计 1 秒,产生一个终断, 提供秒信号; 采用DS18B20构成;显示部份由液晶显示屏1602E2ROM构成。2.3 主要单元电路的设计2.3.1单片机主控制模块的设计stc89c52单片机为 40 引脚双列直插芯片, 有四个 I/O 口 P0,P1,P2,P3, MCS-51单片

7、机共有 4 个 8 位的 I/O 口( P0、P1、 P2、P3),每一条 I/O 线都能独立地作输出或输入。单片机的最小系统如下图所示,18 引脚和 19 引脚接时钟电路,XTAL1 接外部晶振和微调电容的一端 , 在片它是振荡器倒相放大器的输入,XTAL2 接外部晶振和微调电容的另一端, 在片它是振荡器倒相放大器的输出. 第 9 引脚为复位输入端, 接上电容 , 电阻及开关后够上电复位电路 ,20 引脚为接地端,40 引脚为电源端.如图 -1所示图-1主控制系统2.3.2温度采集模块设计如图 -3 所示。采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单

8、特点,此类传感器仅需要一条数据线进行数据传输,使用2.7 与 DS18B20的I/O 口连接加一个上拉电阻,Vcc 接电源 ,1 管脚接地。图 -3 DS18B20 温度采集2.3.3部计数器用计数器的工作方式一, 采用 16 位加一计数器, THx8 位和 TLx8 位组成 16 位加 1 计数器,计数外部脉冲个数: 1 65536(216) ,计数的最大值为 65536,定时时间 ( 若 T=1ms):1ms (65536 T=65.54ms) 。计数器工作原理框图如下振荡器 fosc? 12(定时)D15 D8D7 D0C/T=0加1 THx TLxTFx& 中断请求C/T=1脉冲 (8

9、位)(8位) 溢出Tx引脚(记数) 启 控ETx中断动 制TRx允GATE&许11INTx2.3.4显示模块的设计显示模块通过一块 16 脚的 LCD1602 组成。其中 1、 2 脚接地, 7、 9、 11 分别接一个 I/O 口用于控制液晶的显示, 13-28 接 P0 的 8 个 I/O 口用于数据传输, 29、31 用于控制液晶的背光。如下图所示基本操作时序表读写操作时序如图所示:图 读操作时序图写操作时序2.3.5按键模块的设计采用独立按键控制,上拉电阻接Vcc,按键为低电平有效。2.3.6蜂鸣器模块的设计蜂鸣器需要用三极管驱动才能工作,高电平有效。2.3.6 rom模块采用E2RO

10、M24C02, 存 储时 间 设 置 ,可以起到掉电不丢失的作用。2.3.7串口下载模块采用芯片max232,在 pcb 板上设计串口,接单片机的txd 和 rxd ,用于下载程序。三、系统的软件设计实验程序流程图如下所示:开始T0 初始化时间显示S4 按?S2 按?S3按 ?S4 按?S5 按?下?下?加一加一减一时间继续灯走灭,蜂鸣器停N= 最大N=最大N=最大值 ?值 ?值 ?继续继继续切续切换切换换四、 调试过程和测试方法调试过程:1、首先在一块单片机开发板上调用相应的模块,调试程序,这主要是软件调试,软件调试正确后,按照原理图将所需模块用DXP软件画 pcb 板并完成腐蚀和焊接。2、

11、检测串口是否能够下程序3、 检测晶振工作频率是否正常4、检测按键按下前后输出端点评是否正常5、正确下进程序之后,发现液晶显示屏始终无法显示字符,这是调节液晶1602 的 5 管脚相连的滑动变阻器,直至能够显示字符。6、在设定时间的时候,光标闪烁显示正在设置的是哪一位,但加上温度显示后,由于温度随时在采样并显示, 所以出现了温度与时间抢光标的情况, 而更加糟糕的是, 由于不同模块间的相互干扰, 加上温度后,时间经常会终止,这是用单片机部计数器定时的弊端,如果用时钟芯片,应该可以避免这种现象。最终只能去掉温度显示模块。结果测试:最终可以实现年、月、日、时、分、秒的显示和闹钟功能,可以判断闰年闰月,

12、时间可以设定。按下s1 进入时间设定模式,此时再按键s1 可以切换要设置的是哪一位,多次按s1,依次可以设定秒、分、时、日、月、年的低2 位、年的高2 位、时钟的分、时钟的时,按键 s2 使被设置位的数值增加,按键s3 使被设置位的数值减小,按键s4 使液晶显示从时间设定模式转换为正常走时模式。闹钟所设定的时间到后,蜂鸣器响, led 灯亮,这里的 led灯代表一个驱动, 比如家里的电饭煲, 当时间到的时候, 可以自动启动, 此时按下按键 s5 ,蜂鸣器停止鸣叫, led 灯灭。掉电后,设定的时间不会丢失,再次开机,仍未原关机前的时间。此外,串口工作正常。五、 参考文献1 郭天翔 . 新概念

13、51 单片机 C 语言教程 入门、提高、开发、拓展全 . 电子工业2009.12 罗杰 . 电子线路设计实验测试 . 电子工业 2008 年 4 月3江志红51 单片机技术与应用系统开发案例精选清华大学2008.123 居义 单片机课程设计指导 清华大学 2009.93宋戈 51 单片机应用开发例大全人民邮电 2008.12附录一、原理图与PCB图附录二、试验程序#include#define uchar unsigned char#define uint unsigned intbit write=0;sbit sda=P23;sbit scl=P24;sbit p1=P1;sbit rs=

14、P22;sbit rw=P21;sbit lcden=P20;sbit s1=P10;sbit s2=P11;sbit s3=P12;sbit s4=P13;sbit s5=P14;sbit rd=P37;sbit beep=P23;sbit guanjiao=P34;sbit deng=P15;uchar count,s1num;uint shi1,shi2,shi3,shi4,shi5,shi6;char miao,shi,fen;uint setshi,setfen;uint ri,yue,nian,nian1;uchar code table=2012-04-20;uint shi1=

15、0;uint fen1=0;uchar flag;/*AT24C02C芯片*/void flash();void start() /sda=1;flash();scl=1;flash();sda=0;开始信号flash(); void stop() /sda=0;flash();scl=1;flash();sda=1;停止flash(); void respons() / uchar i; scl=1;应答flash();while(sda=1)&(i250) i+;scl=0;flash();void init()sda=1;flash();scl=1;flash();void write_

16、byte(uchar date)uchar i,t;t=date;for(i=0;i8;i+)t=t1;scl=0;flash();sda=CY;flash();scl=1;flash();scl=0;flash();sda=1;flash();uchar read_byte()uchar i,k;scl=0;flash();sda=1;flash();for(i=0;i8;i+)scl=1;flash();k=(k0;x-)for(y=110;y0;y-);void di()beep=0;delay(100);beep=1;void write_(uchar )rs=0;lcden=0;P0

17、=;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date)uchar sh,ge;sh=date/10;ge=date%10;write_(0x80+0x40+add);write_date(0x30+sh);write_date(0x30+ge);void write_sfm1(uchar add,uchar date)uchar sh,ge;s

18、h=date/10;ge=date%10;write_(0x80+add);write_date(0x30+sh);write_date(0x30+ge);void init0()uchar num;/ P1=0x0f;rd=0;rw=0;lcden=0;count=0;s1num=0;guanjiao=0;init();write_(0x38);write_(0x0c);write_(0x06);write_(0x01);write_(0x80+4);write_date(-);delay(5);write_(0x80+0x40+2);write_date(:);write_(0x80+7)

19、;write_date(-);delay(5);delay(5);write_(0x80+0x40+5);write_date(:);delay(5);write_(0x80+0x40+12);write_date(:);delay(5);miao=read_add(1);fen=read_add(2);shi=read_add(3);ri=read_add(4);yue=read_add(5);nian=read_add(6);nian1=read_add(7);fen1=read_add(8);shi1=read_add(9);write_sfm(6,miao);write_sfm(3,f

20、en);write_sfm(0,shi);write_sfm1(8,ri);write_sfm1(5,yue);write_sfm1(2,nian);write_sfm1(0,nian1);write_sfm(13,fen1);write_sfm(10,shi1);TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;void keyscan()if(s1=0)delay(5);if(s1=0)s1num+;while(!s1);di();if(s1num=1)TR0=0;write_(0x80+0x40+

21、6);write_(0x0f);if(s1num=2)write_(0x80+0x40+3);if(s1num=3)write_(0x80+0x40+0);if(s1num=4)write_(0x80+8);if(s1num=5)write_(0x80+5);if(s1num=6)write_(0x80+2);if(s1num=7)write_(0x80);if(s1num=8)write_(0x80+0x40+13);if(s1num=9)write_(0x80+0x40+10);if(s1num=10)s1num=0;TR0=1;write_(0x0c);if(s1num!=0)if(s2

22、=0)delay(5);if(s2=0)while(!s2);di();if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(6,miao);write_(0x80+0x40+6);write_add(1,miao);if(s1num=2)fen+;if(fen=60)fen=0;write_sfm(3,fen);write_(0x80+0x40+3);write_add(2,fen);if(s1num=3)shi+;if(shi=24)shi=0;write_sfm(0,shi);write_(0x80+0x40+0);write_add(3,shi);i

23、f(s1num=4)if(nian1*100+nian)%4=0&(nian1*100+nian)%100!=0)|(nian1*100+nian)%400=0)goto ll1;if(yue=2)ri+;if(ri=29)ri=1;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);goto ll2;ll1: if(yue=2)ri+;if(ri=30)ri=1;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);ll2: if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|y

24、ue=12)ri+;if(ri=32)ri=1;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);if(yue=4|yue=6|yue=9|yue=11)ri+;if(ri=31)ri=1;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);if(s1num=5)yue+;if(yue=13)yue=1;write_sfm1(5,yue);write_(0x80+5);write_add(5,yue);if(s1num=6)nian+;if(nian=100)nian=0;write_sfm1(2,nia

25、n);write_(0x80+2);write_add(6,nian);if(s1num=7)nian1+;if(nian1=100)nian1=0;write_sfm1(0,nian1);write_(0x80);write_add(7,nian1);if(s1num=8)fen1+;if(fen1=60)fen1=0;write_sfm(13,fen1);write_(0x80+0x40+13);write_add(8,fen1);if(s1num=9)shi1+;if(shi1=24)shi1=0;write_sfm(10,shi1);write_(0x80+0x40+10);write

26、_add(9,shi1);if(s3=0)delay(5);if(s3=0)while(!s3);di();if(s1num=1)miao-;if(miao=-1)miao=59;write_sfm(6,miao);write_(0x80+0x40+6);write_add(1,miao);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(3,fen);write_(0x80+0x40+3);write_add(2,fen);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(0,shi);write_(0x80+0x40+

27、0);write_add(3,shi);if(s1num=4)if(nian1*100+nian)%4=0&(nian1*100+nian)%100!=0)|(nian1*100+nian)%400=0)goto lll1;if(yue=2)ri-;if(ri=-1)ri=28;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);goto lll2;lll1: if(yue=2)ri-;if(ri=-1)ri=29;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);lll2: if(yue=1|yue=3

28、|yue=5|yue=7|yue=8|yue=10|yue=12)ri-;if(ri=-1)ri=31;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);if(yue=4|yue=6|yue=9|yue=11)ri-;if(ri=-1)ri=30;write_sfm1(8,ri);write_(0x80+8);write_add(4,ri);if(s1num=5)yue-;if(yue=-1)yue=12;write_sfm1(5,yue);write_(0x80+5);write_add(5,yue);if(s1num=6)nian-;if(ni

29、an=-1)nian=99;write_sfm1(2,nian);write_(0x80+2);write_add(6,nian);if(s1num=7)nian1-;if(nian1=-1)nian1=99;write_sfm1(0,nian1);write_(0x80+0x40+8);write_add(7,nian1);if(s1num=8)fen1-;if(fen1=-1)fen1=59;write_sfm(13,fen1);write_(0x80+0x40+13);write_add(8,fen1);if(s1num=9)shi1-;if(shi1=-1)shi1=23;write_sfm(10,shi1);write_(0x80+0x40+10);write_add(9,shi1);if(s4=0)delay(5);if(s4=0)while(!s4);TR0=1;s1num=0;w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论