




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、实验任务及要求在焊接的电路板中,4个LED数码管,设计带有闹铃功能的数字时钟,要求:1、在4位数码管上显示当前时间。显示格式“时时分分”;”2、由LED闪动做秒显示;3、利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。二、方案论证与比较2.1数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网
2、电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现5毫秒定时中断,每产生一次中断,存储器内相应的计数值加1;若计数值达到200,则将其清零,并将方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高
3、的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度合适,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。三、各个部分的分析1)显示电路:通过4个LED显示屏显示分钟和小时两个两联的LED显示器,通过与单片机P1接口连接实现显示功能。而实现4个LED
4、灯动态显示,靠的是位选电路2)位选电路 四位共阳LED数码管,其标号分别为HourH,HourL,MinL,MinH,低电平选通,且任何时候仅有一位输出低电平,显示时对各显示器进行动态扫描,显示器分时轮流工作。虽然每次只有一个显示器显示,但是由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。P0口作为输出口控制8个发光二极管的亮灭,控制数码管的显示。因此,可以实现4个LED在我们看来同时亮,显示时间。3) 闹铃部分:使用蜂鸣器实现闹钟功能其中,buzzer端口接到单片机的P1.7输出。(端口连接在最后介绍)4) 开关部分:使用了5个开关控制整个电路的启动,修改时间,设置闹钟,关闭电路等
5、功能为查询方式典型电路。其中Setbutton为复位开关,swtich为转换模式开关,即工作模式和调时间模式,Increase为调时间模式中控制时间变化的按钮,STRAT和STOP分别为开启和结束按钮,这5个开关分别接到P2.0-P2.5端口,以控制其输入。5) 串转并电路为了进一步节省I/O口,有添加了一个额外的串转并电路由以上电路,我们将P1.0-P1.2扩展到7个I/O口,我们采用的是74HC595芯片,管脚图如下:7)复位电路整体电路图如下:四、软件设计由于汇编语言繁琐,我们采用的是C语言编程,源程序及注释如下:#include <reg52.h>#include <
6、intrins.h>/时分#define TYPE unsigned char#define HOUR 0#define MIN 1/显示状态#define NORMAL 0#define BELLTIME 1#define SETTING_N 2#define SETTING_C 3/闪烁显示#define NoMask 0#define MaskHour 1#define MaskMin 2#define MaskAll 3#define uchar unsigned char#define uint unsigned int/Bit Definition/数码管sbit HourH
7、 = P13; /低电平,数码管使能sbit HourL = P14;sbit MinH = P15;sbit MinL = P16;/蜂鸣器sbit Buzzer = P17; /低电平,蜂鸣器响/键盘sbit SetButton = P20;/按键定义,设置(正常,定时显示切换)键,时位分位转换键,增加键sbit Switch =P21;sbit Increase = P22; sbit Start = P23;sbit Stop = P24;/LEDsbit SecLed = P25; /秒显示,低电平点亮sbit ClockStartLED = P26; /闹钟定闹开始/74HC595
8、 输入管脚定义sbit SH_CP = P10;sbit DS = P11;sbit ST_CP = P12;/Function Definitionvoid delay5ms(void);void Clock();void Display();void Set();void Ring();void StopRing();void ShowANum(uchar i);void StartRing();void delaykey(void);void MaskShow(uchar Num,TYPE t);/Variable Definition/正常时间uchar hour=8;uchar mi
9、n=0;uchar sec=0;uint count=0;/闹钟定时uchar mp=1;uchar st=0;uchar cHour=8;uchar cMin=0;/模式标示uchar displayMode=NORMAL;uchar currentSelect=HOUR;/数码管数字显示编码uchar H1;uchar H2;uchar M1;uchar M2;uchar temp;uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/闪烁显示uchar MaskType=NoMask;uin
10、t blinkcount=0;/音乐uchar p=0;uchar temp=0;uchar jiepai=0;uchar yindiao=0;uchar Pai1_4=20;uchar jpLength=0;/音调数组unsigned char code music=0xFF,0xFF,0xF8,0x89,0xf9,0x59,0xfa,0x13,0xfa,0x68,0xfb,0x04,0xfb,0x90,0xfc,0x0c, 0xfc,0x44,0xfc,0xad,0xfd,0x0a,0xfd,0x34,0xfd,0X82,0xfd,0xc8,0xfe,0x06, 0xfe,0x22,0xf
11、e,0x56,0xfe,0x85,0xfe,0x9a,0xfe,0xc1,0xfe,0xe4,0xff,0x03, 0xff,0x11;/音乐编码unsigned char code Mmusic=/音阶测试/1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,/9,4,10,4,11,4,12,4,13,4,14,4,15,4,/16,4,17,4,18,4,19,4,20,4,21,4,22,4,/两只老虎1,4,2,4,3,4,1,8,1,4,2,4,3,4,1,8,3,2,4,8,5,5,3,2,4,8,5,5,5,5,6,2,5,5,4,4,3,4,1,8,5,5,6,2
12、,5,5,4,4,3,4,1,8,3,4,1,4,2,8,3,4,1,4,2,8,0xff,0x00/结束标记;void main()/设置T0,T1TMOD = 0x11; TH0 = 0x0EC; TL0 = 0x78; TH1 = 0x0F0; TL1 = 0x60;ET0=1;ET1=1;EA=1;TR0=1;/设置定时器的优先级PT0=1; /5ms标准时钟设为高优先级,保证计时的准确性PT1=0;/顺序执行(主循环)while(1)/设置何时开启T1定时器if(displayMode!=NORMAL|mp=0)TR1=1;elseTR1=0;MaskType=NoMask;/方法并
13、行Display();Display();Set();StartRing();Ring();StopRing();void Clock() interrupt 1TH0 = 0x0EC; TL0 = 0x78;count+;if(mp=0) /控制音乐节拍if(jpLength-<=0)jiepai=Mmusic2*p+1;jpLength=Pai1_4*jiepai; /控制每个音调持续多少个1/4节拍p+;if(Mmusic2*p+1=0x00)p=0; /重放/控制屏幕随乐曲闪烁if(MaskType=NoMask)MaskType=MaskAll;elseMaskType=NoM
14、ask;if(count%100=0)/控制秒灯闪烁,每秒闪一次SecLed=SecLed;void MaskClock() interrupt 3if(mp=0) /生成音调频率方波yindiao=Mmusic2*p;TH1=music2*yindiao;TL1=music2*yindiao+1;Buzzer=Buzzer;else /响铃时,屏蔽闪烁显示的功能if(displayMode=BELLTIME|displayMode=SETTING_C)TH1 = 0x0F0;TL1 = 0x60;elseTH1 = 0x0F8;TL1 = 0x30;blinkcount+;if(blinkc
15、ount>=100)blinkcount=0;if(displayMode=BELLTIME)if(MaskType=NoMask)MaskType=MaskAll;elseMaskType=NoMask;else if(displayMode=SETTING_C|displayMode=SETTING_N)if(currentSelect=HOUR)if(MaskType=NoMask)MaskType=MaskHour;elseMaskType=NoMask;if(currentSelect=MIN)if(MaskType=NoMask)MaskType=MaskMin;elseMa
16、skType=NoMask;void StartRing()if(Start=0)ClockStartLED=0;st=1;Start=1;void Ring()if(st=1&&cHour=hour&&cMin=min)/Buzzer=0;mp=0;void StopRing()if(Stop=0)Buzzer=1;mp=1;p=0;ClockStartLED=1;st=0;MaskType=NoMask;void Display()/分析COUNT,合成HOUR,MINif(count>=200)count=count-200;sec+;if(sec=
17、60)sec=0;min+;if(min=60)min=0;hour+;if(hour=25)hour=0;/显示时间if(displayMode=NORMAL|displayMode=SETTING_N) HourH=1;HourL=1; MinH=1;MinL=1; H1=hour/10;H2=hour%10; M1=min/10;M2=min%10; MaskShow(H1,HOUR);HourH=0;delay5ms();HourH=1; MaskShow(H2,HOUR); HourL=0; delay5ms(); HourL=1;MaskShow(M1,MIN);MinH=0;de
18、lay5ms();MinH=1; MaskShow(M2,MIN); MinL=0;delay5ms(); MinL=1; if(displayMode=BELLTIME|displayMode=SETTING_C) H1=cHour/10; H2=cHour%10; M1=cMin/10; M2=cMin%10; MaskShow(H1,HOUR); HourH=0; delay5ms(); HourH=1; MaskShow(H2,HOUR); HourL=0; delay5ms(); HourL=1; MaskShow(M1,MIN); MinH=0; delay5ms(); MinH=
19、1; MaskShow(M2,MIN); MinL=0; delay5ms(); MinL=1;void MaskShow(uchar Num,TYPE t)if(MaskType=MaskHour)if(t=HOUR)ShowANum(10);elseShowANum(Num);else if(MaskType=MaskMin)if(t=MIN)ShowANum(10);elseShowANum(Num);else if(MaskType=MaskAll)ShowANum(10);elseShowANum(Num);void ShowANum(uchar Num)uchar i;temp=D
20、SY_CODENum;/串行输入74HC595for(i=0;i<8;i+)temp<<=1;DS=CY;SH_CP=1;_nop_();nop_();SH_CP=0;/传送至存储寄存器,出现在输出端ST_CP=0;_nop_();ST_CP=1;_nop_();ST_CP=0;void Set()/响铃时,显示模式锁定在正常,停闹后解除if(mp=0)displayMode=NORMAL;/显示转换键作用(注:响铃时,屏蔽显示转换)if(mp!=0&&SetButton=0)delaykey();if(SetButton=0)displayMode+;if(displayMode>=4)displayMode=0;/设置模式下,时分转换键作用if(Switch=0&&(displayMode=SETTING_C|displayMode=SETTING_N)delaykey();if(Switch=0)currentSelect=!currentSelect;/设置模式下,数值增加键作用if(Increase=0&&displayMode=SET
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电子书出版合同书范本
- 酒精性肝病指南解读及中医对策
- (59)-考点59 课外-写人类阅读
- 创业与投资智慧课件
- 23 黄继光(教学设计)-2023-2024学年统编版语文四年级下册
- 医学院教学课件 解剖学-李华
- 2025年果洛货运从业资格证模拟考试系统
- 2025年开封从业资格证货运模拟考试下载
- 江苏省启东市天汾初级中学2025届下学期初三化学试题5月阶段性检测试题考试试卷含解析
- 江苏省镇江市市级名校2025届初三下学期毕业班联考(二)化学试题含解析
- 《工程科学与技术》论文投稿模板
- 精美乒乓球运动活动策划方案PPT
- GB/T 18050-2000潜油电泵电缆试验方法
- GB 7793-2010中小学校教室采光和照明卫生标准
- FZ/T 24011-2019羊绒机织围巾、披肩
- 金螳螂企业管理课件
- 炊事机械安全操作规程
- 最新版教育心理学课件3-成就动机
- 离合器-汽车毕业设计-设计说明书
- 中国民间美术年画-完整版PPT
- 2022年《趣味接力跑》教案
评论
0/150
提交评论