这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机C语言程序设计:10s 的秒表

共1条 1/1 1 跳转至

单片机C语言程序设计:10s 的秒表

高工
2013-10-25 15:38:18     打赏

/* 名称:10s的秒表

说明:首次按键计时开始,再次按键暂停,第三次按键清零。

*/

#includereg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitK1=P3^7;

uchar

i,Second_Counts,Key_Flag_Idx;

bitKey_State;

uchar

DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//延时

voidDelayMS(uintms)

{

uchart;

while(ms--)for(t=0;t120;t++);

}

//处理按键事件

voidKey_Event_Handle()

{

if(Key_State==0)

{

Key_Flag_Idx=(Key_Flag_Idx+1)%3;

switch(Key_Flag_Idx)

{

case1:EA=1;ET0=1;TR0=1;break;

case2:EA=0;ET0=0;TR0=0;break;

case0:P0=0x3f;P2=0x3f;i=0;Second_Counts=0;

}

}

}

//主程序

voidmain()

{

P0=0x3f;//显示00

P2=0x3f;

i=0;

Second_Counts=0;

Key_Flag_Idx=0; //按键次数(取值0123

Key_State=1; //按键状态

TMOD=0x01; //定时器0方式1

TH0=(65536-50000)/256; //定时器015ms

TL0=(65536-50000)%256;

while(1)

{

if(Key_State!=K1)

{

DelayMS(10);

Key_State=K1;

Key_Event_Handle();

}

}

}

/T0中断函数

voidDSY_Refresh()interrupt1

{

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;//10010s)后显示00

}

}

扩展阅读:TIMER0与TIMER1控制条形LED

单片机C语言程序设计:10s 的秒表




关键词: 基础知识    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]