微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机+数码管简单秒表程序,带停止启动复位

单片机+数码管简单秒表程序,带停止启动复位

时间:11-30 来源:互联网 点击:
p0口是数码管的位选入口,P2口是数码管的段选用4位一体的数码管,P3.0 P3.1 P3.2分别是启动停止和复位按钮

#include

#define uchar unsigned char

#define uint unsigned int

#define DATA P2

sbit start=P3^0;

sbit stop=P3^1;

sbit reset=P3^2;

//---------启停标志-----

bit SAT=0;

bit RST=0;

//------------数码管码表----------

uchar tab[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

//------------

uint time=0; //时间

uint cnt=0; //计数

//-------------

void delay(int k)

{

while(k--);

}

void startkey()

{

static uchar i,j;

if(start==0)

{

if(i==0)

{

j++;

if(j>3)

{

if(start==0)

{

i=1;j=0; SAT=1;

}

}

}

}

else

{

i=j=0;

}

}

void stopkey()

{

static uchar i,j;

if(stop==0)

{

if(i==0)

{

j++;

if(j>3)

{

if(stop==0)

{

i=1;j=0; SAT=0;

}

}

}

}

else

{

i=j=0;

}

}

void resetkey()

{

static uchar i,j;

if(reset==0)

{

if(i==0)

{

j++;

if(j>3)

{

if(reset==0)

{

i=1;j=0; RST=1;

}

}

}

}

else

{

i=j=0;RST=0;

}

}

//---------数码管显示 00.0-------

void shownumber(int num)

{

DATA=tab[num%10];

P0=7;

delay(100);

DATA=0x80;

P0=6;

delay(100);

DATA=tab[num%100/10];

P0=5;

delay(100);

DATA=tab[num/100];

P0=4;

delay(100);

}

//---------定时器初始化ˉ---------

void time0_init()

{

TMOD=0x01;

TH0=(65536-18348)/256;

TL0=(65536-18348)%256;

EA=1;

ET0=1;

}

void T0_time()interrupt 1

{

TH0=(65536-18348)/256;

TL0=(65536-18348)%256;

cnt++;

if(cnt==5)

{

time++;cnt=0;

}

}

void main(void)

{

delay(50000);

time0_init();

while(1)

{

shownumber(time);

if(SAT==1)TR0=1;

if(SAT==0)TR0=0;

if(RST==1){TR0=0;SAT=0;time=0;}

startkey();

stopkey();

resetkey();

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top