单片机课程设计数字时钟的设计.doc

上传人:仙人指路1688 文档编号:4147556 上传时间:2023-04-07 格式:DOC 页数:9 大小:174.50KB
返回 下载 相关 举报
单片机课程设计数字时钟的设计.doc_第1页
第1页 / 共9页
单片机课程设计数字时钟的设计.doc_第2页
第2页 / 共9页
单片机课程设计数字时钟的设计.doc_第3页
第3页 / 共9页
单片机课程设计数字时钟的设计.doc_第4页
第4页 / 共9页
单片机课程设计数字时钟的设计.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《单片机课程设计数字时钟的设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计数字时钟的设计.doc(9页珍藏版)》请在三一办公上搜索。

1、单片机课程设计-数字时钟的设计 摘要: 近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(共阴极LED数码显示器等)再配以相应的软件,达到制作简易数字钟的目的,其硬件部分难点在于元器件的选择、布局及焊接

2、。正文: 本设计的构想:通过单片机控制数字时钟,将时间显示在LED数码管上。通过按键来显示执行个部分的功能,比如调时、秒表、闹钟等。本设计的工作原理如下:在单片机最小系统的基础上,使用I/O口连接按键、LED数码管。通过单片机定时器中断来获取比较准确的时间。本程序中用定时器中断0,TOMD=0x01,每1ms产生一次中断,所以对定时器所装的初值:TH0 = (65536-1000)/256,TL0 = (65536-1000)%256。然后在主函数中执行初始化函数、按键函数,显示函数,来实现所设计的数字时钟的功能。实验的原来图如下:实验的流程图如下:功能介绍:1、 开机时,显示00-00-00

3、的时间开始计时。最上面的led发光二极管亮一秒灭一秒。2、 按键“选择”。当第一次按下时,最上面的led发光二极管不再亮灭闪烁,计数器停止工作,同时显示调时的发光二极管会亮,此时按下按键“加加”,可以实现秒的加。第二次按下“选择”按键时,按按键“加加”可以实现分的加。第三次按下“选择”按键时,按按键“加加”可以实现时的加。第四次按下“选择”按键时,会变成秒表的显示,同时计数器开始工作,最上面的led发光二极管发生亮灭闪烁,显示调时的发光二极管会灭,显示秒表的发光二极管会亮。按按键“加加”可以实现秒表的工作,再按“加加”,秒表停止工作,再按“加加”,秒表清零。第五次按下“选择”按键时,数码管显示

4、定闹钟的功能。显示秒表的发光二极管会灭,显示闹钟的发光二极管会亮。按按键“加加”可以实现闹钟分的调整。第六次按下“选择”按键时,按键“加加”可以实现闹钟时的调整。第六次按下“选择”按键时,显示闹钟的发光二极管会灭。3、 通过上面,定闹钟完成后,我们按下“闹钟开启”按键,当到达定时时间时,闹钟会发出蜂鸣声,同时数码管显示“HELLO-_-”字样,蜂鸣声可持续一分钟,当然我们也可以通过“闹钟开启”按键关掉闹钟。参考文献:赵亮,侯国瑞,单片机C语音编程与实例,人民邮电出版社,2003年九月第一版。阎石,数字电路基础,高等教育出版社,1997年第四版吴金戌,沈庆阳,郭廷杰,8051单片机实践与应用,清

5、华大学出版社 单片机接口技术 胡汉才 高等教育出版社程序示例:#include #define uchar unsigned char; #define uint unsigned int; uchar code talbe = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/数码管显示uchar code table = 0x76,0x79,0x38,0x38,0x3f,0x01,0x08,0x01;uchar code weii = 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar c

6、ode wei = 0x7f,0xbf,0xdb,0xef,0xf7,0xdb,0xfd,0xfe; /数码管的位选int a8,b8,c8; / 定义a8时间,b8秒表,c8 闹钟的定时uint tt,ttm,i,x,y,z,key_state1,flag_mode,key_state2,flag_jia;int shi,fen,miao,m_shi,m_fen,m_miao,n_shi,n_fen,n_miao;/定义时间秒表闹钟显示变量sbit k_mode = P10;/定义设置开关sbit k_jia = P11;/定义加加开关sbit k_naozhong = P12;/定义闹钟按

