蓝桥杯单片机学习必备资源

目录

一、你不知道蓝桥杯单片机底层驱动改了??

二、小蜜蜂教程——自撸代码

三、个人心得

1.NE555

2.DS1302 

3.DS18B20

4.AT24C02

5.PCF8951

6.串口指令读取 


一、你不知道蓝桥杯单片机底层驱动改了??

  • 底层驱动代码(主要改动):3-底层驱动代码参考.zip - 蓝奏云
  •  完整数数据包:https://pan.baidu.com/s/19Uu1z1kLv68arud6SwslcA?pwd=1234 提取码:1234
  • 官方技术文档:蓝桥杯大赛
  • 声明:谁都不知到比赛时的数据包是怎么样的!!有备无患

二、小蜜蜂教程——自撸代码

小蜜蜂教程每个模块自撸程序.zip - 蓝奏云

DS18B20、NE555、DS1302、PCF8951、串口函数(包含打印)全都有!!!

当你温度显示不出来、电压读不出、串口通信没有数据。。。。

从主要程序、底层驱动程序还有.hex找到BUG。

7c0796ea9292463e800cbf7135c53b21.png

三、个人心得

1.NE555

3个5K电阻

P34和NAL用跳帽相接;

定时器T0计数,定时器T1定时

 f302559996b94b8380b3d4b866114c0d.png

2.DS1302 

由日历时钟寄存器、31字节静态RAM组成

TASLL公司  

DS1302手册第9页

3.DS18B20

高五位   符号位  00000温度为正

中间数据位

低四位   小数位

数据手册

DS18B20手册第18页

初始化

0xcc

0x44

900ms 延时

初始化

0xcc

0xbe

底层驱动

 T*12

还要加延时

8415f937b9a74289adf3f930e3273002.png

带小数 temp>>=4;  temp=(temp*10)| (LSB &0x0xf)

不带小数 temp *=0.0625;

负温度 :   temp 取反加一

4.AT24C02

读取流程图

ATC2402手册第11页

第12页的5950f1c1ebc34adcb019d56408c38076.png

5.PCF8951

读取流程图

PCF8951手册第6页

和第14页 

0e6d82eab91147a79ada7ffe7727b12f.png

//DA转换只是比AD转换多加这一段代码
void Set_PCF8591_DAC(uchar digtal) //DAC输出 float 102.4 可能更准确
{
	IIC_Start();					
	IIC_SendByte(0x90);		//PCF8591的写设备地址 
	IIC_WaitAck();	
	IIC_SendByte(0x43); 	//输出DAC,转换AIN3	
	IIC_WaitAck(); 								
	IIC_SendByte(digtal); 		//设置DAC电压输出参数
	IIC_WaitAck(); 			//产生非应答信号 								
	IIC_Stop();	
	

6.串口指令读取 

串口中断只有定时器1 和定时器2 

控制低4位LED

 led=(led | 0x0f) & (~command | 0xf0)

 控制高四位LED

 led=(led | 0xf0) & (~command<<4 | 0x0f)

//串口重定向

#include <stdio.h>
void SendByte(unsigned char dat)
{
	SBUF=dat;
	while(TI==0);
	TI=0;
}

void Sendstring( unsigned char *str)
{
	while(*str !='\0')
	{
		SendByte(*str++);
	}
}
char putchar(char c)
{
	SendByte(c);
	return c;
}

printf("c=%.2f",c); //打印值保留后两位小数
sscanf(S,"%x",&x); //将s按照16进制格式转换为整型,并赋值给X
printf( "%d\n",x); / /输出x的十进制

//怎么判断下位机发出的字符串

unsigned char StuBUf[6];
unsigned char rexover=0;

unsigned char* ReadUart(void)//串口接收到的一串数据数组表示
{
	return StuBUf;
}

void ServiceUart() interrupt 4 //接受到数据,启动定时
{
	if(RI==1)
	{
		TR0=1;
		TL0 = 0x00;		//复位定时初值
	    TH0 = 0x00;		
		RI=0;
		StuBUf[R_I++]=SBUF;
		rexover=1;
	}
}
void coomand_mange()
{
	 
	if(rexover==1)
	{
		rexover=0;  //用数组判断收到的字符串
	if((StuBUf[0]=='r')&&(StuBUf[1]=='e')&&(StuBUf[2]=='t')&&(StuBUf[3]=='u')&& 
     (StuBUf[4]=='r')&&(StuBUf[5]=='n'))
	{
		
		Sendstring("goodbyeoword");
	}
}
}

  • 11
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值