【蓝桥杯单片机笔记】蓝桥杯备赛资料

资料目录

资料都是来源自网络,侵删

在这里插入图片描述

下载链接
提取码:01xh
蓝桥杯必背

sfr AUXR = 0x8e;
sfr P4=0xC0; //矩阵键盘
DS18B20
可添加到main函数里面
void Read_Temperature()
{
	unsigned char LSB,MSB ;
	
	init_ds18b20();		  
	Write_DS18B20(0xCC);	      
	Write_DS18B20(0x44);
	                  
	init_ds18b20();		      
	Write_DS18B20(0xCC);	      
	Write_DS18B20(0xBE);
		      	
	LSB = Read_DS18B20();	      
	MSB = Read_DS18B20();	     

	Temp = MSB;
	Temp = (Temp<<8)|LSB;//将LSB和MSB整合成为一个16位的整数

	if((Temp & 0xf800) == 0x0000)   
	{
		Temp >>= 4;         
		Temp = Temp*10;    //小数点1位乘10(小数点2位乘100)
		Temp = Temp + (LSB&0x0f)*0.625; //10倍乘0.625,100倍乘6.25 
	}
}
Tips:
Onewire.c里面延时一定要乘以12
 t=t*12;
一定要在onewire.h里添加函数声明

PCF8591
添加到iic.h
unsigned char Adc(void) 
{ 
 	unsigned char temp; 
 	IIC_Start(); 
 	IIC_SendByte(0x90); 
 	IIC_WaitAck();
	 
 	IIC_SendByte(0x43); //0x41光敏 0x43不带光敏 允许 DAC,ADC 通道 3 
 	IIC_WaitAck(); 

 	IIC_Start(); 
 	IIC_SendByte(0x91); 
 	IIC_WaitAck(); 

 	temp = IIC_RecByte(); 
 	IIC_SendAck(1); 
 	IIC_Stop(); 

 	return temp; 
}
void Dac(unsigned char dat) 
{ 
 	IIC_Start(); 
 	IIC_SendByte(0x90); 
 	IIC_WaitAck();
	  
 	IIC_SendByte(0x43); // 允许 DAC,ADC 通道 3 
 	IIC_WaitAck();
	  
 	IIC_SendByte(dat); // dat-输出数模转换的数据
 	IIC_WaitAck();
	  
 	IIC_Stop(); 
}

Tips: 
Adc()返回的值是char型
Main函数里定义接受返回值类型必须为charDac(unsigned char dat)输出电压5值要乘0.51char型转换为)
DS1302(日历)
添加到main函数里面
unsigned char Write_DS1302_adrr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char Read_DS1302_adrr[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//年 月 日  星期  时 分 秒 (秒到年)
unsigned char Timer[7]={0x11,0x59,0x20,0x06,0x12,0x03,0x22};

void DS1302_Config(){
	char i;
	Write_Ds1302_Byte(0x8e,0x00);//打开DS1302保护功能 
	for(i=0;i<7;i++){
		Write_Ds1302_Byte(Write_DS1302_adrr[i],Timer[i]);//将Timer中数据依次放入Write_Ds1302 
	}
	Write_Ds1302_Byte(0x8e,0x80);//恢复DS1302保护功能 	
}
void Read_DS1302_Timer(){
	char i;
	for(i=0;i<7;i++){
		Timer[i]=Read_Ds1302_Byte(Read_DS1302_adrr[i]);
	}
}
Tips:数码管显示十位是Timer[i]/16,个位是Timer[i]%10
 

AT24C02(存储器)
添加到iic.h
unsigned char Read24c02(unsigned char addr)
{
	unsigned char dat;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();

	IIC_SendByte(addr);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0xa1);

	IIC_WaitAck();
	dat = IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	return dat;
}

void Write24c02(unsigned char addr,unsigned char dat)
{
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Delay(200);
	IIC_Stop();
}

NE555频率测量
void InitTimer()
{	
	TMOD = 0x04;  //定时器0计数,定时器1定时
	TH0 = 0xff;        
	TL0 = 0xff;
	TH1 = (65536 - 1000) / 256;        //1S=1000ms=1000000us
	TL1 = (65536 - 1000) % 256;

  	ET0 = 1;
  	ET1 = 1;
	TR0 = 1;
	TR1 = 1;
	EA = 1;
}

unsigned int k;
void Service_T0() interrupt 1
{
	k++;
}

unsigned int count=0; 
unsigned int fre=0;
void Service_T1() interrupt 3
{
	count++;
	if(count == 1000)
	{
		fre = k;
		count = 0;
		k = 0;
	}
}
封装Scan_Key.c
#include"reg52.h"
sfr P4=0xC0;
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;
sbit C1=P3^4;
sbit C2=P3^5;
sbit C3=P4^2;
sbit C4=P4^4;
void Scan_Key()
{
	unsigned char count;
	R1=0;
	R2=R3=R4=1;
	C1=C2=C3=C4=1;
	if(C1==0)
	{
	 while(C1==0);count=0;
	}
	if(C2==0)
	{
	 while(C2==0);count=1;
	}
	if(C3==0)
	{
	 while(C3==0);count=2;
	}
	if(C4==0)
	{
	 while(C4==0);count=3;
	}
………………………

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沅_Yuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值