已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计课程名称: 电子时钟 班 级: 11电科(2)班 姓 名: 凌 坤 学 号: 110706221 指导老师: 魏晓慧 目录摘要1一.设计目标1二.仿真电路图2三. 系统的硬件设计与实现23.1 数字钟电路设计框图23.2系统硬件概述33.3硬件电路结构的设计33.3.1 单片机主控制模块的设计33.3.2 显示模块的设计43.3.3 按键模块的设计5四. 系统的软件设计5程序流程图5程序代码6参考文献1313摘要该课程设计为数字电子钟的设计。以STC89C51为核心,配合液晶显示器和按键为用户提供长期、连续、可靠、稳定的工作环境。该数字电子钟有时分秒显示和日期显示以及具有时间调整的功能。系统软件设计包括单片编程,其主要功能是指令发送以及数据的显示和存储,利用其内部定时器来T0定时每50ms中断1次,中断20次就是一秒钟(晶振为12MH),外部模块还有键盘、LED数码管等。系统的硬件资源有:74LS245,按键。关键词:单片机数码管 按键一.设计目标以89C51单片机控制的时钟,在LED数码管上显示当前的时间与日期。具体功能如下:用2个功能键操作来设置当前时间。功能键功能如下。(1)K1进入设置现在的时间。(2)K2上调数据。(3)K3复位键程序执行后工作指示灯闪动,表示程序开始执行,LED数码管显示“23:59:53;13-11-11”,然后开始计时。按下K1,进入设置时间状态,只有时显示在LED数码管,按K2进行时间秒的大调节,然后再按K1,只有分显示在LED数码管,再按K2进行分的大调节,以此类推,便可以完成时间与日期的设置。二.仿真电路图三. 系统的硬件设计与实现3.1 数字钟电路设计框图LED数码管显示模块AT89C51主控制器按键调节模块晶振电路模块复位电路图3-1电路设计框图3.2系统硬件概述该电路是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在5V超低压工作;时钟电路也由AT89C51单片机提供,它可以对年、月、日、时、分、秒进行计时,可以通过按键进行时间设置,。时间显示部分采用LED数码管模块。3.3硬件电路结构的设计3.3.1 单片机主控制模块的设计此次单片机数字时钟的设计采用AT89C51为主控制芯片,并由其定时器提供时钟,利用LED数码管进行时间按显示。3.3.2 显示模块的设计 LED数码管LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。3.3.3 按键模块的设计四. 系统的软件设计程序流程图开始关定时中断检测有无按键按下?LED初始化中断初始化显示实时时间开定时中断执行按键相应的功能程序代码#include #define uint unsigned int#define uchar unsigned charuchar secshi=1,secge=1,minshi=1,minge=1,hourshi=1,hourge=1,dayshi=1,dayge=1,monshi=1,monge=1,yearshi=1,yearge=3;uint num=0,t=0,sec=53,min=59,hour=23,day=11,month=11,year=13; uint lq=2000; uchar flag,flag1;sbit K1=P33;/切换按键sbit K2=P34;/加一按键uchar code table10=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;/0-9段码表/*函数声明*/void delay(uchar k ); /延时子程序void time_pro( ); /时间处理子程序void display( ); /显示子程序void display1( );void display2();void keyscan( ); /键盘扫描子程序void keyscan1( );/*/*延时子程序*/*/void delay (uint k)uint j;while(k-)!=0) for(j=0;j125;j+) ; /*/*时间处理子程序*/*/void time_pro( void) if(seconde=60) /秒钟设为60进制 seconde=0; minite+; if( minite=60) /分钟设为60进制 minite=0; hour+; if(hour=24) /时钟设为24进制 hour=0; day+; if(month=1) if(day=32) day=1;month+; if(month=2) if(year+lq)%100!=0&(year+lq)%4=0)|(year+lq)%400=0) if(day=30) day=1;month+; else if(day=29) day=1;month+; if(month=3) if(day=32) day=1;month+; if(month=4) if(day=31) day=1;month+; if(month=5) if(day=32) day=1;month+; if(month=6) if(day=31) day=1;month+; if(month=7) if(day=32) day=1;month+; if(month=8) if(day=32) day=1;month+; if(month=9) if(day=31) day=1;month+; if(month=10) if(day=32) day=1;month+; if(month=11) if(day=31) day=1;month+; if(month=12) if(day=32) day=1;month+; if(month=13) month=1;year+; if(year=23) year=13; /*/* 显示子程序*/*/void display(void) P2=0x7f; P0=dispcodehour/10; /显示小时的十位 delay(2); P2=0xbf; P0=(dispcode(hour%10); /显示小时的个位 delay(2); P2=0xef; P0=dispcodeminite/10; /显示分的十位 delay(2); P2=0xf7; P0=(dispcodeminite%10); /显示分的个位 delay(2); P2=0xfd; P0=dispcodeseconde/10; /显示秒的十位 delay(2); P2=0xfe; P0=dispcodeseconde%10; /显示秒的个位 delay(2); P2=0xdb; P0=dispcode20; delay(2); void display2(void) if(a=0)P0=0x00; if(a=1) time_pro( ); /时间处理 display( ); if(a=2) if(P1_1=0) /秒的设置 delay(30); if(P1_1=0) seconde+; if(seconde=60) seconde=0; time_pro( );/时间处理 P2=0xfd; P0=dispcodeseconde/10; /显示秒的十位 delay(4); P2=0xfe; P0=dispcodeseconde%10; /显示秒的个位 delay(4); if(a=3) if(P1_1=0) /分的设置 delay(30); if(P1_1=0) minite+; if(minite=60) minite=0; time_pro( ); P2=0xef; P0=dispcodeminite/10; /显示分的十位 delay(4); P2=0xf7; P0=(dispcodeminite%10); /显示分的个位 delay(4); if(a=4) if(P1_1=0) /按键3小时的调整 delay(300); if(P1_1=0) hour+; if(hour=24) hour=0; time_pro( ); P2=0x7f; P0=dispcodehour/10; /显示小时的十位 delay(4); P2=0xbf; P0=(dispcode(hour%10); /显示小时的个位 delay(4); if(a=5) /keyscan1( ); /按键扫描 time_pro( ); /时间处理 display1( ); if(a=6) if(P1_1=0) /按键1秒的调整 delay(30); if(P1_1=0) day+; if(day=32) day=1; time_pro( ); P2=0xfd; P0=dispcodeday/10; /显示秒的十位 delay(4); P2=0xfe; P0=dispcodeday%10; /显示秒的个位 delay(4); if(a=7) if(P1_1=0) /按键2分的调整 delay(30); if(P1_1=0) month+; if(month=13) month=1; time_pro( ); P2=0xf7; P0=dispcodemonth/10; /显示分的十位 delay(4); P2=0xfb; P0=(dispcodemonth%10); /显示分的个位 delay(4); if(a=8) if(P1_1=0) /按键3小时的调整 delay(300); if(P1_1=0) year+; if(year=24) year=13; time_pro( ); P2=0xdf; P0=dispcodeyear/10; /显示小时的十位 delay(4); P2=0xef; P0=(dispcode(year%10); /显示小时的个位 delay(4); void display1(void) P2=0xdf; P0=dispcodeyear/10; /显示年的十位 delay(2); P2=0xef; P0=(dispcode(year%10)|0X80; /显示小年的个位 delay(2); P2=0xf7; P0=dispcodemonth/10; /显示月的十位 delay(2); P2=0xfb; P0=(dispcodemonth%10)|0X80; /显示月的个位 delay(2); P2=0xfd; P0=dispcodeday/10; /显示天的十位 delay(2); P2=0xfe; P0=dispcodeday%10; /显示天的个位 delay(2); P2=0x7f; P0=dispcode21; delay(2); P2=0xbf; P0=dispcode22; delay(2); /*/*键盘扫描子程序*/*/void timer0(void) interrupt 1 using 0 /定时器0方式1,50ms中断一次 TH0=0x3c;TMOD = 0x11; mstcnt+; if(mstcnt=20) seconde+; mstcnt=0; /注意点。对计数单元的清零十分的重要,本次调试中就是 /因为忽略了这一点,给我造成了很大的被动。 /*/*主函数*/*/void main(voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 热力公司锅炉房运行优化方案
- 超市生鲜食材配送方案
- 体育赛事垫资协议书
- 数字化合同信息管理平台方案
- 海绵城市水渠建设合同
- 消防设施安装验收制度
- 小学传染病防控健康教育制度
- 农业科技推广项目合同
- 医疗机构员工绩效积分管理制度
- 2024年透红外线玻璃项目评估分析报告
- 陕西中考物理备考策略课件
- 9F燃机燃机规程
- aiissti变频器说明书
- 绿化养护报价表
- 家校沟通案例七篇
- 大学生心理健康教育论文范文3000字(8篇)
- 新保险法试题
- 退行性腰椎间盘病诊疗和阶梯治疗
- 新材料概论课件ppt 第7章 信息功能材料
- 《悦纳至正让儿童生命幸福生长》莞城中心小学品牌培育工作汇报修改版
- 视听语言(山东联盟)知到章节答案智慧树2023年潍坊学院
评论
0/150
提交评论