带闹钟多功能电脑时钟设计.doc_第1页
带闹钟多功能电脑时钟设计.doc_第2页
带闹钟多功能电脑时钟设计.doc_第3页
带闹钟多功能电脑时钟设计.doc_第4页
带闹钟多功能电脑时钟设计.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

重庆科技学院C语言程序设计课程设计报告 附录三 附录三:源程序/* 程序名称:带闹钟多功能电脑时钟设计 C语言程序设计程序设计(第1组) 编写人 : 完成时间:2012年9月18日20:30 特殊说明:按键P32为我设定的模式按键,一共有5种模式 程序说明: 说明1:按模式键(P32)1次,数码管前两位闪烁(间隔时间0.5s),然后按UP键(P21)和DOWN键(P22)就可以分别加或减,调节时钟小时(数码管前两位)。说明2:按模式键(P32)2次,数码管后两位闪烁(间隔时间0.5s),然后按UP键(P21)和DOWN键(P22)就可以分别加或减,调节时钟分钟(数码管后两位)。说明3:按模式键(P32)3次,数码管全部闪烁(间隔时间0.5s),按UP键(P21)奇数次,秒表开始计时,按UP键(P21)偶数次,秒表暂停,当秒表暂停后,按DOWN键(P22)1次,秒表清0。()说明4:按模式键(P32)4次,数码管第2位闪烁(间隔时间0.5s),然后按UP键(P21)和DOWN键(P22)就可以分别加或减,设定闹钟钟小时(数码管前两位);按MODE键(P20)奇数次,数码管第4位闪烁(间隔时间0.5s),然后按UP键(P21)和DOWN键(P22)就可以分别加或减,设定闹钟钟分钟(数码管后两位);按MODE键(P20)偶数次 ,调节闹钟小时(数码管前两位)说明5:按模式键(P32)5次,数码管第1位闪烁(间隔时间0.5s),然后按UP键(P21)和DOWN键(P22)就可以分别加或减,设定倒计时的前两位;按MODE键(P20)1次,数码管第3位闪烁(间隔时间0.5s),然后按UP键(P21)和DOWN键(P22)就可以分别加或减,设定倒计时的前后两位;按MODE键(P20)2次,数码管不闪烁,开始99秒倒计时;按MODE键(P20)3次,数码管第1位和第3位闪烁, 倒计时暂停,在按DOWN键(P22)就可以实现倒计时清0说明6:按模式键(P32)1次,则正常显示时钟。程序功能:按模式键(P32)1次,调解时钟小时:按模式键(P32)2次,调解时钟分钟;按模式键(P32)3次,进入秒表模式;按模式键(P32)4次,进入闹钟模式;按模式键(P32)5次,进入倒计时模式 */#include #define uchar unsigned char#define uint unsigned int#define THC0 0XEE /定时器0, 5毫秒宏定义#define TLC0 0X0sbit H1=P10; /数码管从左至右第1位sbit H2=P11; /数码管从左至右第2位sbit M1=P12; /数码管从左至右第3位sbit M2=P13; /数码管从左至右第4位sbit BUZZ=P14; /蜂鸣器,低电平响sbit MODEL=P32; /模式按键sbit DOWN=P22;sbit UP=P21;sbit Change=P20; /用于闹钟,倒计时的时分转化按键 uchar code Duan=0x3F, 0x06, 0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; uchar Data_Buffer4=0,0,0,0;uchar count=0,second=0,minute=0,hour=0;uchar second1=0,second2=0,minute1=0,minute2=0,hour1=0,hour2=0;uchar clock_hour=3,clock_minute=0,daoji_hour=12,daoji_minute=34;uchar Bit=0,model_flag=0,miaobiao_count=0,zanting_flag=0,clean_flag=0,change_flag=0,daoji_clean=0;uint miaobiao_a=0,miaobiao_b=0,buzz_flag=0,buzz_star=0,shanshuo=0,daoji_flag=0,daoji_count=0;void timer0_init();/定时器0初始化void display(); /数码管显示函数void key_model(); /模式按键函数void model_zhixing(); /模式执行函数void hour_change(); /小时改变函数void minute_change(); /分钟改变函数void miaobiao(); /秒表函数void clock(); /闹钟函数void daojishi();/倒计时函数void delay_10ms() /延时10毫秒的延时函数,用于按键消抖 uchar a,b; for(b=151;b0;b-) for(a=29;a0;a-);void main() /主函数 timer0_init();/定时器0初始化 BUZZ=1; /关闭蜂鸣器 while(1)/大循环 key_model(); /模式按键函数model_zhixing(); /模式执行函数 display(); /数码管显示函数 void key_model() /模式按键函数 if(MODEL=0) /模式按键按下 delay_10ms(); /按键消抖if(MODEL=0) /确认模式按键按下 model_flag+;/模式标志位,1调小时;2调分钟;3秒表;4闹钟;5倒计时 while(!MODEL);/模式按键,按后检测是否断开 if(model_flag5)/模式标志位,大于5清0 model_flag=0; void model_zhixing() /模式执行函数 switch(model_flag) /模式标志位,选择执行以下的函数(功能) case 1:hour_change();break;/小时改变函数case 2:minute_change();break;/分钟改变函数case 3:miaobiao();break;/秒表函数case 4:clock();break; /闹钟函数case 5:daojishi();break;/倒计时函数default:break;/(此语句以防万一)如果模式标志位的值,没有可执行的函数,则跳出switch() void hour_change() /小时改变函数 if(DOWN=0) delay_10ms();if(DOWN=0) hour-; /确认按键按下,小时减1 while(!DOWN); if(hour=-1) hour=23; if(UP=0) delay_10ms();if(UP=0) hour+; while(!UP); if(hour=24) hour=0; void minute_change() /分钟改变函数 if(DOWN=0) delay_10ms();if(DOWN=0) minute-; while(!DOWN); if(minute=-1) minute=59; if(UP=0) delay_10ms();if(UP=0) minute+; while(!UP); if(minute=60) minute=0; void miaobiao() /秒表函数 if(UP=0) /秒表暂停判断 delay_10ms();if(UP=0) zanting_flag+; /秒表暂停标志位,用秒表暂停和开启,zanting_flag=0暂停;zanting_flag=1开启 while(!UP); if(zanting_flag1) zanting_flag=0; if(DOWN=0) /秒表清0判断 delay_10ms();if(DOWN=0) clean_flag+; /秒表清0标志位,用于秒表清0,clean_flag=1则秒表可以结合zanting_flag=0暂停后清0 while(!DOWN); if(clean_flag1) clean_flag=0; if(zanting_flag!=0)/条件成立,则秒表启动 if(miaobiao_count=10) /10个0.005s相加等于0.05s miaobiao_count=0; miaobiao_a+; if(miaobiao_a=20)/20个0.05s相加等于1s miaobiao_a=0; miaobiao_b+; if(miaobiao_b=100) /秒表大于100秒,秒表从0开始计时 miaobiao_b=0; if(zanting_flag=0)&(clean_flag=1) /确定暂停和秒表清0键按下,则秒表清0 miaobiao_b=0; /秒表清0miaobiao_a=0; hour1=miaobiao_b/10; hour2=miaobiao_b%10; minute1=miaobiao_a/10; minute2=miaobiao_a%10; void clock() /闹钟程序 ,主要用于设定闹钟时间 if(Change=0) /时分转换 delay_10ms();if(Change=0) change_flag+; /change_flag等于1,设置闹钟分钟 while(!Change); if(change_flag1) change_flag=0; if(change_flag=0) /时分转换健未按下change_flag等于0,设置(调节)闹钟小时 if(DOWN=0) delay_10ms(); if(DOWN=0) clock_hour-; while(!DOWN); if(clock_hour=-1) clock_hour=23; if(UP=0) delay_10ms(); if(UP=0) clock_hour+; while(!UP); if(clock_hour=24) clock_hour=0; if(change_flag=1) /时分转换健未按下change_flag等于1,设置(调节)闹钟分钟 if(DOWN=0) delay_10ms(); if(DOWN=0) clock_minute-; while(!DOWN); if(clock_minute=-1) clock_minute=59; if(UP=0) delay_10ms(); if(UP=0) clock_minute+; while(!UP); if(clock_minute=60) clock_minute=0; hour1=clock_hour/10; /闹钟送显示 hour2=clock_hour%10; minute1=clock_minute/10; minute2=clock_minute%10; void daojishi() /倒计时函数,以秒计算(即倒计时9999秒) if(Change=0) /P20用于倒计时的时分转换和变换模式 delay_10ms();if(Change=0) daoji_flag+; /daoji_flag=0(默认)调节前2位;daoji_flag=1调节后2位;daoji_flag=2开启倒计时;daoji_flag=3暂停倒计时 if(daoji_flag3) daoji_flag=0; if(daoji_flag=3) /daoji_flag=3的情况下,按下键后可以清0键,才有效 if(DOWN=0) delay_10ms(); if(DOWN=0) daoji_clean+; /daoji_clean=1,倒计时清0 while(!DOWN); if(daoji_clean1) daoji_clean=0; if(daoji_flag=0) /daji_flag=0调节倒计时前两位的时间 if(DOWN=0) delay_10ms(); if(DOWN=0) daoji_hour-; while(!DOWN); if(daoji_hour=-1) daoji_hour=99; if(UP=0) delay_10ms(); if(UP=0) daoji_hour+; while(!UP); if(daoji_hour=100) daoji_hour=0; if(daoji_flag=1) /daji_flag=1调节倒计时后两位的时间 if(DOWN=0) delay_10ms(); if(DOWN=0) daoji_minute-; while(!DOWN); if(daoji_minute=-1) daoji_minute=99; if(UP=0) delay_10ms(); if(UP=0) daoji_minute+; while(!UP); if(daoji_minute=100) daoji_minute=0; if(daoji_flag=2) /倒计的时间已经设定好了,开始倒计时 if(daoji_count200) /1s daoji_minute-; /倒计时显示分钟减1 daoji_count=0; if(daoji_minute=-1) daoji_minute=99; daoji_hour-; /倒计时显示小时减1 if(daoji_hour=-1) daoji_hour=99; if(daoji_flag=3)/倒计时显示清0 if(daoji_clean=1) hour1=0; hour2=0; minute1=0; minute2=0; if(daoji_clean!=1) /只要daoji_clean等于0就送显示,daoji_clean等于1(即清0键按下)则屏蔽送显示,把前面的值(四个0),送显示 hour1=daoji_hour/10; /倒计时送显示 hour2=daoji_hour%10; minute1=daoji_minute/10; minute2=daoji_minute%10; void display() /数码管显示函数 if(model_flag!=3)&(model_flag!=4)&(model_flag!=5) /模式3,4,5,(秒表,闹钟,倒计时)有单独的送显示,就屏蔽这个 hour1=hour/10; /计算出的值,送显示 hour2=hour%10; minute1=minute/10; minute2=minute%10; Data_Buffer0=hour1; /现实值赋给数组 Data_Buffer1=hour2; Data_Buffer2=minute1; Data_Buffer3=minute2; if(Bit=4)/用于循环打开数码管的位选(5毫秒) Bit=0; P1|=0x0f;/关数码管位选 shanshuo=DuanData_BufferBit; /把数组值赋给变量保存,为以后让数码管闪烁做准备 if(model_flag=1) /调节小时闪烁 if(count100) if(Bit=0)|(Bit=1)/前两位闪烁 shanshuo=0x0; if(model_flag=2) /调节分钟闪烁 if(count100) if(Bit=2)|(Bit=3)/后两位闪烁 shanshuo=0x0; if(model_flag=3) /到达秒表模式闪烁 if(zanting_flag!=1) /秒表暂停(偶数次暂停,如zanting_flag等于0) if(count100) if(Bit=0)|(Bit=1)|(Bit=2)|(Bit=3) /秒表暂停,四位数码管全部闪烁 shanshuo=0x0; if(model_flag=4) /调节闹钟闪烁 if(change_flag=0) /可以调节闹钟小时位 if(count100) if(Bit=1) /第2位数码管闪烁 shanshuo=0x0; if(change_flag=1) /可以调节闹钟分钟位 if(count100) if(Bit=3) /第4位数码管闪烁 shanshuo=0x0; if(model_flag=5) /到倒计时模式闪烁 if(daoji_flag=0) /可以调节倒计时前两位 if(count100) if(Bit=0) /第1位数码管闪烁 shanshuo=0x0; if(daoji_flag=1) /可以调节倒计时后两位 if(count100) if(Bit=2) /第3位数码管闪烁 shanshuo=0x0; if(daoji_flag=3) /倒计时,暂停 if(count=100) P0=shanshuo|0x80; else P0=shanshuo; else P0=shanshuo; switch(Bit)/根据Bit的值,循环打开四位数码管的位选 case 0: H1=0;break;/第1位数码管亮 case

温馨提示

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

评论

0/150

提交评论