stm32倒计时秒表proteus_单片机倒计时秒表系统实验程序Proteus仿真

#include

unsigned  char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管 0-9

sbit led=P3^0;

sbit s1=P0^0;

sbit s2=P0^1;

sbit k0=P2^0;

sbit k1=P2^1;

int sec=0,i,a,b=20,key1;

/*—–延迟函数——-*/

void delay(int z)

{

while(z–>0);

}

/*—–显示函数——-*/

void display(int n)

{

if(n>0)

{

s2=1;s1=0;          //显示十位

P1=tab[n/10];  //除10,取十位数值

delay(100);           //延迟显示

s1=1;s2=0;           //显示个位

P1=tab[n%10];  //求余,取个位数值

delay(100);           //延迟

}

else

{                                //当输入值小于0,显示0

s2=1;s1=0;            //显示十位

P1=tab[0];            //除10,取十位数值

delay(100);            //延迟

s1=1;s2=0;            //显示个位

P1=tab[0];                //求余,取个位数值

delay(100);            //延迟显示

}

}

/*—–外部中断0中断服务函数———-*/

void RESET() interrupt        0

{

sec=0;         //恢复初始值

b=20;         //恢复初始值

TR0=0;         //关闭定时器

}

/*—–外部中断1中断服务函数———-*/

void START() interrupt        2

{

TR0=1;        //打开定时器

}

/*—–定时器T0服务函数,计时功能———-*/

void timer0() interrupt 1

{

i–;   //50ms时间到

TH0=(65536-50000)/256;        //存放高8位,50ms

TL0=(65536-50000)%256;          //存放低8位

if(i==0)

{

i=20;            //1s计数

sec++;                        //软件计数1s

}

}

/*——键值扫描函数———-*/

void key()

{

k0=1;k1=1;                    //读按键

key1=P2;                //将P2的值赋值给key1

key1=key1&0x03;                //屏蔽高6位,保留k0,k1的值

while(key1!=0x03)   //判断是否有按键按下

{

delay(600);                        //消抖动

key1=P2;

key1=key1&0X03;

while(key1!=0x03)         //当有按键按下时

{

if(k0==0) b=b+1;            //按下k0按键时,初始值加1

else b=b-1;                         //按下k1按键时,初始值减1

k0=1;k1=1;                   //判断按键是否抬起

key1=P2;                  //重新将P2的值赋值给key1

key1=key1&0x03;

while(key1!=0x03)  //判断是否有按键按下

{

key1=P2;

key1=key1&0x03;

}

}

}

}

/*——主函数———-*/

void main()

{

TMOD=0X01;                           //设定定时器0工作,工作方式1

TH0=(65536-50000)/256;         //存放高8位,50ms

TL0=(65536-50000)%256;         //存放低8位

IT0=1;IT1=1;                 //外部中断选择下降沿触发

IE=0X87;                         //开启INT0,INT1,T0

PX0=1;                            //设定INT0为高优先级

led=1;                                //初始灯熄灭

TR0=0;                                //初始计数停止

i=2;

while(1)

{

a=b-sec;                         //将增计时变为减计时

if(TR0==0)                         //当定时器关闭时开启键值扫描

{key();}

display(a);                         //显示函数

if(a<=0)

{

led=0;                                 //当减计时为0时,报警灯点亮

}

else

{

led=1;                                //当减计时不为0时,报警灯熄灭

}

}

}

相关资源:PPT倒计时软件FlyClock(PPT倒计时软件)v1.3_ppt倒计时代码-其它…

来源:AshdollR

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月21日
下一篇 2020年11月22日

相关推荐