电子时钟实习报告_第1页
电子时钟实习报告_第2页
电子时钟实习报告_第3页
电子时钟实习报告_第4页
电子时钟实习报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机电子时钟实习报告 PAGE 19大型作业专业:班级:姓名:学号:指导老师:前言单片计算机即单片微型计算机。RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。单片机电子时钟,是利用单片机技术实现计时、时间显示、时间调整、定时调整、闹铃等功能。完成该项目能够有效的训练大家的单片机应用能力,电子时钟的设计过程中,除了应用单片机前六课题的基础知识外,还使用了外部中断技术、定时器中断技术、键盘查

2、询及动态显示技术,希望大家通过该项目的设计,对单片机应用技术有一个较深的认识。目录TOC o 1-3 h u HYPERLINK l _Toc21198 前言 PAGEREF _Toc21198 2 HYPERLINK l _Toc27688 目录 PAGEREF _Toc27688 3 HYPERLINK l _Toc25145 摘要 PAGEREF _Toc25145 4 HYPERLINK l _Toc20060 硬件描述及系统设计构思 PAGEREF _Toc20060 5 HYPERLINK l _Toc8414 1.单片机电子时钟功能 PAGEREF _Toc8414 5 HYPE

3、RLINK l _Toc7885 2. 数码管显示工作原理 PAGEREF _Toc7885 6 HYPERLINK l _Toc22031 单片机电子时钟 PAGEREF _Toc22031 7 HYPERLINK l _Toc10441 1.电路原理图 PAGEREF _Toc10441 7 HYPERLINK l _Toc25604 2.元件列表 PAGEREF _Toc25604 7 HYPERLINK l _Toc329 电子时钟程序 PAGEREF _Toc329 8 HYPERLINK l _Toc16648 实习小结 PAGEREF _Toc16648 18 HYPERLINK

4、 l _Toc28117 参考文献 PAGEREF _Toc28117 19摘要设计目的: 通过课程设计,熟悉 89C51定时器、中断初始化编程方法,定时器应用在时间控制中程序的设计技巧。使学生巩固和加深对单片机基本知识的理解,学会查寻资料、方案设计、方案比较,以及单元电路设计计算等环节,进一步提高学生综合运用所学知识的能力,提高分析解决实际问题的能力。锻炼分析、解决电子电路问题的实际本领,通过此综合训练,为以后毕业设计打下一定的基础。设计要求:(1)上电以后自动进入计时状态,起始于00:00。(2)设计调整时间,完成时间设计。(3)定时时间,驱动闹铃。(4)采用LED数码管显示,时、分、秒采

5、用数字显示。硬件描述及系统设计构思1.单片机电子时钟功能单片机电子时钟计 时 功 能计 时 调 整定 时 显 示定 时 调 整定 时 闹 铃计 时 显 示控制器用AT89S51 , 12M晶振数码管动态扫描驱动P2口数码管段码驱动P1口闹铃驱动P1.0调整键K1P3.2(外部中断0, 正常、调时、调分、调秒)定时/正常切换键K2P3.3时间参数低位加1键K3P3.4时间参数高位加1键K4P3.52. 数码管显示工作原理数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段

6、的阴极接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便设计的,分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8 位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留

7、性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。单片机电子时钟1.电路原理图2.元件列表单片机AT89S51一片1M晶振1个共阳数码管6只PNP管85507只74LS2441片蜂鸣器1个微动按键1只10UF电容5个2.7K电阻7只104瓷片电容4只30P瓷片电容2只200电阻4只560电阻8只10K电阻12只100电阻1只电子时钟程序#include #include uchar H=0,M=0,S=0,T_Count=0;/设置时间初值,进行时间计数 uchar H_Set=11,M_Set=11,S_Se

8、t=11;/设定闹铃时间 uchar *Sp=&S,*Mp=&M,*Hp=&H;/时间指针 uchar Select2Seg=0;/调时闪烁位号 uchar Select2Seg_=0;/定时闪烁位号 uchar *Select2SegP;/闪烁位号指针 uchar H_h=0,H_l=0,M_h=0,M_l=0,S_h=0,S_l=0;/时分秒的各位的数值-用于显示 uchar SaveH_h=0,SaveH_l=0,SaveM_h=0,SaveM_l=0,SaveS_h=0,SaveS_l=0;/ 时分秒的各位的数值-用于调时间时的数据保护 uchar light=0; /灯亮bit Ke

