ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:83.46KB ,
资源ID:16472613      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16472613.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(多功能数字钟设计报告Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

多功能数字钟设计报告Word格式文档下载.docx

1、将单片机的P2.7和P2.6分别连接LCD的RS和EN端,P0口接LCD的数据端(DB0-DB7)。LCD1602显示时间、闹铃、温度。 温度传感器接口电路:将单片机的P1.5与温度传感器的数据口相连。用单片机控制温度传感器,采集实时温度,并通过LCD显示。 蜂鸣器接口电路:通过一个PNP三极管放大电路,将单片机的P3.6与三极管的基极相接,实现单片机控制蜂鸣器发声。 键盘接口电路:本系统共用6只接触式按键,分别与单片机的P2.0-P2.5相连,实现单片机控制键盘。 红外接口电路:红外接收管的数据端与单片机的P3.2相连,通过中断实现单片机对红外的控制,进而实现非接触式停止闹铃功能。4) 键盘

2、功能说明: 本系统共用到6只按键,分别用来设置时间、设置闹铃、调整小时、调整分钟、开闹铃、关闹铃。 实时时间显示在LCD的第二行,闹钟时间与温度显示在第一行。 设置时间与设置闹铃处于同一优先级,不可同时有效。当设置完闹铃时,闹钟时间在第一行消隐掉。 调整小时与调整分钟必须在设置时间或设置闹铃按下时才有效。 开闹铃与关闹铃相对独立,不受其他按键的影响。 调整小时的按键作为切换显示温度的开关,当他作为第二功能用时,设置时间与设置闹铃的功能无效。三、 理论分析与计算1、时间的控制与计算。用定时器实现单片机的时间走动,定时器0定时50ms,经20次中断就过了1s,每过1s在中断服务程序中,通过软件编程

3、让秒、分、时显示在LCD上。单片机不停的扫描键盘,当有按键按下时,就进入相应的服务程序。如:当设置时间键按下时,时间停止,进入调整时间状态,通过调时与调分两个按键可调整时间,再按下设置时间键就推出设置,时间继续。2、温度的采集与计算。通过温度传感器采集实时温度,由于室温大于0度小于100度,本系统对温度不要求特别精确,故保留两位整数,一位小数显示在LCD上。通过调时按键的第二功能,可切换键盘将温度显示在LCD的第一行。3、蜂鸣器报警的设计。当闹铃到点时,蜂鸣器就发出“滴滴”的声音以报时。软件实现方法就是:当闹钟的时间与实施时间对应相等就代表闹铃到点。若不打开闹铃,蜂鸣器就不发声;在蜂鸣器发声的

4、过程中,若关掉闹铃,蜂鸣器就停止发声。4、红外止闹的设计。本系统只利用红外接收管,通过单片机的外部中断0作为红外的控制入口。在蜂鸣器发声过程中,按下遥控器的任意一个键,单片机就可控制蜂鸣器使其停止发声。在外部中断0的服务程序中,关闭蜂鸣器。四、 测试方法与调试本系统为多功能数字钟,一切功能的测试均通过6只按键来完成。可分别设置时间、设置闹铃、调整小时、调整分钟、开闹铃、关闹铃。本程序较大,采用C51语言编写。先调试各功能模块,在调试整个系统。具体电路见附件。程序见附页。程序:/DS18B20.h#include#define uint unsigned int#define uchar uns

5、igned charuchar lsb,msb;uchar disbuf7;uchar t1,t2;sbit dq=P15;bit presence;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;yy-);void delay1(uint i)/延时14us,12MHzwhile(-i);bit rst_ds18b20()/dq复位;没有检测从机 dq=1 ; _nop_(); /稍做延时 dq=0 ; /单片机将dq拉低 delay1(60); /延时480us-960us,主要是此延时要长最好800us以上 /拉高总线 dela

6、y1(5); /延时16-60us,等待从机发存在信号 presence=dq; /从机发送60-240us的低脉冲作为存在脉冲 delay(30); /至少延时(480us-720us),等待dq拉为高电平(自动的) return presence;uchar rd_byte() /读时,先拉低数据线至少1us,再释放。每两次读至少有1us的间隔 uchar i,dat; dq=1; for(i=0;i=1; /该句4us delay1(1);/主机马上释放总线,并延时至少14us,等待数据送上 if(dq) dat|=0x80; delay1(5);/保持数据至少(60us-15us),等

7、待上拉电阻将dq拉高 return dat;void wr_byte(uchar dat)/数据线由高拉低产生写信号 uchar i; dq=0;/dq由高拉低后,在15内期间采样dq状态 dq=dat&0x01; delay1(8);/写数据要维持60us-120us /然后拉高dq datvoid rd_temperature() /读取温度 rst_ds18b20(); wr_byte(0xCC) ; / 只有一个从机,跳过读序列号的操作 wr_byte(0x44) ; /启动温度转换 rst_ds18b20(); / 复位 /跳过读序号列号的操作 wr_byte(0xBE) ; /读取

8、温度寄存器 lsb=rd_byte() ; /温度低8位 msb=rd_byte() ; /温度高8位 void process_temperature()/处理温度 uchar flagdat,flag; if(msb&0xf0) flag=1; msb=msb; lsb=lsb+1; flagdat=-; else flag=0; /0表示温度为正 t1=msb4); t2=(lsb&0x0f)*0.0625*10; disbuf0=T disbuf1=: disbuf2=t1%100/10+0 disbuf3=t1%10+ disbuf4=. disbuf5=t2+ disbuf6=0