7、键开关sbit button = P17;/ 闹钟的输出控制端sbit shan = P13; /led亮一秒灭一秒sbit tiaos = P14; /当调整时间时此控制的led亮sbit miaob = P15; /当用到秒表时此控制的led亮sbit dings = P16;/当定闹钟时间时此控制的led亮void init(); /声明初始化函数void diaplay(); /声明显示函数void delay(z); /声明延迟函数void key(); /声明按键函数void naozhong(); /声明闹钟函数/*主函数*/void main() /主函数 init (); w

8、hile (1) if (tt%2 = 0) /每2ms扫描一次按键 key (); diaplay (); naozhong(); /*初始化函数*/void init () shi = 0; fen = 0; miao = 0; m_shi = 0; m_fen = 0; m_miao = 0; n_shi = 0; n_fen = 0; n_miao = 0; tt = 0; ttm = 0; TMOD = 0x01; /选择工作模式1 TH0 = (65536-1000)/256;/给定时器装初值 TL0 = (65536-1000)%256; EA = 1; /打开总中断 ET0 =

9、 1; /打开定时器/计数器0 TR0 = 1; /开始计数/*中断1*/void time () interrupt 1 TH0 = (65536-1000)/256; /重装初值 TL0 = (65536-1000)%256; tt+; if (flag_mode = 4) /当变量flag_mode=4时,运行秒表程序 if (flag_jia = 1) ttm +; if (ttm = 10) ttm = 0; m_miao+; if (m_miao = 100) m_miao = 0; m_fen +; if (m_fen = 60) m_fen = 0; m_shi +; if (

10、m_shi = 24) m_shi = 0; if (flag_jia = 2) ttm+; ttm-; if (flag_jia = 3) flag_jia = 0; m_shi = 0; m_fen = 0; m_miao = 0; ttm = 0; if (tt = 1000) shan =! shan; tt = 0; miao+; if (miao = 60) miao = 0; fen +; if (fen = 60) fen = 0; shi +; if (shi = 24) shi = 0; /*显示函数*/void diaplay () a0 = miao%10; a1 =

11、miao/10; a2 = 10; a3 = fen%10; a4 = fen/10; a5 = 10; a6 = shi%10; a7 = shi/10; b0 = m_miao%10; b1 = m_miao/10; b2 = 10; b3 = m_fen%10; b4 = m_fen/10; b5 = 10; b6 = m_shi%10; b7 = m_shi/10; c0 = n_miao%10; c1 = n_miao/10; c2 = 10; c3 = n_fen%10; c4 = n_fen/10; c5 = 10; c6 = n_shi%10; c7 = n_shi/10; f

12、or (i = 0;i0;x-)for(y=110;y0;y-); /*按键函数*/void key() switch (key_state1)/设置按键程序的编写 case 0:if(k_mode = 0) key_state1 = 1; break; case 1:if(k_mode =0) key_state1 = 2; break; case 2:if(k_mode = 1) key_state1 = 3; break; case 3:if(k_mode = 1) key_state1 = 4; break; case 4:flag_mode +; key_state1 = 0; br

13、eak; switch (key_state2)/加加按键程序的编写 case 0:if(k_jia = 0) key_state2 = 1; break; case 1:if(k_jia = 0) key_state2 = 2; break; case 2:if(k_jia = 1) key_state2 = 3; break; case 3:if(k_jia = 1) key_state2 = 4; break; case 4:flag_jia +; key_state2 = 0; break; switch (flag_mode) /调整时间,秒表,闹钟 case 1:TR0 = 0;

14、tiaos = 0; /设置按键为1时,计数停止 if (flag_jia = 1) /此时加加按键按下时秒加1 miao+; if (miao = 60) miao = 0; flag_jia = 0;break;case 2: if (flag_jia = 1) /设置按键为2时,如果加加按键被按下分加1 fen+; if (fen = 60) fen = 0; flag_jia = 0; break;case 3: if (flag_jia = 1) /设置按键为3时,如果加加按键被按下分加1 shi+; if (shi = 24) shi = 0; flag_jia = 0; brea

15、k;case 4: TR0 = 1;break; /设置按键为4时,时间调整完成,计数器开始工作case 5: if (flag_jia = 1) /设置按键为5时,如果加加按键被按下,闹钟的秒加1 n_fen +; if (n_fen = 60) n_fen = 0; flag_jia = 0; break; case 6: if (flag_jia = 1) /设置按键为6时,如果加加按键被按下,闹钟的分加1 n_shi +; if (n_shi = 24) n_shi = 0; flag_jia = 0; break;case 7: TR0 = 1; flag_mode = 0; break;/*闹钟函数*/void naozhong() if (k_naozhong = 0 & shi=n_shi & fen=n_fen) button = 1; else button = 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号