51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
单片机秒表程序
发布时间:2009/7/12  阅读次数:1234  字体大小: 【】 【】【
#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
} }

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号