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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数字钟报告.docx

1、数字钟报告数字钟报告一 电子钟方案方案1:单片机定时 可通过51系列的单片机两个内部的16位定时器/计数器实现时钟计数。这两个计数器都是由8位的特殊RAM单元组成的,最大计数量程是65536。定时器是单片机的内部晶振经过12分频后获得的一个脉冲源,并以它作为计数器信号的实现。方案2:专用时钟芯片 DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路.提供秒分时日日期.月年的信息,每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式.DS1302 与单

2、片机之间能简单地采用同步串行的方式进行通信.双电源管脚用于主电源和备份电源供应Vcc1,为可编程涓流充电电源附加七个字节存储器. 方案选择:由于直接用单片机内部定时器作为时钟计数比较不准确,同编制日历软件复杂,不能提供准确的时间计量,而DS1302能够提供准确的年、月、日等信息,但没有此芯片,因此只能用单片机内部的定时器。2单片机选型:AT89C52 ATMEL公司生产的低电压,高性能CMOS 8位单片机片内含8K byTES的可反复擦写的只读程序存储器(PEROM)和256 byTES 的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度,与标准MCS-51指令系统及8052 产品

3、引脚兼容,片内置通用8位中央处理器(CPU )和FLASH由存储单元,与Mcs-51产品指令和引脚完全兼容。二 系统硬件设计(1)显示电路:器材限制,因此采用数码管显示。1.数码管显示2.液晶屏显示(2)显示闹钟:时钟显闹时,所有发光二极管发亮。(3)复位电路:在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。方式一,手动按钮复位方式二,上电复位 特例:积

4、分型上电复位(4)振荡电路:(5)键盘:方式1.独立键盘 方式2.矩形键盘:(6)总电路图:方案一:程序:#include /包含头文件#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit P20=P20; /定义位变量sbit P21=P21;sbit P22=P22;sbit P23=P23;sbit P24=P24;sbit P25=P25;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x3

5、0,0x19,0x12,0x02,0x78,0x00,0x10; /数码管显视代码uchar s,f,m,s1,s2,f1,f2,aa,bb,cc,ns,nf,n1,n2,n3,n4; /定义全局变量void delay(uint z) /延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void display(uchar a,uchar b,uchar c,uchar d); /声明显示函数uchar tiaoshi(uchar bb); /声明调时子函数uchar tiaofen(uchar cc); /声明调分子函数void main() s

6、=0; f=0; m=57; ns=10; nf=10; TMOD=0x01; /设置定时器0为工作方式1 TH0=(65536-50000)/256; /赋予高四位初值 TL0=(65536-50000)%256; /赋予低四位初值 EA=1; /开总中断 ET0=1; /开定时器0中断 TR0=1; /启动定时器0 while(1) if(aa=12) aa=0; m+; if(m=60) m=0; f+; if(f=60) f=0; s+; if(s=24) s=0; if(P20=0) /进入调时程序 delay(5); if(P20=0) s=tiaoshi(s); f=tiaofe

7、n(f); if(P25=0) /进入调闹钟程序 delay(5); if(P25=0) while(P25!=1) ns=tiaoshi(ns); nf=tiaofen(nf); n1=ns/10; n2=ns%10; n3=nf/10; n4=nf%10; display(n1,n2,n3,n4); if(s=ns&f=nf) P1=0x00; /到闹钟指定时间时所有发光二极管发亮 else P1=0xff; s1=s/10; s2=s%10; f1=f/10; f2=f%10;display(s1,s2,f1,f2); void time() interrupt 1 /中断函数 TH0=

8、(65536-50000)/256; TL0=(65536-50000)%256; aa+;void display(uchar a,uchar b,uchar c,uchar d) /显示函数 P0=tablea;P3=0x01;delay(5); P0=0xff; P0=tableb+10;P3=0x02;delay(5);P0=0xff; P0=tablec;P3=0x04;delay(5);P0=0xff; P0=tabled;P3=0x08;delay(5);P0=0xff;uchar tiaoshi(uchar bb) /调时函数 if(P21=0) delay(5); if(P2

9、1=0) if(P23=0) delay(70); if(P23=0) bb+; if(bb=24) bb=0; if(P24=0) delay(70); if(P24=0) bb-; if(bb=-1) bb=23; return bb;uchar tiaofen(uchar cc) /调分函数 if(P22=0) delay(5); if(P22=0) if(P23=0) delay(70); if(P23=0) cc+; if(cc=60) cc=0; if(P24=0) delay(70); if(P24=0) cc-; if(cc=-1) cc=59; return cc;方案二#i

10、nclude /包含头文件#include /包含头文件#define uchar unsigned char /数据类型定义uchar n=31; /定义月份天数变量并初始化uchar ms=0; /定义毫秒变量并初始化uchar h1=0,m1=0,s1=0; /定义计时时、分、秒变量并初始化uchar h2=0,m2=1,s2=1; /定义定时时、分、秒变量并初始化 uchar year=7,month=9,day=8; /定义年、月、日变量并初始化uchar wday=6; /定义星期变量并初始化uchar *h=&h1,*m=&m1,*s=&s1; /定义显视位变量并初始化uchar

