




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6位LED电子钟一、原理说明:1、显示原理: 显示部分主要器件为2位共阳红色数码管,驱动采用PNP型三极管驱动,各端口配有限流电阻,驱动方式为扫描,占用P1.0P1.6端口。冒号部分采用4个3.0的红色发光,驱动方式为独立端口驱动,占用P1.7端口。2、 键盘原理: 按键S1S3采用复用的方式与显示部分的P3.5、P3.4、P3.2口复用。其工作方式为,在相应端口输出高电平时读取按键的状态并由单片机支除抖动并赋予相应的键值。3、迅响电路及输入、输出电路原理: 迅响电路由有源蜂鸣器和PNP型三极管组成。其工作原理是当PNP型三极管导通后有源蜂鸣器立即发出定频声响。驱动方式为独立端口驱动,占用P3.7端口。 输出电路是与迅响电路复合作用的,其电路结构为有源蜂鸣器,5.1K定值电阻R6,排针J3并联。当有源蜂鸣器无迅响时J3输出低电平,当有源蜂鸣器发出声响时J3输出高电平,J3可接入数字电路等各种需要。驱动方式为迅响复合输出,不占端口。 输入电路是与迅响电路复合作用的,其电路结构是在迅响电路的PNP型三极管的基极电路中接入排针J2。引脚排针可改变单片机I/O口的电平状态,从而达到输入的目的。驱动方式为复合端口驱动,占用P3.7端口。4、单片机系统: 本产品采用AT89C2051为核心器件(AT89C2051烧写程序必须借助专用编程器,我们提供的单片机已经写入程序),并配合所有的必须的电路,只具有上电复位的功能,无手动复位功能。二、使用说明: 1、功能按键说明: S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。 2、功能及操作说明:操作时,连续短时间(小于1秒)按动S1,即可在以上的6个功能中连续循环。中途如果长按(大于2秒)S1,则立即回到时钟功能的状态。 1、时钟功能:上电后即显示10:10:00 ,寓意十全十美。 2、校时功能:短按一次S1,即当前时间和冒号为闪烁状态,按动S2则小时位加1,按动S3则分钟位加1,秒时不可调。 3、闹钟功能:短按二次S1,显示状态为22:10:00,冒号为长亮。按动S2刚小时位加1,按动S3则分钟位加1,秒时不可调。当按动小时位超过23时则会显示-:-:-,这个表示关闭闹钟功能。闹铃声为蜂鸣器长鸣3秒钟。 4、倒计时功能:短按三次S1,显示状态为 0,冒号为长灭。按动S2则从低位依此显示高位,按动S3则相应位加1,当S2按到第6次时会在所设定的时间状态下开始倒计时,再次按动S2将再次进入调整功能,并且停止倒计时。 5、秒表功能:短按四次S1,显示状态为00:00:00,冒号为长亮。按动S2则开始秒表计时,再次按动S2则停止计时,当停止计时的时候按动S3则秒表清零。 6、计数器功能:短按五次S1,显示状态为00:00:00,冒号为长灭,按动S2则计数器加1,按动S3则计数器清零。程序:#includecode senen_seg10=0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0; /P1.7(冒号)口高电平bit key1_enter=0,key2_enter=0,key3_enter=0,countdown_mark=0,stopwatch_mark=0,count_mark=0,bell_mark=0; /状态标志unsigned char program=0,program_variable=0,count_bit=0,count=0;unsigned char hour=10,minute=10,second=0; /时间变量unsigned char delayed_hour=22,delayed_minute=10,delayed_second=0; /定时变量unsigned char count_hour=0,count_minute=0,count_second=0; /计时计数变量unsigned int count_time=0,count_count=0;void delay(unsigned int t) /延时子程序unsigned int i,j;for(i=0;ifor(j=0;j=4020)count_time=0;second+;if(second=60)second=0;minute+;if(minute=60)minute=0;hour+;if(hour=24)hour=0;if(delayed_hour=hour & delayed_minute=minute & second=4000 & (count_second!=0|count_minute!=0|count_hour!=0)count_count=0;count_second-;if(count_second=60)count_second=59;count_minute-;if(count_minute=60)count_minute=59;count_hour-;if(count_hour=100) count_hour=99;if(count_second=0&count_minute=0&count_hour=0&count_count=15000) count_count=14000;if(stopwatch_mark=1) /秒表程序count_count+;if(count_count=40)count_count=0;count_second+;if(count_second=100)count_second=0;count_minute+;if(count_minute=60)count_minute=0;count_hour+;if(count_hour=60) count_hour=0;unsigned char show_key (void)unsigned char x=0,y=0;switch (program)case 0: P1&=senen_segsecond%10; /时钟秒的个位break;case 1: if(count_time=2000) P1&=senen_segsecond%10; /校正秒的个位break;case 2: if(delayed_hour=24) P1=0xfe; /闹钟秒的个位else P1&=senen_segdelayed_second%10;break;case 3: if(count_bit=0) P1&=senen_segcount_second%10;/倒计时秒的个位else P1=0xff;break;case 4: P1&=senen_segcount_second%10; /秒表秒的个位break;case 5: P1&=senen_segcount_second%10; /计数器个位break;P3_3=0;delay(10);if(P3_5=0) /功能键1识别key1_enter=1;if(count=2000) P1&=senen_segsecond/10; /校正秒的十位break;case 2: if(delayed_hour=24) P1=0xfe; /闹钟秒的十位else P1&=senen_segdelayed_second/10;break;case 3: if(count_bit=1) P1&=senen_segcount_second/10;/倒计时秒的十位else P1=0xff;break;case 4: P1&=senen_segcount_second/10; /秒表秒的十位break;case 5: P1&=senen_segcount_second/10; /计数器十位break;P3_1=0;delay(10);P3_1=1;P1|=0xff;switch (program)case 0: P1&=senen_segminute%10; /时钟分的个位break;case 1: if(count_time=2000) P1&=senen_segminute%10; /校正分的个位break;case 2: if(delayed_hour=24) P1=0xfe; /闹钟分的个位else P1&=senen_segdelayed_minute%10;break;case 3: if(count_bit=2) P1&=senen_segcount_minute%10;/倒计时分的个位else P1=0xff;break;case 4: P1&=senen_segcount_minute%10; /秒表分的个位break;case 5: P1&=senen_segcount_minute%10; /计数器百位break;P3_2=0;delay(10);P3_2=1;P1|=0xff;switch (program)case 0: P1&=senen_segminute/10; /时钟秒的个位break;case 1: if(count_time=2000) P1&=senen_segminute/10; /校正秒的个位break;case 2: if(delayed_hour=24) P1=0xfe; /闹钟秒的个位else P1&=senen_segdelayed_minute/10;break;case 3: if(count_bit=3) P1&=senen_segcount_minute/10;/倒计时秒的个位else P1=0xff;break;case 4: P1&=senen_segcount_minute/10; /秒表秒的个位break;case 5: P1&=senen_segcount_minute/10; /计数器千位break;P3_5=0;delay(10);P3_5=1;P1|=0xff;switch (program)case 0: P1&=senen_seghour%10; /时钟时的个位break;case 1: if(count_time=2000) P1&=senen_seghour%10; /校正时的个位break;case 2: if(delayed_hour=24) P1=0xfe; /闹钟时的个位else P1&=senen_segdelayed_hour%10;break;case 3: if(count_bit=4) P1&=senen_segcount_hour%10;/倒计时时的个位else P1=0xff;break;case 4: P1&=senen_segcount_hour%10; /秒表时的个位break;case 5: P1&=senen_segcount_hour%10; /计数器万位break;P3_0=0;delay(10);if(P3_4=1 & key2_enter=1)x=3; /确认功能键2识别,返回3key2_enter=0;P3_0=1;P1|=0xff;switch (program)case 0: P1&=senen_seghour/10; /时钟时的个位break;case 1: if(count_time=2000) P1&=senen_seghour/10; /校正时的个位break;case 2: if(delayed_hour=24) P1=0xfe; /闹钟时的个位else P1&=senen_segdelayed_hour/10;break;case 3: if(count_bit=5)P1&=senen_segcount_hour/10; /倒计时时的个位else P1=0xff;break;case 4: P1&=senen_segcount_hour/10; /秒表时的个位break;case 5: P1&=senen_segcount_hour/10; /计数器万位break;P3_4=0;delay(10);if(P3_5=1 & key1_enter=1) /确认功能键1识别,执行退出或进入下一个功能if(count=127) x=1; /确认功能键1为长按,返回1else x=2; /确认功能键1为短按,返回2key1_enter=0;count=0;if(P3_2=1 & key3_enter=1)x=4; /确认功能键3识别,返回4key3_enter=0;P3_4=1;P1|=0xff;if(program=2000) P1&=0xff; /校时和显示功能时钟时冒号闪烁if(program=1 & count_time=24)hour=0;break;case 4: minute+;if(minute=60)minute=0;break;break;case 2: while(program=2) /闹钟菜单switch(show_key()case 0: break;case 1: program=0;break;case 2: program=3;break;case 3: delayed_hour+;if(delayed_hour=25)delayed_hour=0;break;case 4: delayed_minute+;if(delayed_minute=60)delayed_minute=0;break;break;case 3: while(program=3) /倒计时菜单switch(show_key()case 0: break;case 1: program=0;break;case 2: program=4;break;case 3: count_bit+;if(count_bit=7)count_bit=0;break;case 4: switch(count_bit)case 0: count_second+=1;break;case 1: count_second+=10;break;case 2: count_minute+=1;break;case 3: count_minute+=10;break;case 4: count_hour+=1;break;case 5: count_hour+=10;break;case 6: break;if(count_hour=100) count_hour-=100;if(count_minute=60) count_minute-=60;if(count_second=60) count_second-=60;break;if(count_bit=6) countdown_mark=1;else countdown_mark=0;break;case 4: count_hour=0; /秒表菜单count_minute=0;count_second=0;while(program=4)switch(show_key()case 0: break;case 1: program=0;break;case 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 静海区全网营销解决方案
- 2025年牛羊防疫员考试题及答案
- 2025年区块链技术在供应链金融中的应用案例研究报告
- 药房咨询方案模板下载
- 盾构专项应急预案(3篇)
- 对于事故应急预案(3篇)
- 药师专业测试题及答案
- 税收学专业面试题及答案
- 2025年城市配送新能源汽车车路协同通信技术实施效果报告
- Welcome to the unit说课稿-2025-2026学年高中英语牛津译林版必修三-牛津译林版2004
- 数据库应用技术-第三次形考作业(第10章~第11章)-国开-参考资料
- 新能源汽车故障诊断试题库+答案
- 北京版(2024)小学一年级全一册体育与健康全册教案
- 2025年山东省安全员C证(专职安全员)考试题库
- 眼部拨筋医学知识
- 《关于作业的班会》课件
- 实训楼配电改造施工方案
- 上菜服务流程培训
- 小学生爱国主义情怀情景剧《满江红》剧本完整台词
- 保健品会销操作流程
- DB37T 2640-2022 监狱安全防范系统建设技术规范
评论
0/150
提交评论