【蓝桥杯单片机】NE555在CT107D上的使用

实验开发板为CT107D蓝桥官方板,编译环境为MDK5 

蓝桥的板子仅仅将它当作方波发生器,只需要测频率就行。

操作:

  1. 将P3^4和signal脚用跳线帽短接
  2. 打开定时器0设定为计数器模式
  3. 打开定时器0中断,创建计数变量于中断服务函数中自加
  4. 打开定时器1,设定1s时间标志位,在一秒内测得数值便是频率(数值一秒采集一次)

具体操作见代码

main.c:

/*******************************************************************************
* 文件名:NE555
* 描  述:将P3^4和signal短接,改变RB3改变频率
* 作  者:DE_P
* 日  期: 2019.5.7
* 备  注:CT107单片机综合实训平台 IAP15F2K61S2单片机@11.0592MHZ
*******************************************************************************
*/
#include "config.h"
#include "SMG.h"

bit flag1s = 0;	//一秒采集标志位
u32 cnt = 0;		//频率采集计数量

void Initsystem();
void Timer1Init();
void Counter0Init();

void main()
{
	Initsystem();
	Timer1Init();
	Counter0Init();
	while(1)
	{
		if(flag1s)
		{
			flag1s = 0;
			Data_Get();
			cnt = 0;
		}
	}
}

void Initsystem()
{
	P2  = (P2 & 0x1F) | 0x80;
	P0  = 0xFF;
	P2 &= 0x1F;
	
	P2  = (P2 & 0x1F) | 0xA0;
	P0  = 0x00;
	P2 &= 0x1F;
}

void Timer1Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xCD;		//设置定时初值
	TH1 = 0xD4;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	ET1 = 1;
	EA 	= 1;
}
void Service_Timer1() interrupt 3
{
	static count = 0;
	TL1 = 0xCD;		//设置定时初值
	TH1 = 0xD4;		//设置定时初值
	
	count ++;
	if(count >= 1000)
	{
		flag1s = 1;
		count  = 0;
	}
	
	SMG_Display();
}

void Service_Counter0() interrupt 1
{
	cnt ++;
}

void Counter0Init()
{
	TMOD &= 0xF0;
	TMOD |= 0x04;
	
	TH0 = 0xFF;
	TL0 = 0xFF;
	ET0 = 1;
	TR0 = 1;
}

 

config.h:

#ifndef CONFIG_H_
#define CONFIG_H_

#include 
#include 

typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned long u32;

#endif

 

SMG.c:

#include "SMG.h"

u8 SMG_Buff[8] = {
	0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,
};

u8 code SMG_Data[] = {
	              0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  //"F"
                0x89,  //"H"
                0xC7,  //"L"
                0xC8,  //"n"
                0xC1,  //"u"
                0x8C,  //"P"
                0xA3,  //"o"
                0xBF,  //"-"
                0xFF,  //熄灭
								0xFF  //自定义
};

void SMG_Display()
{	
	static u8 index = 0;
	
	P2  = (P2 & 0x1F) | 0xE0;
	P0  = 0xFF;
	P2 &= 0x1F;
	
	P2  = (P2 & 0x1F) | 0xC0;
	P0  = 0x80 >> index;
	P2 &= 0x1F;
	
	P2  = (P2 & 0x1F) | 0xE0;
	P0  = SMG_Buff[index];
	P2 &= 0x1F;
	
	index ++;
	index &= 0x07;
}

void Data_Get()
{
	SMG_Buff[4] = SMG_Data[cnt / 10000];
	SMG_Buff[3] = SMG_Data[(cnt / 1000) % 10];
	SMG_Buff[2] = SMG_Data[(cnt / 100) % 10];
	SMG_Buff[1] = SMG_Data[(cnt / 10) % 10];
	SMG_Buff[0] = SMG_Data[cnt % 10];
}

 

SMG.h:

#ifndef SMG_H_
#define SMG_H_

#include "config.h"

extern u8 code SMG_Data[];
extern u8 SMG_Buff[8];
extern u32 cnt;
	
extern void SMG_Display();
extern void Data_Get();

#endif

 

你可能感兴趣的:(蓝桥杯单片机)