资料目录
资料都是来源自网络,侵删
下载链接
提取码: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函数里定义接受返回值类型必须为char型
Dac(unsigned char dat)输出电压5值要乘0.51(char型转换为)
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;
}
………………………