蓝桥杯单片机进阶模块--NE555

蓝桥杯单片机进阶模块--NE555_第1张图片

在使用NE555模块时,NE555是不需要驱动程序的,NE555提供一个接口就是P3^4接口,当然这个接口不是默认连接的,需要将J3用跳线帽将P3^4和SIGNAL连接起来,我们可以看到P3^4是作为T0定时器、计数器的外部输入端口,那么NE555用于频率测量时候的思路就是将T0设在计数模式工作方式2自动重装下,用来接收SIGNAL给它的脉冲,然后T1设在定时模式下,定时1s,之后将1s中T0测得的脉冲数取出,通过数码管显示出来。

蓝桥杯单片机进阶模块--NE555_第2张图片

单片机测量信号频率,并显示在数码管中,频率数据显示用5位数码管,单位是HZ
//当显示长度不足5位时,未使用到的数码管熄灭,在最左边的1位数码管用F作为提示符
//频率就是在1s内产生的多少个脉冲信号。
//P34脚T0用于计数(外部信号计数,内部信号定时。)
//T1用于定时
//T0采用8位自动重装,初值设为255,只要来一个脉冲信号就溢出进入中断
//在中断服务函数里面变量加1
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uint maichong=0;
uint maichong1=0;
uint count=0;

void hc138(uint z)
{
 switch(z)
 {
  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;
  case 0:P2=P2&0x1f|0x00;break;
 }
}

void delaysmg(uint z)
{
 while(z--);
}

void initsystem()
{
 hc138(5);P0=0x00;
 hc138(4);P0=0xff;
 hc138(0);
}

void inittimer()
{
 TMOD=0x16;   //0001 0110 定时器1定时模式工作方式1,定时器0计数模式工作方式2
 TH0=0xff;//1111 1111
 TL0=0xff;

 TH1=(65536-50000)/256;	//50ms
 TL1=(65536-50000)%266;
 TR0=1;
 TR1=1;
 EA=1;
 ET0=1;
 ET1=1; 
}

void t0() interrupt 1	//定时器0中断函数
{
 maichong++;
}

void t1() interrupt 3//定时器1中断函数
{
 TH1=(65536-50000)/256;	//50ms
 TL1=(65536-50000)%266;
 count++;
 if(count==20)
 {
  count=0;
  maichong1=maichong;
  maichong=0;
 }
}

void selectsmg(uint we,uint du)
{
 hc138(6);
 P0=0x01<9999)	   //23456
 {
  selectsmg(3,table[maichong1/10000]); //2
  delaysmg(100);
 }
 if(maichong1>999)
 {
  selectsmg(4,table[maichong1/1000%10]);//3
  delaysmg(100);
 }
 if(maichong1>99)
 {
  selectsmg(5,table[maichong1/100%10]);//4
  delaysmg(100);
 }
 if(maichong1>9)
 {
  selectsmg(6,table[maichong1/10%10]);//5
  delaysmg(100);
 }
  selectsmg(7,table[maichong1%10]);
  delaysmg(100);
 
}

void main()
{
 initsystem();
 inittimer();
 while(1)
 {
  display();
 }
}



你可能感兴趣的:(蓝桥杯单片机备赛,蓝桥杯,单片机,职场和发展)