欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-23 19:29:54
单片机c语言程序设计之10s的秒表(代码实例) /* 名称:10s 的秒表 说明:首次按键计时开始,https://www.jiakang021.com再次按键暂停,第三次按键清零。...

单片机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 

  }

}