if(P3_0==0)//判断启动按钮是否按下 {
TR1=1;//若启动按钮按下,开启定时器T1,时钟开始计时 }
if(P3_1==0)//判断停止按钮是否按下 {
TR1=0;//若启动停止按下,关闭定时器T1,时钟停止计时 }
if(P3_2==0)//判断启动按钮是否按下 {
TR1=0;// 若启动按钮按下,关闭定时器T1,时钟停止计时 counter=a=b=c=0;//将时钟内的所有变量清零
}
if(P3_3==0)// {
判断启动按钮是否按下
m=counter;//将计数的次数counter赋予显示分钟的变量m,使其显示定时的时间 等
{
if(a==counter)//如果两者相等,即定时时间到,关闭定时器T1,LED灯亮 { TR1=0; P0=0x01; a=0; }
if(a!=0&&counter!=0)//判断定时器分钟的变量a与定时的时间counter是否相
} }
if(counter==0)//判断定时按钮是否被按下 {
- 19 -
m=a;//若没被按下,数码管分钟则显示实际时间的分钟; } else {
m=counter;//若按下,则显示定时的时间分钟 }
xianshi();//执行显示程序 } }
/**********数码管显示函数**********/ void xianshi() {
for(k=0;k<10;k++) {
P1=~0x01;//十分之一秒位 P2=~led[c]; delay();
P1=~0x02;//横杠 P2=0x40; delay();
P1=~0x04;//秒位之个位 P2=~led[b]; delay();
P1=~0x08;//秒位之十位 P2=~led[b/10]; delay();
- 20 -
P0=0x00;//使LED灯始终保持静默状态
P1=~0x10; //横杠 P2=0x40; delay();
P1=~0x20;//分位之个位 P2=~led[m]; delay();
P1=~0x40;//分位之十位 P2=~led[m/10]; delay(); } }
/**********系统计时中断**********/
void time() interrupt 3 //用中断方式定时,采用定时中断1,工作方式0 {
d++;//定时器计数溢出,变量d加一,直至10 if(d==4) {
d=0;//定时器溢出10次,计数时间到达0.1s,变量d清零,十分之一秒变量c加一
c++;
if(c==10) //十分之一变量c到达10,时间到达1s,变量c清零,秒钟变量b加一
{ c=0; b++;
if(b==60)//秒钟变量b到达60,时间到达1分钟,变量b清零,分钟变量
- 21 -
a加一
{ b=0;
a++;
if(a==60)//分钟变量b到达60,时间到达60分钟,变量a清零 { a=0; }
} } }
/********按钮定时函数********/ void dingshi() interrupt 2 //采用外部中断1 {
EX1=0; //关闭外部中断1
counter++;//按键按下一次,计数次数加一 EX1=1;//开启外部中断 }
/*********延时子函数***********/ void delay() {
unsigned char n; for(n=0;n<255;n++); }
}
- 22 -
4、proteus仿真图
图12-1 数字时钟proteus仿真图
- 23 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《单片机课程设计报告》-水塔水位 - 图文(6)在线全文阅读。
相关推荐: