用户登录
用户注册

分享至

单片机C语言程序设计之10s的秒表(代码实例)

  • 作者: 问天要地
  • 来源: 51数据库
  • 2021-09-03

单片机c语言程序设计之10s的秒表(代码实例)

/*  名称:10s 的秒表

说明:首次按键计时开始,https://www.jiakang021.com再次按键暂停,第三次按键清零。

 

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit k1=p3^7; 

uchar

i,second_counts,key_flag_idx;

bit key_state; 

uchar

 

dsy_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//延时

void delayms(uint ms)

{

uchar t;

while(ms--) for(t=0;t<120;t++);

}

//处理按键事件

void key_event_handle()

{

if(key_state==0)

{

key_flag_idx=(key_flag_idx+1)%3;

switch(key_flag_idx)

{ 

case 1:ea=1;et0=1;tr0=1;break;

case 2:ea=0;et0=0;tr0=0;break;

case 0:p0=0x3f;p2=0x3f;i=0;second_counts=0;

} 

                      }

           }

//主程序

void main()

{

 

p0=0x3f;            //显示 00

p2=0x3f;

i=0;

 

 

second_counts=0;

key_flag_idx=0;          //按键次数(取值 0,1,2,3)

key_state=1;      //按键状态

 

tmod=0x01;    //定时器 0 方式 1

 

th0=(65536-50000)/256;    //定时器 0:15ms 

tl0=(65536-50000)%256;

while(1)

{

if(key_state!=k1)

{ 

delayms(10); 

key_state=k1;

key_event_handle();

} 

}

}

 

/t0 中断函数

void dsy_refresh() interrupt 1

{

th0=(65536-50000)/256;   //恢复定时器 0 初值

tl0=(65536-50000)%256;

if(++i==2)

 

  {

i=0; 

second_counts++;   //50ms*2=0.1s 转换状态

p0=dsy_code[second_counts/10];

p2=dsy_code[second_counts%10];

if(second_counts==100) second_counts=0; //满 100(10s)后显示 00 

  }

}
软件
前端设计
程序设计
Java相关