c语言编辑控件清零,这个利用单片机中断 清零 的功能怎么编写?

#include

typedef unsigned char u8;

typedef unsigned int  u16;

sbit start=P2^7;

sbit stop=P2^6;

sbit plus_one=P2^5;

sbit resert=P2^4;

#define dpick P0

#define wpick P1

u16 num1=0;                                                               //1s的次数的计数值

u16 num60=0;                                                                      //1min的次数的计数值

u16 zd_num=0;                                                                                                                          //进入中断次数的计数值

//子函数

void delay(u16 num)                                                         //延时函数

{

u16 x,y;

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

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

{

;

}

}

u8 code table[]={0x3f,0x06 ,0x5b ,0x4f, 0x66, 0x6d, 0x7d ,0x07, 0x7f,

0x6f,0x77 ,0x7c, 0x39, 0x5e, 0x79, 0x71};

void Display(u16 a,u16 b,u16 c,u16 d)                                      //定义显示函数

{

dpick=table[a];                                              //秒的个位的段选

wpick=0x7f;                                                                       //秒的个位的位选

delay(5);

dpick=table[b];                                                        //秒的十位的段选

wpick=0xbf;                                                                              //秒的十位的位选

delay(5);

dpick=table[c]+0x80;                                                   //分的个位的段选(带小数点)

wpick=0xdf;                                                                           //分的个位的位选

delay(5);

dpick=table[d];                                                                   //分的十位的段选

wpick=0xef;                                                                               //分的十位的位选

delay(5);

}

void InitTimer0()                                                         //定时器初始化函数

{

TMOD=0x01;                                                            //选择定时器0的工作方式1

TH0=(65535-50000) / 256;                                                                      //计算初值 (定时50ms)

TL0=(65535-50000) % 256;

EA=1;                                                                          //打开总中断

ET0=1;                                                                      //打开定时器中断

TR0=0;

}

void TIMER0()  interrupt 1                                                //定时器中断服务函数

{

TH0=(65535-50000) / 256;                                              //手动填充

TL0=(65535-50000) % 256;

zd_num++;                                                                      //让进入中断次数值加1,用于判断是否达到1s

}

//主函数

void main()

{

u16 s1,s10,min1,min10;                                     //秒的个位,秒的十位,分的个位,分的十位

InitTimer0();                                                   //初始化定时器

while(1)

{

if(start==0)                                                   //检测启动

{

delay(20);

if(start==0)

{

TR0=1;                                                            //定时器打开

while(!start);

}

}

if(stop==0)                                                     //检测启动

{

delay(20);

if(stop==0)

{

TR0=0;                                                                //定时器关闭

while(!stop);

}

}

if(plus_one==0)

{

delay(20);

if(plus_one==0)

{

zd_num=zd_num+20;

while(!plus_one);

}

}

if(resert==0)

{

delay(20);

if(resert==0)

{

zd_num=0;

TR0=0;

num1=0;

num60=0;

}

while(!resert);

}

if(zd_num>=20)

{

zd_num=0;

num1++;

if(num1>=60)

{

num1=0;

num60++;

if(num60>=60)

{

TR0=0;

num1=0;

num60=0;

zd_num=0;

}

}

}

s1=num1%10;                                                      //从秒的计数值里面分离秒的个位

s10=num1/10;                                                //从秒的计数值里面分离秒的十位

min1=num60%10;                                                    //从分的计数值里面分离分的个位

min10=num60/10;                                                    //从分的计数值里面分离分的十位

Display(s1,s10,min1,min10);                                 //显示

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值