首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

秒表的程序-单片机

秒表的程序-单片机

该秒表有一个按键2SD1252A-R, 按键按下一次,秒表开始计时C1997-12;按键按下第2次,秒表停止计数;按键按GRM2196R1H331JZ01J
下第3次,秒表复位归0VI-241-CV。设计者:51Hei单片机论坛,源程序如下:*/
#include <PMB6810V1.83; 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]; //IC交易网显示秒变量十位
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
} }
熟悉而又陌生的感觉啊。。
返回列表