11、 *p; /定义调节指针uchar k1=0,k2=0,k3=0,k4=0,k5=0; /定义控制变量并初始化uchar counter=0; /定义铃声节拍变量并初始化uchar count=0; /定义铃声音符变量并初始化sbit sound=P10; /定义铃声输出位uchar a8=1,2,3,4,5,6,7; /定义显视输出位数组并初始化uchar code tt12=0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x40,0x00; /数码管显视代码uchar code array= 0x18, 0x30, 0x1C, 0x1

12、0, 0x20, 0x40, 0x1C, 0x10, 0x18, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x18, 0x40, 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x20, 0x18, 0x20, 0x20, 0x80, 0xFF, 0x00, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x10, 0x18, 0x20, 0x15, 0x20, 0x1C, 0xff, ; /arrayi=0x00 代表歌曲演唱完毕 /arrayi=0

13、xff 代表是休止符uchar leap(uchar year) /判断是否闰年并返回二月份的天数year+=2000; /闰年返回29,平年返回28 if(year%4=0) if(year%100=0) if(year%400=0) return 29; else return 28; else return 29; else return 28;uchar mon(uchar month) /计算并返回每个月的天数 switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12:return 31;break;

14、 /1,3,5,7,8,10,12月每月31天 case 4: case 6: case 9: case 11:return 30;break; /4,6,9,11月每月30天 case 2: return leap(year);break;/返回二月份的天数 default:break; void music(void) /铃声音乐 功 能:音乐节拍控制 counter+; /节拍次数计数 if(counter=arraycount+1) /节拍次数判断 count+=2; /音符变换 counter=0; /清0节拍数 if(count=192) /判断是否唱完一曲 count=0; /返

15、回第一个音符 void timer1(void)interrupt 1 using 1 /音调设置 功 能:音乐频率设置 sound=sound; /铃声输出 TH0=(0xffff-30*arraycount)8; /音频设置 TL0=(0xffff-30*arraycount)&0xff; void timer3(void) interrupt 3 using 3 /计时中断 功 能:中断计时 TH1=0xd8; /计数器初值重载 TL1=0xef; /定义单位节拍的延时大小为10ms if(k5)music(); /调用闹铃音乐lns else TR0=0; /达到所设闹铃时间长度关铃声

16、 if(+ms=100) /计时一秒钟 ms=0; if(+s1=60) /计时一分钟 s1=0; if(+m1=60) /计时一小时 m1=0; if(+h1=24) /计时一天n=mon(month); /取每月的天数if(+dayn) /计时一个月 day=1; if(+month12)/计时一年 month=1; year+; if(+wday6)/星期计数 wday=0; k5-; /闹铃时间长度倒记时 if(h1=h2&m1=m2) /判断是否到定时时刻 TR0=1; /开铃声中断lns k5=s2; /设置闹铃时间长度 void d3(void) /显示输出 uchar sel=

17、0x80,i ; /定义sel为位选通变量并初使化 if(k2) /判断是否处于调时状态 if(k2=4)a0=a1=a4=a6=a7=10; /星期显示设置 if(k1&(k3-=0) k3=255; /设置位调节闪烁初值 for(i=0;i200) /判断是否闪烁 if (k1=1&(i=6|i=7)P2=0xff; /时位闪烁 else if(k1=2&(i=3|i=4)P2=0xff; /分位闪烁 else if(k1=3&(i=0|i=1)P2=0xff; /秒位闪烁 else P2=sel; /非闪烁状态 else P2=sel; /非闪烁状态 sel=sel1; /显示位移位 v

18、oid d2(void) / 功 能:循环调用 while(1) a0=*s%10; /给显示数组赋值 a1=*s/10; a2=10; a3=*m%10; a4=*m/10; a5=10; a6=*h%10; a7=*h/10; d3(); /调用显示输出函数 void d1(void) /功 能:中断设置 TMOD=0x11; TH1=0xff; TH0=0xff; TL1=0xff; TL0=0xff; IE=0x8f; TR1=1;IT0=1; IT1=1; IP=0x02; void main () /功 能:程序入口,调用功能子函数d1(); /调用中断位设置函数 d2();voi

19、d d5(void) /显示菜单调节函数 switch(k2) case 1:h=&h1; m=&m1; s=&s1; break; /菜单1:显示时钟时间 case 2:h=&h2; m=&m2; s=&s2; break; /菜单2:显示定时时刻 case 3:h=&year;m=&month;s=&day; break; /菜单3:显示日历年月日 case 4:h=&wday;m=&wday; s=&wday;break; /菜单4:显示星期0-6 default:k2=0;h=&h1;m=&m1;s=&s1; break; /复位显示 void d7(void) /调节限制函数 if(k2=1|k2=2) /计时与定时限制 if (k1=1&*p=24) *p=0; /小时限制 else if(*p=60) *p=0;

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

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