9、if(disbuf2=0x30) disbuf2= if(disbuf3=0x30) disbuf3=/main.c/开闹铃时显示闹铃符号,关时不显示/设置闹铃按1下进入 设置状态;按2下,退出设置状态;/设置时间按1下进入设置状态,并停止计时;按2下,推出设置状态,并开始计时/当设置闹铃、时间没按下时,调时、调分不起作用/不可以在设置时间的过程中设置闹铃,不可以在设置闹铃的过程中设置时间/设置闹铃后,闹铃时间在第一行显示/切换温度用到了调时键,为避免冲突,看温度与设置时间、设置闹铃不可同时有效/每当设置闹铃时,闹铃都初始化为00:00,设置完后,闹铃消失/lcd1602有64B的CGRAM,

10、可用来写入自定义字符,5*8点阵的可写8个(每个占8字节),5*11点阵的可写4个(每个占16字节)/写命令wcmd(0x40),显示所写入字符,送入数据0x00-0x07(对应显示8个字符)。reg52.hds18b20.h#define uint unsigned int void inc_second();void inc_minute();void inc_hour();void beep();void wdscan();void disp_sfm(uchar x,uchar y,uchar dat);#define PORT P0sbit lcdrs=P27;/LCD数据命令选择端s

11、bit lcden=P26;/LCD使能端sbit setsj=P20;/设置时间sbit setnl=P21;/设置闹铃sbit ts=P22;/调整小时sbit tf=P23;/调整分钟sbit knl=P24;/开闹铃sbit gnl=P25;/关闹铃sbit lam=P10;/AM指示灯sbit lpm=P11;/PM指示灯sbit lnl=P12;/闹铃就绪指示灯sbit fm=P36;/蜂鸣器端口/sj为设置时间按下的标志,nlflag为闹铃键按下的标志;tzflag为调时(1)、分按下(2)的标志uchar sj,tzflag,nlflag,tznl,wdnum;uchar ho

12、ur,minute,second,tcnt,nlhour,nlminute,nldk;uchar code table= 23:59:50uchar code bmp=0x0e,0x11,0x1f,0x00,0x0a,0x00,0x00,0x00,0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00;/闹铃符号与温度符号;void wcmd(uchar cmd) lcden=0; lcdrs=0; PORT=cmd; delay(5); lcden=1;void wdata(uchar dat) lcdrs=1; PORT=dat;void goxy(uchar x,

13、uchar y) if(x=1) wcmd(0x80+y); wcmd(0x80+0x40+y);void disp_str(uchar *str) while(*str) wdata(*str); str+;void disp_bmp(uchar x,uchar y,uchar dat) goxy(x,y); wdata(dat);void lcd_init() uchar i ; wcmd(0x38);/显示模式设置:16*2,5*7,8位数据接口 wcmd(0x0c);/开显示,不显光标,光标不闪烁 wcmd(0x06);/地址自动加1 wcmd(0x01);/清屏 wcmd(0x40)

14、;/写CGRAM for (i=0;16;i+) wdata(bmpi); goxy(2,0); disp_str(table);void timer0_init() TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;void timer0() interrupt 1 tcnt+; if(tcnt=20) tcnt=0; inc_second(); disp_sfm(2,4,hour); disp_sfm(2,7,minute); disp_sfm(2,10,second); wdata();

15、 inc_minute_nop() minute+; if(minute=60) minute=0;void inc_second() second+; if(second=60) second=0; inc_minute();void inc_minute() inc_hour();void inc_hour() hour+; if(hour=24) hour=0;void inc_nlminute() nlminute+; if(nlminute=60) nlminute=0;void inc_nlhour() nlhour+; if(nlhour=24) nlhour=0;void di

16、sp_sfm(uchar x,uchar y,uchar dat) uchar shi,ge; shi=dat/10+ ge=dat%10+ wdata(shi); wdata(ge);void led_apm() if(hour12) lpm=1; lam=0; goxy(2,0);AM lam=1; lpm=0;Pvoid tzsjfun() if(nlflag=0)/若闹铃没按下,则可设置时间,否则无效 if(wdnum=0)/若切换温度也没按下,则可设置时间 if(setsj=0) delay(2); while(!setsj); if(setsj=1) /表示按下了设置时间,且已经消

17、抖 sj+; if(sj=1) TR0=0;/按下1次停止计时 if(sj=2) /第2次按下表示设置完毕 TR0=1; sj=0; if(sj)/要调整时间 if(ts=0) delay(2); while(!ts); if(ts=1) tzflag=1; if(tf=0)tf); if(tf=1) tzflag=2; if(tzflag) if(tzflag=1) tzflag=0; inc_hour(); disp_sfm(2,4,hour); if(tzflag=2) inc_minute_nop(); disp_sfm(2,7,minute); void nl0() nlhour=0

18、; nlminute=0; disp_sfm(1,4,nlhour); wdata( disp_sfm(1,7,nlminute);void nldisappear() goxy(1,0);9; delay(2);void tznlfun() if(sj=0)/若设置时间没按下,则可设置闹铃,否则无效 if(wdnum=0) if(setnl=0)setnl); delay(5); if(setnl=1) nlflag+; if(nlflag=1) nl0(); if(nlflag=2)/按下1次闹铃键,设置闹铃;按下2次,设置完毕; nlflag=0; nldisappear(); if(nlflag)/要设置闹铃 if(nlhour12) goxy(1,0); wdata( else goxy(1,0); delay(5); if(ts=1) tznl=1; tznl=2; if(tznl) if(tznl=1) tznl=0; inc_nlhour(); disp_sfm(1,4,nlhour); if(tznl=2) inc_nlminute(); disp_sfm(1,7,nlminute);void kgnlfun() if(knl=0) while(!knl); delay(5); i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1