前面几篇我们说到了 LED灯,数码管,按键等内容,按键和数码管组合可以设计出简易秒表。

硬件组成:单片机最小系统+数码管显示电路+3个按键

功能:一个开始键,一个暂停键,一个复位键。数码管显示的精度是00:00--59:99

仿真图:

程序:

程序内容比较多,详细的参考源代码

源代码:

#include<reg52.h> //头文件

#define uint unsigned int

#define uchar unsigned char

uchar qian;

uchar bai;

uchar shi;

uchar ge;

//共阴数码管0-F 编码表

uchar smg_dm[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};

uchar smg_dm1[]={0xbf,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,}; //0. 1. 2.----9.段码表

uchar smg_wm[]={0Xef,0Xdf,0xbf,0x7f}; //位选

uchar Display_buffer[4]={0,0,0,0}; //数码管显示缓存

sbit key1=P2^0; //开始键

sbit key2=P2^1; //暂停键

sbit key3=P2^2; //复位键

void delay_ms(uint z) //延时子程序

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void key(void)

{

if(key1==0)

{

delay_ms(10);

if(key1==0)

{

TR0=1;

}

while(!key1);

}

if(key2==0)

{

delay_ms(10);

if(key2==0)

{

TR0=0;

}

while(!key1);

}

if(key3==0)

{

delay_ms(10);

if(key3==0)

{

TR0=0;qian=0;bai=0;shi=0;ge=0;

}

while(!key1);

}

}

void msg_display(void)

{

uchar i;

Display_buffer[0]=qian;

Display_buffer[1]=bai;

Display_buffer[2]=shi;

Display_buffer[3]=ge;

for(i=0;i<=3;i++)

{

if(i==1)

{

P2=smg_wm[i];//选位码

P1=smg_dm1[Display_buffer[i]];//选段码

delay_ms(5);

// P2=0XFF; //消影 仿真这句加不加都一样

}

else

{

P2=smg_wm[i];//选位码

P1=smg_dm[Display_buffer[i]];//选段码

delay_ms(5);

// P2=0XFF; //消影

}

}

}

void main()

{

TMOD=0X01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;

ET0=1;

while(1)

{

key();

msg_display();

}

}

void time0() interrupt 1

{

uchar num;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

num++;

if(num==1)

{

num=0;

ge++;

if(ge==10)

{

ge=0;

shi++;

if(shi==10)

{

shi=0;

bai++;

if(bai==10)

{

bai=0;

qian++;

if(qian==6)

{

qian=0;

}

}

}

}

}

}

仿真结果:

1.《如何暂停单片机 单片机一个按键开始和暂停》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《如何暂停单片机 单片机一个按键开始和暂停》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3268557.html