# 蓝桥杯单片机综合练习9（定时器进阶）

### 独立按键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 ();
}
}


01-19 218

01-15 183

02-03 312

03-28 1041

03-16 2342

07-31

03-12 541

03-11 622

07-04 48

#### 2019年第十届蓝桥杯C/C++ 省赛B组真题 试题 B: 年号字串

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

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