过往历程
前期准备
1:本文使用的头文件是由stc生成
点击保存文件之后,保存至自己文件目录下方即可
2:本文使用的都是官方提供的底层驱动代码
35定时器介绍
555,全称“通用单双极型定时器”(General-purpose Single Bipolar Timer),意思是555的一个芯片中包含一个(单)用三极管做成的(双极型)定时器。它在外接一个电阻和一个电容后,能够精确地实现延时功能。利用这个功能我们可以实现很多种电路,最常用的有三种:
- 无稳态电路
- 单稳态电路
- 双稳态电路
引脚图
- 引脚1:GND(地),接地,作为低电平(0v)参考点。
- 引脚2:TRIG(触发),当此引脚电压降至1/3VCC(或由控制端决定的阈值电压)时,输出端给出高电平。也作为下比较器的反向输入端,即触发输入端。
- 引脚3:OUT(输出),输出高电平(+VCC)或低电平。
- 引脚4:RST(复位),当此引脚接高电平时定时器工作,当此引脚接地时芯片复位,输出低电平。不用时应接高电平或悬空。
- 引脚5:CTRL(控制),控制芯片的阈值电压。当此引脚外接电压时,可改变内部两个比较器的基准电压,该端不用时,应将该端串入一只0.01uF电容接地,以防引入干扰。若此管脚接空时默认两阈值电压为1/3VCC与2/3VCC。
- 引脚6:THR(阈值),是上比较器的同相输入端。当此引脚电压升至2/3VCC (或由控制端决定的阈值电压)时,输出端给出低电平。该端与放电管集电极相连,用做定时器时电容的放电。
- 引脚7:DIS(放电),内接OC门,用于给电容放电。
- 引脚8:V+,VCC(供电),提供高电平并给芯片供电,双极型时基电路VCC的范围是4.5 ~ 16V。
总代码
#include<stc15f2k.h>
char dula[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
char disdula[]={0,0,0,0,0,0,0,0};
int diswela;
int a,con,hz;
void buzz()
{
P2=((P2&0x1f)|0xa0);
P0=0x00;
P2&=0x1f;
P2=((P2&0x1f)|0x80);
P0=0xff;
P2&=0x1f;
}
void din()
{
TMOD=0x16; // 定时器1定时,定时器0计数 0001 0110
TH1=(65536-11059/12)/256;
TL1=(65536-11059/12)%256;
TH0=0XFF;
TL0=0XFF;
EA=1;
ET1=1;
ET0=1;
TR1=1;
TR0=1;
}
void display()
{
P2=((P2&0x1f)|0xe0);
P0=0xff;
P2&=0x1f;
P2=((P2&0x1f)|0xc0);
P0=1<<diswela;
P2&=0x1f;
P2=((P2&0x1f)|0xe0);
P0=dula[disdula[diswela]];
P2&=0x1f;
if(++diswela>=8)diswela=0;
}
void display_1()
{
disdula[0]=con/10000%10;
disdula[1]=con/1000%10;
disdula[2]=con/100%10;
disdula[3]=con/10%10;
disdula[4]=con/1%10;
disdula[5]=11;
disdula[6]=11;
disdula[7]=11;
}
void main()
{
buzz();
din();
while(1)
{
display_1();
}
}
void aq() interrupt 1
{
hz++;
}
void qa() interrupt 3
{
TH1=(65536-11059/12)/256;
TL1=(65536-11059/12)%256;
display();
a++;
if(a==1000)
{
con=hz;
a=0;
hz=0;
}
}
省赛代码传送门
第三届蓝桥杯单片机省赛
第四届蓝桥杯单片机省赛
第五届蓝桥杯单片机省赛
第六届蓝桥杯单片机省赛
第七届蓝桥杯单片机省赛
第八届蓝桥杯单片机省赛
第九届蓝桥杯单片机省赛
第十届蓝桥杯单片机省赛
第十一届蓝桥杯单片机省赛