Cx51电子钟的设计.doc_第1页
Cx51电子钟的设计.doc_第2页
Cx51电子钟的设计.doc_第3页
Cx51电子钟的设计.doc_第4页
Cx51电子钟的设计.doc_第5页
全文预览已结束

下载本文档

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

文档简介

/*名 称:数字电子钟的C设计/*设计者:林文才/*日 期:2011年7月30日*/#include#include#include#define uchar unsigned char#define uint unsigned int/*共阳数码管字型码*/*0,1,2,3,4,5,6,7,8,9,p.,灭,-*/char data dis_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xbf;/*P.显示代码序号*/ char data find_code8=11,11,11,11,11,11,11,10;/*定义并初始化变量*/uchar keyzhiii,biaozhi0,keycishu,k;uchar second; /second赋初值uchar minite;/minite赋初值uchar hour;/hour赋初值uchar i=0; /循环次数赋初值uchar S3cs=0;sbit S2=P10;/开始/暂停键sbit S3=P11; /second 调整定义sbit S4=P12; /minite调整定义sbit S5=P13; /hour调整定义/*函数声明*/void Delay1ms(uchar count); /延时子程序void time_pro( ); /时间处理子程序void disp( ); /显示子程序void keyscan( ); /键盘扫描子程序void led_xh();/*延时子程序*/void DelayX1ms(uint count) uint j; while(count-!=0) for(j=0;j80;j+); /*时间处理子程序*/void time_pro( void) if(second=60) /秒钟设为60进制 second=0; minite+; if( minite=60) /分钟设为60进制 minite=0; hour+; if(hour=24) /时钟设为24进制 hour=0; led_xh(); /*显示函数*/void disp(void) char i,j=0xfe; char k; for(i=0;i8;i+) P2=j; k=find_codei; P0=dis_codek; DelayX1ms(1); j=_crol_(j,1); /*显缓更新函数*/void led_xh() find_code0=second%10; /显示秒的个位 find_code1=second/10; /显示秒的十位find_code2=12; find_code3=minite%10; /显示分的个位 find_code4=minite/10; /显示分的十位find_code5=12; find_code6=hour%10; /显示时的个位 find_code7=hour/10; /显示时的十位/*函数原型:keychuli();*功 能:处理与键盘相连的P1口的内容,作为键值*/uchar keychuli() uchar k; k=P1; /P1口内容送K k=k; /取反 return(k); /返回键值 /*函数原型:key();*功 能:键盘扫描函数,函数返回值即键值*/uchar key() uchar keyzhi,keyzhii; /电子钟键盘按键键值临时存放 keyzhi=keychuli(); /调P1口处理函数 if(keyzhi!=0) /有键动作延时去抖动,否则函数返回 disp(); disp(); keyzhi=keychuli(); /再次调P1口处理函数 if(keyzhi!=0) /真正有键按下,取键值并暂存 keyzhii=keyzhi; while(keyzhi!=0) /判按键是否释放,没有释放延时去抖动等待释放 disp(); disp(); keyzhi=keychuli(); keyzhi=keyzhii; /按键释放后恢复按键键值 return(keyzhi); /返回按键键值 /*中断*/void timer0(void) interrupt 1 using 0 /定时器0方式1,50ms中断一次 TH0=0x3c; TMOD=0x01; i+; if(i=20) second+; i=0; /*主函数*/void main(void) TMOD=0x01; /time0为定时器,方式1 TH0=0x3c; /预置计数初值 TL0=0xb0; EA=1; ET0=1; find_code0=11; find_code1=11; find_code2=11; find_code3=11; find_code4=11; find_code5=11; find_code6=11; find_code7=10; while(1) disp(); /调显示函数 keyzhiii=key(); /调键盘扫描函数得到按键键码 if(keyzhiii=1) goto jx; while(1) time_pro();/时间处理函数 disp(); /调显示函数 keyzhiii=key(); /调键盘扫描函数得到按键键码 switch(keyzhiii) /按键功能控制 case 0: /没有键按下,则返回 break;jx: case 1: /电子钟启动/停止键按下功能处理 keycishu+; if(keycishu%2!=0) /电子钟启动/停止键按键次数为偶数,清电子钟启动/停止键按键标志位为0, biaozhi0=1; /否则置1 else biaozhi0=0; if(biaozhi0=1) /根据标志是1还是0,来决定开还是关电子钟 TR0=1;disp();break;else TR0=0;disp();break; case 2: /电子钟调时键按下功能处理 if(biaozhi0=1)break; /电子钟运行状态则不准调分 else if(keyzhiii=2) hour+; disp(); if(hour=24) hour=0; break; case 4: /电子钟调分键按下功能处理 if(biaozhi0=1)break; /电子钟运行状态则不准调分 else if(keyzhiii=4) minite+; disp(); if(minite=60) m

温馨提示

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

评论

0/150

提交评论