当前位置:   article > 正文

蓝桥杯单片机备考必看内容,学习一周,保底省三!_蓝桥杯单片机考什么

蓝桥杯单片机考什么

这里我先把我弄到的历年考试类型给大家,但是这图只能参考,经历这届蓝桥杯我深有体会,考试当天早上我还在想要不要看看矩阵键盘,但是想着这个考点概率就没去看隔着摆烂,结果真考了按键12,13,16,17的运用。。。。但是有一点要说的是,这届选择题很多历届题,大家务必要去看往届题。值得一提的是这届选择题15分,编程题85分。废话不说了,下面给大家我考前看的考点板块。

请添加图片描述

温度读取 (这届考了)

#include <STC15F2K60S2.H>
#include "OneWire.h"
#include "absacc.h"
void Displaytemp();
void Delays(unsigned int t);
void Readtemp();
unsigned int temp;
unsigned char SMGNoDot_CA[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char SMGDot_CA[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

void Delay(unsigned int t)
{
	while(t--);
}

void CLOSEled()
{
	P2=(P2&0X1F)|0X80;
	P0=0XFF;
}


void closebz()
{
	P2=(P2&0X1F)|0Xa0;
	P0=0X00;
}
void DidplaySMG(unsigned char pos,unsigned char dat)
{
	P2=(P2&0X1F)|0XC0;
	P0=0X01<<pos;
	P2=(P2&0X1F)|0XE0;
	P0=dat;
//	XBYTE[0XE000]=0xff;	
//	XBYTE[0XC000]=0X01<<pos;
//	XBYTE[0XE000]=dat;
//	
}



	
//	if((temp&0xf800)==0x0000)
//	{
//		temp>>=4;
//		temp=temp*10;
//		temp=temp+(LT&0xf0)*0.625;
//		
//	}

//void Display_all(unsigned char dat)
//{
//	XBYTE[0XC000]=0Xff;
//	XBYTE[0XE000]=dat;
//}

void Displaytemp()
{

	
	DidplaySMG(7,SMGNoDot_CA[temp%10]);
	Delay(100);
	DidplaySMG(6,SMGDot_CA[(temp%100)/10]);
		Delay(100);
	DidplaySMG(5,SMGNoDot_CA[temp/100]);
		Delay(100);
	DidplaySMG(4,0xff);
		Delay(100);
	DidplaySMG(3,0xff);
		Delay(100);
	DidplaySMG(2,0xff);
		Delay(100);
	DidplaySMG(1,0xff);
		Delay(100);
	DidplaySMG(0,0xff);
		Delay(100);

}



void Readtemp()
{
	unsigned char LT,HT;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	Delay(1000);
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	LT=Read_DS18B20();
	HT=Read_DS18B20();
	
	temp = HT ;
	temp = temp << 8 ;		//左移8位,使MSB中的数据变为temp的高八位,低八位补零
	temp = temp | LT;	
	if((temp & 0xf800) == 0x0000)    //正温度的处理办法
	{
		temp >>= 4;         //取出温度结果的整数部分
		temp = temp*10;    //放大10倍
		temp = temp + (LT&0x0f)*0.625;	//加上小数部分
	}	


}

void main()
{
	closebz();
	CLOSEled();
//	XBYTE[0x8000] = 0XFF;
	while(1)
	{
		Readtemp();
		Displaytemp();
		
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119

PWM的运用(呼吸灯)


#include <STC15F2K60S2.H>

unsigned char zhankongbi=0;
	unsigned int i=0;
	unsigned int count=0;
void closeled()
{
	P2=(P2&0X1F)|0X80;
	P0=0xff;
}

void closeBUZ()
{
	P2=(P2&0X1F)|0Xa0;
	P0=0x00;
}
void InitT0()
{
		//璁剧疆瀹氭椂鍣ㄦā寮?
	TMOD |= 0x01;		//璁剧疆瀹氭椂鍣ㄦā寮?
	TH0=(65535-100)/256;
	TL0=(65535-100)%256;
	EA=1;
	ET0=1;

	
}

void Delay(unsigned int t)
{
	while(t--);
}

void Keycont()
{

	if(P30==0)
	{
		Delay(100);
		if(P30==0)
		{
			switch(i)
			{
			case 0:
				P00=0;
				zhankongbi=10;
				TR0=1;
				i=1;
				count = 0;
			break;
			
			case 1:
				zhankongbi=50;
				i=2;
				count = 0;
			break;
			
			case 2:
				zhankongbi=90;
				i=3;
				count = 0;
			break;
			
			case 3:
				P00=1;
				
				TR0=0;
				i=0;
				count = 0;
			break;
			}
			while(P30== 0);
		}
	
	}

}


void ServeT0() interrupt 1
{
	TH0=(65535-100)/256;
	TL0=(65535-100)%256;
	count++;
	if(count==zhankongbi)
	{
		
		P00=1;
	}
	else if(count>100)
	{
		
		P00=0;
		count=0;
	}

	
}


void main()
{
	closeBUZ();
	closeled();  //led放后面 p2锁定在Y4

	InitT0();

	while(1)
	{
	Keycont();
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114

时钟(这届考了)

#include <STC15F2K60S2.H>
#include "DS1302.h"

unsigned char writeadrr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char readadrr[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

unsigned char time[7]={0x50,0x59,0x10,0x05,0x04,0x02,0x22};

unsigned char SMGNoDot_CA[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void set1302()
{
	unsigned int n;
	DS1302_Init();
	DS1302_WriteByte(0x8e,0x00);
	for(n=0;n<7;n++)
	{
		DS1302_WriteByte(writeadrr[n],time[n]);
	}
	DS1302_WriteByte(0x8e,0x80);

}

void read1302()
{
	unsigned char n;
	for(n=0;n<7;n++)
	{
		time[n] = DS1302_ReadByte(readadrr[n]);
	}
}
void Delay(unsigned char t)
{
	while(t--);
}
void smgplay(unsigned char pos,unsigned dat)
{
	P2=(P2&0X1F)|0XC0;
	P0=0X01<<pos;
	P2=(P2&0x1f)|0xE0;
	P0=dat;
}
void smgplaytime()
{
	smgplay(0,SMGNoDot_CA[time[2]/16]);
	Delay(100);
		smgplay(1,SMGNoDot_CA[time[2]%16]);
	Delay(100);
		smgplay(2,0xbf);
	Delay(100);
		smgplay(3,SMGNoDot_CA[time[1]/16]);
	Delay(100);
		smgplay(4,SMGNoDot_CA[time[1]%16]);
	Delay(100);
		smgplay(5,0xbf);
	Delay(100);
		smgplay(6,SMGNoDot_CA[time[0]/16]);
	Delay(100);
		smgplay(7,SMGNoDot_CA[time[0]%16]);
	Delay(100);
}
void closeledbizz()
{
	P2=(P2&0X1F)|0X80;
	P0=0XFF;
	P2=(P2&0x1f)|0xa0;
	P0=0X00;
}


void main()
{
	closeledbizz();
	set1302();
	while(1)
	{
		read1302();
		smgplaytime();
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

AD采集 电压读取

#include <STC15F2K60S2.H>

#include "iic.h"
void Displaytemp();
void Delays(unsigned int t);
void Readtemp();
unsigned int temp;
unsigned int dat;
unsigned char SMGNoDot_CA[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char SMGDot_CA[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

void Delay(unsigned int t)
{
	while(t--);
}



void closebz()
{
	P2=(P2&0X1F)|0Xa0;
	P0=0X00;
		P2=(P2&0X1F)|0X80;
	P0=0XFF;
}
void DidplaySMG(unsigned char pos,unsigned char dat)
{
	P2=(P2&0X1F)|0XC0;
	P0=0X01<<pos;
	P2=(P2&0X1F)|0XE0;
	P0=dat;
//	XBYTE[0XE000]=0xff;	



}

void initv()
{


 IIC_Start();		 //总线起始信号
 IIC_SendByte(0x90); //字节写地址
 IIC_WaitAck();		 //等待应答
 IIC_SendByte(0x03); //发送控制字
 IIC_WaitAck();
 
 IIC_Start(); 
 IIC_SendByte(0x91); //字节读地址
 IIC_WaitAck();
 dat=IIC_RecByte();
 IIC_WaitAck();	              //不要乱去省略等待指令,单片机要扯拐
 IIC_Ack(0); 
 IIC_Stop(); 

}

void readv()
{

	dat=dat*10/51;

	DidplaySMG(0,SMGDot_CA[dat/10]);
Delay(100);
		DidplaySMG(1,SMGNoDot_CA[dat%10]);
	Delay(100);
			DidplaySMG(2,SMGNoDot_CA[dat%10]);
	Delay(100);
}

//******D/A转换 写进去的数字 函数 iic通讯******


void main()
{
	closebz();


//	XBYTE[0x8000] = 0XFF;
	while(1)
	{
		initv();
		
		readv();
//		Readtemp();
//		Displaytemp();
		
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

555频率调整

#include <STC15F2K60S2.H>

unsigned int count_t0,count_t1;
unsigned int num;
unsigned char  smg_nodot[10]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void Delay(unsigned char t)
{
	while(t--);
}

void clsledbz()
{
	P2=(P2&0X1F)|0XA0;
	P0=0X00;
	P2=(P2&0X1F)|0X80;
	P0=0XFF;	
}

void smgplay(unsigned char pos,unsigned char dat)
{
	   P2=0xE0;P0=0xff;
	P2=(P2&0X1F)|0Xc0;
	P0=0X01<<pos;
	P2=(P2&0X1F)|0Xe0;
	P0=dat;
}

void InitT01()
{
	TMOD=0X16;
	TH0=0xff;
	TL0=0xff;
	TH1=(65535-50000)/256;
	TL1=(65535-50000)%256;
	EA=1;
	ET0=1;
	ET1=1;
	TR0=1;
	TR1=1;
}

void servieT0() interrupt 1
{
	count_t0++;

}

void servieT1() interrupt 3
{
	count_t1++;

	if(count_t1==20)
	{
		num=count_t0;
		count_t0=0;
		count_t1=0;
	}
}


void smgplayhz()
{

	if(num>9999)
	{
		smgplay(3,smg_nodot[num/10000]);
	Delay(100);
	}
	if(num>999)
	{
		smgplay(4,smg_nodot[(num/1000)%10]);
	Delay(100);	
	}
	if(num>99)
	{
		smgplay(5,smg_nodot[(num/100)%10]);
	Delay(100);	
	}

	if(num>9)
	{	smgplay(6,smg_nodot[(num/10)%10]);
	Delay(100);	
	
	}
	smgplay(7,smg_nodot[num%10]);
	Delay(100);
	P2=0xC0;P0=0xff;//消隐
   P2=0xE0;P0=0xff;
}


void main()
{
	clsledbz();
	InitT01();
	while(1)
	{
	smgplayhz();
		
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103

当然除了这些之外,LED灯,数码管,继电器和蜂鸣器也要会运用,毕竟这届我们考了继电器和LED灯。可惜最后继电器会干扰蜂鸣器,使蜂鸣器不正常工作。搞的头晕(下次努力!!!)。有什么问题可以评论说,我把经验分享给大家。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/883298
推荐阅读
相关标签
  

闽ICP备14008679号