第六节电子钟程序设计_第1页
第六节电子钟程序设计_第2页
第六节电子钟程序设计_第3页
第六节电子钟程序设计_第4页
第六节电子钟程序设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六节电子钟程序设计第一页,共二十四页,2022年,8月28日3.6.1设计任务

电子表使用6位数码管显示时分秒,每个占用两个数码管。使用4个键控制,采用的电路见图3.6.1所示。六位数码管的段选连接在单片机的P0口,位选连接在单片机的P2口,从右至左分别从P2.0到P2.5。键盘连接在P3.2到P3.5口。蜂鸣器连接在单片机的P1.7口。第二页,共二十四页,2022年,8月28日图3-6-1硬件电路图第三页,共二十四页,2022年,8月28日3.6.2系统功能分析一、键盘控制键盘控制是本设计中的重要部分,在键盘上实现全部的功能的调整,首先需要定义各个按键的主要功能,功能如表2-6-1所示。KEY1键负责调整模式的选择,带有去抖功能,每按下一次,改变一次状态,共有四种状态,启动默认进入正常状态,其后依次为调秒,调分,调时状态。KEY2、KEY3在对应的模式下进行加或者减,也带有去抖功能。KEY4键为快速返回按钮,按下此键后,立刻从其他状态进入正常状态。第四页,共二十四页,2022年,8月28日二、显示时间输出显示终端为6位数码管,从左到右分别显示时分秒,小时、分钟和秒各占2位数码管共6位。在调整过程中,要求对应的调整位置以0.5的速度进行闪烁,以示区别第五页,共二十四页,2022年,8月28日3.6.3实例代码/************************************************/#include<reg51.h>#defineucharunsignedcharuchari=0,j=0,k,flash,flash=0x00;charsec,min,hou;ucharkey1_down,key2_down,key3_down,key4_down,key1_mode;codeucharseven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};codeucharseven_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};sbitkey1=P3^2;sbitkey2=P3^3;sbitkey3=P3^4;sbitkey4=P3^5;第六页,共二十四页,2022年,8月28日voiddelay(ucharx)//延迟函数{ while(x--);}voidkey_scan(void) //按键扫描函数{ if(key1==0) //按键1 { key1=1; delay(3000); if(key1==0)key1_down=1; }

第七页,共二十四页,2022年,8月28日

if(key1==1&&key1_down==1) { key1_mode++; key1_down=0; if(key1_mode==4)key1_mode=1; }

if(key2==0) //按键2 { key2=1; delay(3000); if(key2==0)key2_down=1; }第八页,共二十四页,2022年,8月28日

if(key2==1&&key2_down==1&&key1_mode==1) { key2_down=0; sec++; } if(key2==1&&key2_down==1&&key1_mode==2) { key2_down=0; min++; } if(key2==1&&key2_down==1&&key1_mode==3) { key2_down=0; hou++; }第九页,共二十四页,2022年,8月28日 if(key3==0) //按键3 { key3=1; delay(3000); if(key3==0)key3_down=1; } if(key3==1&&key3_down==1&&key1_mode==1) { key3_down=0; sec--; if(sec<0) sec=59; }第十页,共二十四页,2022年,8月28日 if(key2==1&&key2_down==1&&key1_mode==2) { key3_down=0; min--; if(min<0) min=59; } if(key2==1&&key2_down==1&&key1_mode==3) { key3_down=0; hou--; if(hou<0) sec=23; }第十一页,共二十四页,2022年,8月28日 if(key4==0) //按键4 { key4=1; delay(3000); if(key4==0)key4_down=1; } if(key4==1&&key4_down==1) { key4_down=0; key1_mode=0; }}第十二页,共二十四页,2022年,8月28日voidtimer0_init(void) //初始化{ TMOD=0x01; TH0=0xec; TL0=0x78; TR0=1; EA=1; ET0=1;}voidtimer0_isr(void)interrupt1 //中断{ TR0=0; EA=0; TH0=0xec; TL0=0x78; TR0=1;第十三页,共二十四页,2022年,8月28日

EA=1; i++; if(i>=100)//半秒 { flash=~flash; k++; i=0; } if(k>=2)//刚好1秒 { k=0; sec++; }第十四页,共二十四页,2022年,8月28日 if(sec>=60) { sec=0; min++; } if(min>=60) { min=0; hou++; } P2=1;第十五页,共二十四页,2022年,8月28日if(key1_mode==0)//正常显示 { switch(j) { case0:P0=seven_seg[sec%10];break; case1:P0=seven_seg[sec/10];break; case2:P0=seven_seg[min%10]&0x7f;break; case3:P0=seven_seg[min/10];break; case4:P0=seven_seg[hou%10]&0x7f;break; case5:P0=seven_seg[hou/10];break; } P2=seven_bit[j]; j++; if(j==6) j=0; }第十六页,共二十四页,2022年,8月28日if(key1_mode==1)//选定秒 { k=0; switch(j) { case0:P0=seven_seg[sec%10]|flash;break; case1:P0=seven_seg[sec/10]|flash;break; case2:P0=seven_seg[min%10]&0x7f;break; case3:P0=seven_seg[min/10];break; case4:P0=seven_seg[hou%10]&0x7f;break; case5:P0=seven_seg[hou/10];break; }

P2=seven_bit[j]; j++; if(j==6) j=0; }第十七页,共二十四页,2022年,8月28日if(key1_mode==2)//选定分 { switch(j) { case0:P0=seven_seg[sec%10];break; case1:P0=seven_seg[sec/10];break; case2:P0=seven_seg[min%10]&0x7f|flash;break; case3:P0=seven_seg[min/10]|flash;break; case4:P0=seven_seg[hou%10]&0x7f;break; case5:P0=seven_seg[hou/10];break; } P2=seven_bit[j]; j++; if(j==6) j=0;}第十八页,共二十四页,2022年,8月28日if(key1_mode==3)//选定时 { switch(j) { case0:P0=seven_seg[sec%10];break; case1:P0=seven_seg[sec/10];break; case2:P0=seven_seg[min%10]&0x7f;break; case3:P0=seven_seg[min/10];break; case4:P0=seven_seg[hou%10]&0x7f|flash;break; case5:P0=seven_seg[hou/10]|flash;break; } P2=seven_bit[j]; j++; if(j==6) j=0; } }第十九页,共二十四页,2022年,8月28日voidmain(void){ sec=55; min=59; hou=10; timer0_init(); while(1) key_scan();}/*********************************************************/第二十页,共二十四页,2022年,8月28日思考题:3-1电路见题图3-1所示,完成程序设计并在Proteus中设计电路,仿真实现LED闪烁。题图3-1第二十一页,共二十四页,2022年,8月28日3-2跑马灯又叫流水灯,能够达到明灭交替顺序显示的效果,利用单片机的P0口驱动8只LED可以实现跑马灯效果,程序中可以先让P0=0x01,再加入延时,然后让P0左移一位,依次循环,并判断如果P0为0时,从新赋值0x01。请你完成这个程序的设计,并在Proteus中设计电路仿真实现。3-3请你列出单片机内部所有特殊功能的寄存器名。3-4分别写出外部中断、定时器中断、定时器中断和串行中断的步骤。3-5简述定时器中断初始化步骤,如果定时器timer0、timer1都产生中断,优先级如何设定?第二十二页,共二十四页,2022年,8月28日3-6为了用药安全,病人打点滴的液体滴注速度在根据不同用药都有限制,但医生还在人工数说的方法测量滴注速度,请你设计电路,并利用定时器的3-7采用外部中断实现4个按键输入,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论