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

    基于51单片机的自动打铃系统.docx

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

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

    基于51单片机的自动打铃系统.docx

    大连民族学院2007级电子信息工程专业单片机系统课程设计报告机电信息工程学院单片机系统课程设计报告系:电子信息工程系专 业:班 级:072班设计题目:自动打铃系统设计学生姓名:张锡斌仇龙佳指导教师:刘忠富于为民完成日期:2010年5月31日一、设计任务和性能指标 21.1 设计任务21.2 性能指标2二、设计方案2三、系统硬件设置33.1、 单片机最小系统 33.2、 钟电路 DS130243.3、 显示电路的设计 53.4、 键盘接口的设计 53.5、 铃电路的设计 6四、系统软件设计4.1 程序流程图74.2 主程序设计 10124.3 显示子程序的设计 11五、调试及性能分析5.1 调试步骤125.2 性能分析12六、心得体会12参考文献13附录1系统硬件电路图 14附录2程序清单15大连民族学院2007级电子信息工程专业单片机系统课程设计报告一、设计任务和性能指标1.1 设计任务用单片机器件为主体,设计一台自动打铃系统。(一)基本要求1、基本计时和显示功能(用12小时制显示)。包括上下午标志,时、分的数 字显示,秒信号指示。2、能设置当前时间(含上、下午,时,分)。3、能实现基本打铃功能,规定:上午 6: 00起床铃:打铃5秒、停2秒、 再打铃5秒。下午10: 30熄灯铃:打铃5秒、停2秒、再打铃5秒。铃声可 用小喇叭播放,凡是用到铃声功能的均按此处理。(二)发挥部分1、增加整点报时功能,整点时响铃 5秒,要求有控制启动和关闭功能。2、增加调整起床铃、熄灯铃时间的功能。3、增设上午4节课的上下课打铃功能,规定如下: 7. 30上课,8. 20下 课:8. 30上课,9. 20下课;9. 40上课,10. 30下课;10. 40上课,11. 30 下课;每次铃声5秒。4、特色和创新自选。1.2 性能指标1 .时钟:上下午(1位)、时(2位)、分(2位)2 .校对键:确认键/设置键、右移键/灭铃键、加键、减键3 .响铃:蜂鸣器二.设计方案二、设计方案按照系统设计的功能的要求,初步确定设计系统由主控模块、时钟模块、显示模块、键扫描接口电路共四个模块组成,电路系统构成框图如图1.1所示通过内部定时产生中断,从而驱动电铃打铃。电路系统构成框图如图1.1所示。主控芯片使用51系歹AT89C52单片机,采用高性能的静态80C51设计,由先进工艺 制造,并带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位COMS 微处理芯片,市场应用最多。时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带 RAM的 实时时钟芯片DS1302。采用DS1302作为主要计时芯片、可以做到计时准确。 更重要的是,DS1302可以在很小的电流的后备电源 (2.55.5V电源,在2.5V时 耗电小于300nA)下继续计时,并可编程选择多种充电电流对后备电源进行慢速 充电,可以保证后备电源基本不耗电。 采用串行数据传输,与单片机硬件连接简 单,如果使用时钟芯片DS12887,将采用并行数据传输,占用更多的硬件资源。 因此为节省单片机端口,时钟芯片采用 DS1302。1.1硬件电路设计设定51单片机工作在定时器工作方式1,每100ms产生一次中断,利用软 件将基准100ms单元进行累加,当定时器产生10次中断就产生1S信号,这时 秒单元加1。同理,对分单元时单元和上下午单元计数,从而产生秒,分,时, 上下午的值,通过五位七段显示器进行显示。由于动态显示法需要数据锁存等硬 件,接口较复杂,考虑显示只有五位,且系统没有其他复杂的处理任务,所以采 用动态扫描实现LED的显示。本系统采用四个按键,1键为功能键,另外三个做控制键。按一下 1键进入 时间设置,接着按2键选择需要调整的位,然后按 3和4键进行时调整,按3 键进行加数,按4键进行减数,按两下1键调整结束时钟继续走动。当时钟时间 与设置时间一致时,驱动电路动作进行打铃,按时间点不同打铃规则不同,此时 按2键强制灭铃。三、系统硬件设置3.1单片机最小系统单片机最小应用系统的设计电路原理图,如图3.1所示。本次设计我们选用了 AT89C52单片机。该单片机要求电源电压为+5V,所 以40号引脚接+5V电源,20号脚接地。因为AT89C52单片机的片内ROM为 4KB, 128位RAM,根据初步分析,本设计程序应该小于4KB,故无须外扩的ROM ,所以单片机应直接访问片内程序存储器,单片机的31号脚接高电平。AT89C52单片机是一种时序逻辑电路,必须有脉冲信号才能正常工作,而时钟 脉冲是由振荡电路提供的,时钟可以由内部方式或外部方式产生,内部振荡方式, 只要接上两个微调电容和一个晶振即可,其中微调电容选用33pF其作用是稳定振荡频率,快速起振。本次毕业设计我们采用内部振荡方式,外接晶振为11.0592MHz,振荡周期=1/11.0592仙s,时 钟周期=2/11.0592仙s,机器周期=12/11.0592 s,指令周期=1 4 gAT89C52在开机时需复位,以便 CPU及其它功能部件都处于确定的初始状 态,有利于进行下一步操作。MCS-51系列单片机的有效复位信号两个机器周期 以上的高电平。其复位的实现通常可以采用开机上电复位和外部手动复位两种方式。图中采用的是开机上电复位,复位电路由 10N F的电解电容和8.2K电阻组 成,其时间常数为T=RC, T=10pfx 8.2k, T=82ms大于10ms,所以单片机能够 有效复位,单片机只要保持82ms以上的高电平就能使单片机有效复位UI AT89C511FLOVCCPL1P0.0Pl.2PD.lPl 3P0.2Pl.4P0,3402弱3哭4375366交7rlrUs4Pl.6P口 5Pl.7P0,634S3393210Kj 1rU. fP3.0 EA/VPPP3ALSPROGF3.2 DSENP33 P2.DP3.4P2,1P35P2.2P33P2331113012弱ir2114翌u_2316斜172513rS.fr2.4XTAL2_P2,5XTAIHD/P37VSS WRJT3.62 口 1120r图3.1单片机最小应用系统3.2 时钟电路 DS1302(1)性能特性实时时钟可对秒,分,时等进行计数,存在高速数据暂存的 31*8位RAM , 最少引脚的串行I/O 口; 2.55.5V电压工作范围25V耗电小于300nA;用于时 钟或RAM数据读/写的单字节或多字节数据传送方式; 简单的3线接口;可选的 慢速充电的能力。DS1302时钟芯片包括实时时钟和31字节的静态RAM,它经过一个简单的 串行接口与微处理器通信,实时时钟提供秒,分,时等信息,时钟运行可以采用 24H,或带AM/PM的12H格式,采用三线接口与 CPU进行同眇通信,并可采 用突发方式一次传送多个字节的时钟信号或 RAM数据。DS1302有主电源/后备 电源双电源引脚;(2)工作原理DS1302在任何数据传送时必须先初始化, 把RST引脚置为高电平,然后把 8位地址和命令装入移位寄存器,数据在 SCLK的上升沿被输入,无论是读周期 还是写周期开始8位指定40个寄存器中哪个将被访问到,在开始8个时钟周期, 把命令字节装入歌位寄存器之后,另外的时钟周期在闱时操作时输出数据, 在写 操作时写入数据,时钟脉冲的个数在单位字节下为8加8,在多字节方式下为8加字节数,最大可达248字节数。为了提高对32个地址的寻址能力,可以把时钟或 RAM寄存器规定为多字 节方式,在多字节方式中,读或写从地址0的位0开始,必须管按数据传送的次序电先的8个寄存器。但是当以多个字节写 RAM时,为了传送数据不必写所有 31字节,不管是否写了全部31字节,所写的每个字节都将传送至 RAM。时钟暂停:秒寄存器的位7定义位时钟暂停位,当它为1时,DS1302停止振荡, 进入低功耗的备份方式,通常在对 DS1302进行写操作时,停止振荡,当它为 0 时时钟将开始启动。8051通过串口向DS1302写数据的程序框图如图3.2,其中,Px可以是8051 单片机的任何一位I/O 口,注意因为DS1302的数据发送或接收时序和8051的用 行口不完全一致,因此,需要在TXD的输出端加反相器,另外,接收数据时,不能以申 行口的接收方式接收,必须将用行口当作普通I/O 口进行数据接收.DS1302的晶振选用32.768KHZ,电容推荐值为6PF,因为振荡频率较低,也可 以不接电容,对计时精度影响不大。图3.2 DS1302写数据的程序框图3.3 显示电路的设计显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路,数 码管分别为上下午,十时,时,十分,分显示,显示时采用用行口输出控制数码 管,其中P2.2P2.4口控制数码管的位选,低电平数码管显示,动态扫描显示中 单片机P0 口输出数码管的段码。3.4 键盘接口的设计31P3 2XTAL1图3.4键盘电路本次设计的控制电路是由4个按键组成的,用以实现时钟信息的调整。其电 路图如图3.4所示,按键与P1 口的P1.0至|J P1.3相连。由于P1 口内有上拉电阻, 所以该图中上拉电阻可以省去。四个按键中, S1为数据+1键,S2为数据-1键, S3为数据选择键,S4为强制打铃或者强制关闭键。3.5 打铃电路的设计本次设计打铃电路如图3.5所示,单片机通过P3.7控制蜂鸣器是否发出声响。 当时间与预定打铃时间相同时,单片机通过P3.7输出为1KHz的方波,使得蜂鸣器发出声响。图中PNP三极管作用是电流放大,以保证蜂鸣器能正常发出声 首。UI AT89C5I1 JP1.0 VCCPl.l P0.CP1J2 P0,lPl 3 PO.2Pl.4 P03Pl J P0 4Pl.6 PQ.5PE7 PO.6RSTP0.7P3.0 EA/VPPP3ALEZPROGP3.2 DSENP3.3P2,0P3 4P2.1P3.5P2.2P3.6P2.3P3.7P2.4XT 应 L2_P2.5 XTAHOfP3.7VSS WKZP3.6402393宛437536635734833Q321031113012291321142215231624172518261920VCC9012BELL27图3.5打铃电路四、系统软件设计4.1程序流程图初始化参数设置调用键盘子程序调用显示子程序调用控制子程序主程序流程图定时中断程序流程图显示程序流程图4.2主程序设计void main()uchar NowKey;uchar BeforKey=0xff;uchar KeyCount=0;uchar i=0;AlarmSingal=0;RayFlag=1;RayFlag2=1;TMOD=0x10;/ 设置 T1EA=1;ET1=1;TH1=0x3c;TL1=0xb0;TR1=1;while(1) D_Scan(TimeData,0);/动态扫描按键控制 if(KeyCount=2) KeyCount=0; NowKey=GetKey(); if(NowKey!=BeforKey)switch (NowKey) case 1:TimeSet(); break;case 2:AlarmSingal=0; break;default: break; BeforKey=NowKey;else KeyCount+;4.3显示子程序的设计void D_Scan(uchar *ShowAddress,uchar FlagBit) .uchar ShowBit;uchar Show;for(ShowBit=0;ShowBit<5;ShowBit+)if(FlagBit!=5)switch(ShowBit)case 0:Show=BCD_to_Text(*ShowAddress)%10);break;case 1:Show=BCD_to_Text(*ShowAddress)/10);break;case 2:Show=BCD_to_Text(*(ShowAddress+1)%10);break;case 3:Show=BCD_to_Text(*(ShowAddress+1)/10);break;case 4:Show=BCD_to_Text(*(ShowAddress+2)%10);break; 一一P2=0xff;switch(FlagBit)case 0:P0=Show;break;case 1:/股分闪动if(RayFlag2 && (ShowBit=0|ShowBit=1)P0=0x40;else P0=Show;break;case 2:/世时闪动if(RayFlag2 && (ShowBit=2|ShowBit=3)P0=0x40;else P0=Show;break;case 3:/我上下午闪动if(RayFlag2 && ShowBit=4)P0=0x40;else P0=Show;break;P2=GetClockBit(ShowBit);Delay(1);五、调试及性能分析5.1 调试步骤进入调试状态后应该在关键的地方设置断点然后按步运行,同时观察参数的变化,通过变化来判断程序运行的过程即可找出程序中混乱的部分,进行改正, 这需要对软件熟练的掌握和对语言程序的很好的理解,实验板搭建成功后,我们就进入了程序的设计和调试阶段,开始编写程序时很顺利,但是后来在调试过程 中出现了很多的错误,比如定时器准确度的设置,子程序的调用问题,最困难的 就是对没步程序执行顺序的分析,由于程序中一些语句的错误理解和执行顺序的 判断失误,让我掉进了误区,耽误了很长时间,最后在同学的帮助下终于找到了 错误的关键点,更正成功了。看来对程序的调试能力我还需要加强, 程序的调试 需要耐心,而且需要熟练掌握软件的跟部分功能。5.2 性能分析自动打铃系统在学校很工厂和日常生活中应用广泛, 原理主要是通过单片机 的计数器进行计时,同时通过定时器中断扫描定时时间点来判断是否到了打铃时 问,到了打铃,同时可以手动灭铃,主要功能即计时和打铃,相当于闹钟,通过 计时器DS1302的使用使电路在断电后依然有后备电源进行计数, 设计很人性化。 还可以通过按键来设置时间,如果想深入设计,也可以通过键盘来设置闹钟时间, 使系统更加方便。六、心得体会本系统被子广泛用企事业单位,设计比较简单。经过一学期的学习,使我对单 片机有了初步的认识,了解了一些软件编程的技巧。 经过这次的课程设计,使我 学会了课堂上学不到的知识,颇有一番感受,对于单片机更加的了解了,对各种 器件的使用方法更加熟悉,学会了电路的基本设计思路和原理,掌握单片机设计 步骤,知道这门课程在工作中的重要性,因为需要大量的资料,所以我和我的合作 者到图书馆查阅了大量的资料,也利用了互联网查找大量的资料,经过一番努力, 第一周我们完成了电路图的设计,第二周我们领取了所需的元器件,开始了电路 的装调,经过几天的努力,终于把电路装好了,但电路调试过程并不是那么的容 易,但经过调试我们发现了电路的一些问题,但在老师和同学们的同共努力下都 得到解决,最终看到了成果.我感谢老师,课程设计加深了学生对所学课程理论的理 解,扩展了教学中的实验内容和要求,积累了实践体验和经验,让我们提前感受到 毕业设计的大致过程,进而能顺利进入毕业设计,提高毕业设计质量和学生实际应 用能力。参考文献1严仲兴,王熔熔:单片机原理与应用,中国计划出版社,2001 .72江力:单片机原理与应用技术,清华大学出版社,2006.53徐爱钧,彭秀华:单片机高级语言C51windows环境编程与应用,北京电 子工业出版社,2001.74求是科技:单片机典型模块设计实例导航,北京人民邮电出版社,2004.55康华光:电子技术基础:模拟部分,北京高等教育出版社,1999.66江太辉:MCS-51系列单片机原理与应用.广州:华南理工大学出版社,2004.6(7)刘海宽 单片机实验与实践教程 东南大学出版社2009年1月出版(8)杨易德 模拟电路 重庆大学出版社2006年10月出版(9)廖先芸 电子技术实践与训练 高等教育出版社2005年6月出版(10)郭勇EDA技术基础 机械工业出版社2009年1月出版附录1系统硬件电路图I卜T"T, 亭M少v 7 T M*2 A u- u /,u.H I 耳* q 胃 pqq*" 1 -* " 1* »« kj3/1.,一口,中口不0 1!441B/dr-/dI*. Hib A.D -A £>n&A&A&AAA 工丫件.事耳辱生辱各辱辱.LLyLdLJi: ;| LLT 对& L-JL 方,IF5、- 1可,U,E| 1 Fl, 她脚附录2程序清单#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar TimeData=0,0,0;/ 时钟数据uchar sec;/秒uchar i;uchar counter=0; /5寸钟变量uchar RayFlag1=0;/秒闪标志 1sbit RayFlag=P3A3;/6>闪sbit RayFlag2=P3A2;/眇闪标志 2sbit AlarmSingal=P3A7;闹铃信号uchar code BellData=0,0,0,0,0,0,0,0,0,1;/上下午标志uchar code BellDataH=6,7,8,8,9,9,10,10,11,10;/uchar code BellDataL=0,30,20,30,20,40,30,40,30,30;/分uchar BCD_to_Text(uchar Data);uchar GetClockBit(uchar ShowBit);void Delay(uint count);void D_Scan(uchar *ShowAddress,uchar FlagBit);uchar GetKey();void TimeSet();主程序/void main()uchar NowKey;uchar BeforKey=0xff;uchar KeyCount=0;uchar i=0;AlarmSingal=0;RayFlag=1;RayFlag2=1;TMOD=0x10;/设置 T1EA=1;ET1=1;TH1=0x3c;TL1=0xb0;TR1=1;while(1)D_Scan(TimeData,0);/劭态扫描/按键控制if(KeyCount=2) KeyCount=0;NowKey=GetKey(); if(NowKey!=BeforKey) switch (NowKey)case 1:TimeSet();break;case 2:AlarmSingal=0;break;default:break;BeforKey=NowKey;else KeyCount+;/DS1302 #ifndef _DS1302_H_#define DS1302 H0x000x000x80/24时制控制/开始走时/停止走时#define Time_12_Hour#define Time_Start#define Time_Stop#define DS1302_SECOND0x80/DS1302各寄存器操作命令定义#define DS1302_MINUTE0x82#define DS1302_HOUR0x84#define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C#define DS1302_WRITE 0x8E#define DS1302_POWER 0x90#define BCD2DEC(X) (X&0x70)>>4)*10 + (X&0x0F) 用于将 BCD 码转成十 进制的宏#define DEC2BCD(X) (X/10)<<4 | (X%10)用于将十进制转成BCD码的宏sbit DS1302_CLK = P1A5;实时时钟时钟线引脚sbit DS1302_IO = PW6;实时时钟数据线引脚sbit DS1302_RST = Pi4;实时时钟复位线弓I脚sbit ACC0 = ACCA0;sbit ACC7 = ACCA7;typedef struct _SYSTEMTIME_/定义的时间类型结构体,全部数为十进制unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;SYSTEMTIME;实时时钟写入一字节(内部函数)void DS1302InputByte(unsigned char d)unsigned char i;ACC = d;for(i=8; i>0; i-)DS1302_IO = ACC0;相当于汇编中的 RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC >> 1;/实时时钟读取一字节(内部函数) unsigned char DS1302OutputByte(void)unsigned char i;for(i=8; i>0; i-)ACC = ACC >>1;ACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;return(ACC);/相当于汇编中的RRC/写 DS1302,ucAddr: DS1302 地址,ucData:要写的数据 void Write1302(unsigned char ucAddr, unsigned char ucDa)DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr);DS1302InputByte(ucDa);DS1302_CLK = 1;DS1302_RST = 0;/地址,命令/写IByte数据/读取DS1302某地址的数据unsigned char Read1302(unsigned char ucAddr) unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); ucData = DS1302OutputByte();DS1302_CLK = 1;DS1302_RST = 0; return(ucData);/地址,命令/读IByte数据/读取时间函数void DS1302_GetTime(SYSTEMTIME *Time) unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = BCD2DEC(ReadValue&0x7F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = BCD2DEC(ReadValue);ReadValue = Read1302(DS1302_HOUR);Time->Hour = BCD2DEC(ReadValue&0x7F);ReadValue = Read1302(DS1302_DAY);Time->Day = BCD2DEC(ReadValue);ReadValue = Read1302(DS1302_WEEK);Time->Week = BCD2DEC(ReadValue);ReadValue = BCD2DEC(DS1302_MONTH);Time->Month = BCD2DEC(ReadValue);ReadValue = Read1302(DS1302_YEAR);Time->Year = BCD2DEC(ReadValue);/设置时间函数void DS1302_SetTime(SYSTEMTIME *Time)Write1302(DS1302_WRITE,0x00);/关闭写保护Write1302(DS1302_YEAR,DEC2BCD(Time->Year);Write1302(DS1302_MONTH,DEC2BCD(Time->Month);Write1302(DS1302_WEEK,DEC2BCD(Time->Week);Write1302(DS1302_DAY,DEC2BCD(Time->Day);Write1302(DS1302_HOUR,DEC2BCD(Time->Hour)|Time_12_Hour);Write1302(DS1302_MINUTE,DEC2BCD(Time->Minute);Write1302(DS1302_SECOND,DEC2BCD(Time->Second)|Time_Start);Write1302(DS1302_WRITE,0x80);/打开写保护/初始化DS1302void DS1302_Initial(void)Write1302(DS1302_WRITE,0x00);/关闭写保护Write1302(DS1302_SECOND,Time_Stop);/亭止计时Write1302(DS1302_HOUR,Time_12_Hour);/24 时制Write1302(DS1302_POWER,0xA6);单二极管,4K 电阻充电Write1302(DS1302_WRITE,0x80);/打开写保护#endif/T1中断,产生时钟void Timer1(void)interrupt 3 using 1TH1=0x3c;TL1=0xb0;if(counter%10=0)RayFlag2=RayFlag2;if(RayFlag1)RayFlag=0;else RayFlag=RayFlag;if(counter=20)counter=0;if(sec=59) sec=0;if(TimeData0=59) TimeData0=0;if(TimeData1=11)TimeData1=0;if(TimeData2=1) TimeData2=0;else TimeData2+;/上下午else TimeData1+;/Melse TimeData0+;/分else sec+於for(i=0;i<10;i+) if(BellDatai=TimeData2)&&(BellDataHi=TimeData1) &&(BellDataLi=TimeData0)if(i=0|i=9)if(sec=0) AlarmSingal=0;if(sec=5)AlarmSingal=1;if(sec=7)AlarmSingal=0;if(sec=12) AlarmSingal=1; else AlarmSingal=0;if(sec=5) AlarmSingal=1; break;else AlarmSingal=1;else counter+;/bcd码转换成字形码的程序uchar BCD_to_Text(uchar Data)一一switch(Data)case 0:return 0xC0;case 1:return 0xF9;case 2:return 0xA4;case 3:return 0xB0;case 4:return 0x99;case 5:return 0x92;case 6:return 0x82;case 7:return 0xF8;case 8:return 0x80;case 9:return 0x90; /得到位地址的程序uchar GetClockBit(uchar ShowBit)switch(ShowBit)case 0:return 0xfe;case 1:return 0xfd;case 2:return 0xfb;case 3:return 0xf7;case 4:return 0xef;/ 延时 count个 ms的程序void Delay(uint count) uint i,j;for(i=count;i>0;i-) for(j=100;j>0;j-);/ 动态扫描的程序 void D_Scan(uchar *ShowAddress,uchar FlagBit).uchar ShowBit;uchar Show;for(ShowBit=0;ShowBit<5;ShowBit+)if(FlagBit!=5)switch(ShowBit)case 0:Show=BCD_to_Text(*ShowAddress)%10);break;case 1:Show=BCD_to_Text(*ShowAddress)/10);break;case 2:Show=BCD_to_Text(*(ShowAddress+1)%10);break;case 3:Show=BCD_to_Text(*(ShowAddress+1)/10);break;case 4:Show=BCD_to_Text(*(ShowAddress+2)%10);break;一一P2=0xff;switch(FlagBit) case 0:P0=Show;break;case 1:/股分闪动if(RayFlag2 && (ShowBit=0|ShowBit=1)P0=0x40;else P0=Show;break;case 2:/世时闪动if(RayFlag2 && (ShowBit=2|ShowBit=3)P0=0x40;else P0=Show;break;case 3:/我上下午闪动if(RayFlag2 && ShowBit=4)P0=0x40;else P0=Show; break;P2=GetClockBit(ShowBit);Delay(1);/得到键盘值的程序uchar GetKey()uchar p;p=P1&0x0f;switch(p) case 0

    注意事项

    本文(基于51单片机的自动打铃系统.docx)为本站会员(scccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

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




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

    三一文库
    收起
    展开