模块:数码管 独立按键 定时器0
功能:具有清零、暂停、启动功能。
1.显示格式为 分-秒-0.05秒 例如 08-26-18 代表8分26秒900毫秒
2.独立按键 s4为:暂停/启动
独立按键s5为:清零
#include "STC15F2K60S2.H"
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint code SMG_duanma[] = //数码管段选表 0-9 最后一个为 分隔符 ‘-’
{0xc0 ,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar num = 0; // 用来显示 毫秒
uchar mint = 0; // 用来显示 秒
uchar sec = 0; // 用来显示分
sbit s4 = P3^3;
sbit s5 = P3^2;
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay2ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 22;
j = 128;
do
{
while (--j);
} while (--i);
}
void HC138init (uchar n)
{
switch (n)
{
case 4:
P2 = (P2&0x1f)|0x80;
break;
case 5:
P2 = (P2&0x1f)|0xa0;
break;
case 6:
P2 = (P2&0x1f)|0xc0;
break;
case 7:
P2 = (P2&0x1f)|0xe0;
break;
}
}
void cl_init () // 关闭蜂鸣器 继电器 流水灯
{
HC138init (5);
P0 = 0x00;
HC138init (4);
P0 = 0xff;
}
void init () // 定时器0 初始化函数
{
TMOD = 0x01;
TH0 = (65535 - 46080) / 256; // 定义初始值 定时50ms @晶振11.0592MHZ
TL0 = (65535 - 46080) % 256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void initer () interrupt 1
{
TH0 = (65535 - 46080) / 256;
TL0 = (65535 - 46080) % 256;
num++;
if(num == 20) // 判断是否到达一秒
{
sec++;
num = 0;
if(sec == 60) // 判断是否到达一分
{
mint++;
sec = 0;
}
if(mint == 99) // 判断分 是否达到最大值
{
mint = 0;
}
}
}
void displaybit (uchar pos,dat)
{
HC138init (6);
P0 = 0x01<<(pos-1);
HC138init (7);
P0 = SMG_duanma[dat];
}
void display ()
{
displaybit(1,(mint/10));
Delay2ms();
displaybit(2,(mint%10));
Delay2ms();
displaybit(3,10);
Delay2ms();
displaybit(4,(sec/10));
Delay2ms();
displaybit(5,(sec%10));
Delay2ms();
displaybit(6,10);
Delay2ms();
displaybit(7,(num/10));
Delay2ms();
displaybit(8,(num%10));
Delay2ms();
}
void scankey ()
{
if(s4 == 0)
{
Delay5ms();
if(s4 == 0)
{
TR0 = ~TR0; // 如果 TR0正在工作 按下 定时器将不再工作 反之亦然
while(s4 == 0)
{
display ();
}
}
}
if(s5 == 0)
{
Delay5ms();
if(s5 == 0)
{
num = 0; // 当s5 按下时 分秒毫秒 均为零
sec = 0;
mint = 0;
while(s5 == 0)
{
display ();
}
}
}
}
void main ()
{
cl_init ();
init ();
while(1)
{
display ();
scankey ();
}
}