专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机秒表程序

作者:佚名   来源:本站原创   点击数:  更新时间:2009年06月12日   【字体:

/*最近51hei论坛一会员编制了一个单片机秒表程序,该秒表有一个按键,
按键按下一次,秒表开始计时;按键按下第2次,秒表停止计数;按键按
下第3次,秒表复位归0。设计者:51Hei单片机论坛,源程序如下:*/
#include < AT89X51.H>
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90};   //七段数码管译码表
unsigned char second;   //定义秒变量
unsigned char keycnt;   //按键次数变量
unsigned int tcnt;      //中断次数变量
void main(void)         //主函数
{
unsigned char i,j;
TMOD=0x02;       //定时器0工作在模式2,GATE=0,C/T=0,自动装载模式
ET0=1;           //允许定时器0中断
EA=1;                   //允许总中断
second=0;               //置秒变量初值
P1=dispcode[second/10];   //显示定时值的十位
P0=dispcode[second%10];   //显示定时值的个位

while(1)               //无限循环
{ if(P3_5==0)          //与P3_5引脚连接的按键按下
{ for(i=20;i>0;i--)    //循环语句延时
      for(j=248;j>0;j--);     //循环语句延时
if(P3_5==0)    //如果按键确实按下
{ keycnt++;    //次数变量加1
switch(keycnt)   //根据次数变量的值分支选择
{ case 1:        //若是次数变量等于1
TH0=0x06;
TL0=0x06;  //定时器初值为6,所以溢出计数值为250μs,时钟为12MHz
TR0=1;     //启动定时器0运行
break;
case 2:   //若是次数变量等于2
TR0=0;    //停止定时器0运行
break;
case 3:   //若是次数变量等于3
keycnt=0; //次数变量清 0
second=0; //秒变量清0
break;
}         //分支选择结束
while(P3_5==0);    //等待按键抬起
} }
P1=dispcode[second/10];  //显示秒变量十位
P0=dispcode[second%10];  //显示秒变量个位
} }

 

void t0(void) interrupt 1 using 0             //定时器0中断服务程序
{
tcnt++;               //每中断1次,tcnt加1
if(tcnt==400)         //如果tcnt=400 ,则执行如下语句
{                   //0.25ms*400=100ms
tcnt=0;               //将tcnt清0
second++;            //秒变量加1
if(second==100)       //如果秒变量等于100
{ second=0; }         //将秒变量清0
} } 
 

关闭窗口

相关文章