9、y3Down=1;/允许 KEY3 按键值增加1 的标志(个位加一) bit Key4Down=1;/允许 KEY4 按键值增加1 的标志(十位加一) bit SetTime=0;/定时标志 1 为定时 24 /*蜂鸣器报警*/ void SPK(void) if(SetTime=0)spk=0; /闹铃响 void TunOffSPK(void) spk=1;/闹铃不响 void init_INT0(void)/*外部中断 0 初始化*/ EA=1; /打开中断总允许位EX0=1;/打开外部中断0允许位PX0=0;/设定外部外部中断0为低优先级中断 IT0=1;/设置外部中断0为边沿(下降沿

10、)触发方式 void init_t0() /*t0-初始化为 50mS 定时,并启动*/ TMOD=(TMOD&0 xF0)|0 x01;/定时器 0,方式 1:16位定时。 TH0=0 x3C;/设置定时器T0初值TL0=0 xB0; EA=1; /打开中断总允许位ET0=1;/允许T0中断 PT0=1;/设定定时器T0为高优先级中断 TR0=1;/启动T0 void init_INT1(void) /*外部中断 1 初始化*/ EA=1; /打开中断总允许位EX1=1; /打开外部中断1允许位PX1=0; /设定外部外部中断1为低优先级中断IT1=1; /设置外部中断1为边沿(下降沿)触发

11、方式 /*t1-初始化为 50mS 定时,并启动*/ void init_t1(void) TMOD=(TMOD&0 x0F)|0 x10;/定时器 1,方式 1:16位定时TH1=0 x3C; /设置定时器T1初值TL1=0 xB0; EA=1; /打开中断总允许位ET1=1; /允许T1中断PT1=0; /设定定时器T1为高优先级中断TR1=1; /启动T1 /*外部中断 0 子程序*/ void Int0(void) interrupt 0 using 2 if(SetTime)/判断定时标志是否为0Select2SegP=&Select2Seg_;/此时为定时闪烁else Select

12、2SegP=&Select2Seg;/否则此时是调时闪烁if(+(*Select2SegP)=4) *Select2SegP=0;/当闪烁的位数为4时则停止闪烁即闪烁的位数为0 TunOffSPK();/蜂鸣器不响 /*T0 定时 1S 中断子程序 1*/ void Timer0() interrupt 1 using 1 TH0=0 x3C;/ 设置定时器T0初值TL0=0 xB0; if(T_Count+)=20)/判断循环是否到达20S+;/秒位开始加1T_Count=0;/把循环置零重新开始循环 spk=spk ; if(S=60)M+;S=0;/如果秒位到达60,则分钟位加1,秒位置

13、0if(M=60)H+;M=0; /如果分钟位为60,则时位开始加1,分钟位置零 if(H=24)H=0;/如果时位达到24,时位置零if(H=H_Set)&(M=M_Set)&(S=S_Set)/判断定时时间是否到达SPK(); /执行此子程序即蜂鸣器响起 void Int1(void) interrupt 2/*外部中断 1 子程序*/ SetTime=SetTime;/此时不再定时*Select2SegP=0;/此时闪烁的位数置为0 TunOffSPK();/执行子程序蜂鸣器停止鸣笛 void Timer1() interrupt 3 using 3 /*T1 定时 50mS 中断子程序

14、 1*/ TH1=0 x3C; /给定时器T1的高8位赋初值*/ TL1=0 xB0; /给定时器T1的低8位赋初值*/if(light+8)/数码管从0亮到8 light=0; /对其置零uchar code DIY_data=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 xBF,0 xFF;/数码管数据定义 /0-9,-,不亮 5 uchar code WX_data=0 xfe,0 xFd,0 xfb,0 xf7,0 xef,0 xdf;/自左到右分别是面 /*数码管循环显示,N 为位序号,D为数据序号 voi

15、d DSP_Data(uchar N,uchar D) uchar i=N,j=D;/定义i,j seg7_data=DIY_dataN;/把数码管的各个数据赋值给P0口 wx=WX_dataD; /把数码管的选择位赋给P2口void DLYmS(uchar N)/*软件延时 N mS*/ uchar k=125;/把25赋值给Kfor(;N0;N-) for(;k0;k-);/利用FOR循环实现延时 void testKey2(void) if(SetTime)/判断是否定时 Sp=&S_Set;Mp=&M_Set;Hp=&H_Set;/分别把调时位赋值给时分秒Select2SegP=&Se

16、lect2Seg_; /此时闪烁位为定时 else Sp=&S;Mp=&M;Hp=&H; /否则为调时,把时间赋值给时分秒 Select2SegP=&Select2Seg;/此时闪烁位为调时闪烁 void Scan_kl(void) /检测 KEY3(调整时间个位键)子程序 if(kl=0)&( Key3Down=1) /*如果kl键按下与允许各位加1*/ Key3Down=0;/*此时不允许各位加1*/testKey2(); /*执行此子程序*/ TunOffSPK(); /*执行此程序*/switch(*Select2SegP) /判断闪烁位case 0:break; /如果输出为0则停止

17、此程序case 1:SaveS_h=*Sp/10;/保护 秒 十位 *Sp+=1; /秒位加1*Sp=SaveS_h*10+*Sp%10;/高位的数乘以10与所调置的数对10求余的和即使所要调制的数 break;case 2:SaveM_h=*Mp/10;/保护 分 十位 11 *Mp+=1; /分位加1*Mp=SaveM_h*10+*Mp%10;/高位的数乘以10与所调置的数对10求余的和即使所要调制的数break; case 3:SaveH_h=*Hp/10;/保护 时 十位 *Hp+=1; /*时位加1*/ if(SaveH_h3) *Hp=SaveH_h*10; /*如果时对10求余大

18、于3时那么时位就等于高位乘以10*/break; default:break; /*如果皆没有时就跳出此程序*/ if(kl=1)Key3Down=1; /*如果kl等于1时,则允许低为加1*/ void Scan_kh(void)/*检测 KEY4(调整时间十位键)子程序*/ if(kh=0)&( Key4Down=1)/*如果kh键按下与允许高位加1*/ Key4Down=0;/*不允许高位加1*/ testKey2(); /*执行此程序*/TunOffSPK();/*执行此程序*/ switch(*Select2SegP) /*判断闪烁指针位*/ case 0:break; /*输出为0

19、时停止此程序*/ case 1:SaveS_l=*Sp%10;/保护 秒 个位 *Sp+=10;/*秒位加10*/ if(*Sp=60)*Sp=SaveS_l;/*如果秒位大于60时,则把低位的数赋值给秒位*/ break; case 2:SaveM_l=*Mp%10;/保护 分 个位 2 *Mp+=10;/*分位加10*/ if(*Mp=60)*Mp=SaveM_l; /*如果分位的数大于60则此时分位数就等于分的低位数值*/break;case 3:SaveH_l=*Hp%10;/保护 时 个位 *Hp+=10;/*时位加10*/ if(SaveH_l3)if(*Hp/101)*Hp=Sa

20、veH_l; /*如果时位数的低位数大于3;如果时位的数除以10商大于1则时位的数就等于时位数的低位*/else if(*Hp/102)*Hp=SaveH_l; /*如果时位的数除以10商大于2则时的数等于时位数的低位数*/break; default:break; /*否则跳出此程序*/ if(kh=1)Key4Down=1;/*如果kh键不按下则允许高位调时*/ void Display(void) /*显示程序*/ testKey2();/*执行此子程序*/ if(*Select2SegP!=1|light4) /*如果闪烁位号位不为1或数码管显示数大于4时*/ DSP_Data(*Sp

21、%10,0);DLYmS(N1); /*0号数码管显示秒位的个位数即秒数对10求余*/ DSP_Data(*Sp/10,1);DLYmS(N1); /*1号数码管对秒位的十位显示即十位的数等于秒位数对10求商得到然后延时*/ if(*Select2SegP!=2|light4) /*如果闪烁位号位不为2或数码管显示数大于4时*/DSP_Data(*Mp%10,2);DLYmS(N1); /*2号数码管对分位的个位显示即分位数对10求余然后延时*/ DSP_Data(*Mp/10,3);DLYmS(N1); /*3号数码管对分位的十位显示即分位数对10求商然后延时*/ if(*Select2SegP!=3|light4)/*如果闪烁位号位不为3或数码管显示数大于4时*/ DSP_Data(*Hp%10,4);DLYmS(N1); /*4号数码管对时位的个位显示即时位数对10求余然后延时*/

温馨提示

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

评论

0/150

提交评论