定时闹钟C语言程序.doc_第1页
定时闹钟C语言程序.doc_第2页
定时闹钟C语言程序.doc_第3页
定时闹钟C语言程序.doc_第4页
定时闹钟C语言程序.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

#include /头文件 #include #define uchar unsigned char/宏定义 #define uint unsigned int sbit key1=P35; /位声明 sbit key2=P36; sbit key3=P37; sbit fmq=P20; uchar code table=0x3f,0x06,0x5b,/数码管显示的数值 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0xbf,0x86,0xdb,/带小数点的数值 0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; void jia(); /函数声明 void jian(); uchar table_16; /定义数组,数组内含有6个数值 uchar table_26; uchar shi=23,fen=59,miao=50; /显示初始值 uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;/定义全局变量 uchar flag,flag1,cnt,count;/定义全局变量 void delay(uchar i) /延时函数,用于动态扫描数码管 uchar x,y; for(x=i;x0;x-) for(y=110;y0;y-); void init() /初始化函数 TMOD=0X01; /工作方式1 TH0=(65536-50000)/256; /定时时间为:50ms TL0=(65536-50000)%256; ET0=1; /打开定时器 EA=1; /开总中断 TR0=1; /启动定时器 void display() /显示子函数,用于显示时间数值 uchar i,j; table_10=miao%10; /分离秒的各位与十位 table_11=miao/10; table_12=fen%10+11; /分离分的各位与十位 table_13=fen/10; table_14=shi%10+11; /分离时的各位与十位 table_15=shi/10; j=0x7f; /从秒到时的扫描 for(i=0;i6;i+) P2=j; P0=tabletable_1i;/显示数值 delay(10); j=_cror_(j,1);/循环右移 void display_1() /显示子函数,用于显示定时时间 uchar i,j; table_20=miao2%10; /以下含义同上 table_21=miao2/10; table_22=fen2%10+11; table_23=fen2/10; table_24=shi2%10+11; table_25=shi2/10; j=0x7f; for(i=0;i=20) /判断是否到一秒 flag=0; /到了,则标志位清零 miao+; /秒加1 if(miao=60) /判断秒是否到60s miao=0;/到了,则清零 fen+; /分加1 if(fen=59) /以下含义同上 fen=0; shi+; if(shi23) shi=0; void key_scan() /键盘扫描子函数 uchar i; /定义局部变量 if(key1=0) while(!key1) /防止掉显 if(cnt=0|cnt=1|cnt=2|cnt=3|cnt=4|cnt=8) display(); if(cnt=5|cnt=6|cnt=7) display_1(); cnt+; /记下按键key1按下的次数 if(cnt=1) /第一次按下,停止计数 TR0=0; if(cnt=2) /第二次按下 miao1=miao; /保存秒的数值 miao=99;/显示99,表示可以调节秒的数值了 for(i=0;i100;i+) display(); /显示99 miao=miao1; /恢复前一刻秒的数值 if(cnt=3) /以下含义同上 fen1=fen; fen=99; for(i=0;i100;i+) display(); fen=fen1; if(cnt=4) shi1=shi; shi=99; for(i=0;i100;i+) display(); shi=shi1; if(cnt=5) miao1=miao2; miao2=88; for(i=0;i100;i+) display_1(); miao2=miao1; if(cnt=6) fen1=fen2; fen2=88; for(i=0;i100;i+) display_1(); fen2=fen1; if(cnt=7) shi1=shi2; shi2=88; for(i=0;i59) /判断秒是否大于59,是,则秒清零 miao=0; if(cnt=3) /以下含义同上 fen+; if(fen59) fen=0; if(cnt=4) shi+; if(shi23) shi=0; if(cnt=5) miao2+; if(miao259) miao2=0; if(cnt=6) fen2+; if(fen259) fen2=0; if(cnt=7) shi2+; if(shi223) shi2=0; void jian() /减1子函数 if(cnt=2) /判断key1按下的次数是否为2,是则秒减1 miao-; if(miao=255) /判断秒是否减到255,是,则秒清零 miao=59; if(cnt=3) fen-; if(fen=255) fen=59; if(cnt=4) shi-; if(shi=255) shi=23; if(cnt=5) miao2-; if(miao2=255) miao2=59; if(cnt=6) fen2-; if(fen2=255) fen2=59; if(cnt=7) shi2-; if(shi2=255) shi2=23; void clock() /闹铃子函数 if(miao2=miao) /显判断秒的数值是否相等 if(fen2=fen) /是,在判断分是否相等 if(shi2=shi) /是,再判断时是否相等 flag1=0; /是,则标志位,flag1清零 while(!(flag1=100) /判断flag1是否到100 fmq=0; /没有,则,继续驱动蜂鸣器响,时间约为:5s shijian(); /调用时间子函数 display(); /调用显示子函数 fmq=1;/关闭蜂鸣器 void main() init();/调用初始化子函数 while(1) key_scan(); /调用键盘扫描子函数 shijian(); /时间子函数 clock(); /闹钟子函数 /显示子函数 if(cnt=0|cnt=1|cnt=2|cnt=3|cnt=4|cnt=8) display(); if(cnt=5|cnt=6|cnt=7) display_1();

温馨提示

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

评论

0/150

提交评论