蓝桥杯单片机第十二届
Posted 一心向月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯单片机第十二届相关的知识,希望对你有一定的参考价值。
临近第十三届比赛,趁着最后一月时间,重新刷一下真题,巩固一下知识。
这些程序参考一下思路就行,最好自己写,所以我就直接上图片,不支持复制。
HEX文件:链接:https://pan.baidu.com/s/18BK6mv5UNse8wZRZe6m3fQ?pwd=azxy
提取码:azxy
主程序
底层驱动文件
iic.c
#include "reg52.h"
#include "intrins.h"
#include "iic.h"
#define DELAY_TIME 27
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
//×ÜÏßÒý½Å¶¨Òå
sbit SDA = P2^1; /* Êý¾ÝÏß */
sbit SCL = P2^0; /* ʱÖÓÏß */
void IIC_Delay(unsigned char i)
do_nop_();
while(i--);
//×ÜÏßÆô¶¯Ìõ¼þ
void IIC_Start(void)
SDA = 1;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 0;
//×ÜÏßÍ£Ö¹Ìõ¼þ
void IIC_Stop(void)
SDA = 0;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 1;
IIC_Delay(DELAY_TIME);
bit IIC_WaitAck(void)
bit ackbit;
SCL = 1;
IIC_Delay(DELAY_TIME);
ackbit = SDA;
SCL = 0;
IIC_Delay(DELAY_TIME);
return ackbit;
//ͨ¹ýI2C×ÜÏß·¢ËÍÊý¾Ý
void IIC_SendByte(unsigned char byt)
unsigned char i;
for(i=0; i<8; i++)
SCL = 0;
IIC_Delay(DELAY_TIME);
if(byt & 0x80) SDA = 1;
else SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 1;
byt <<= 1;
IIC_Delay(DELAY_TIME);
SCL = 0;
void Scan_Dac(unsigned char dat)
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x40);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
iic.h
#ifndef _IIC_H
#define _IIC_H
void Scan_Dac(unsigned char dat);
#endif
onewire.c
#include "onewire.h"
#include "reg52.h"
sbit DQ = P1^4; //µ¥×ÜÏß½Ó¿Ú
//µ¥×ÜÏßÑÓʱº¯Êý
void Delay_OneWire(unsigned int t) //STC89C52RC
t*=12;
while(t--);
//ͨ¹ýµ¥×ÜÏßÏòDS18B20дһ¸ö×Ö½Ú
void Write_DS18B20(unsigned char dat)
unsigned char i;
for(i=0;i<8;i++)
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
Delay_OneWire(5);
//´ÓDS18B20¶ÁÈ¡Ò»¸ö×Ö½Ú
unsigned char Read_DS18B20(void)
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
dat |= 0x80;
Delay_OneWire(5);
return dat;
//DS18B20É豸³õʼ»¯
bit init_ds18b20(void)
bit initflag = 0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag = DQ;
Delay_OneWire(5);
return initflag;
long Ds18b20_read()
unsigned char low, how;
long temp;
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
Delay_OneWire(100);
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
low=Read_DS18B20();
how=Read_DS18B20();
temp=how<<8;
temp=temp|low;
temp=temp*6.23;
return temp;
onewire.h
#ifndef __ONEWIRE_H
#define __ONEWIRE_H
long Ds18b20_read();
#endif
以上是关于蓝桥杯单片机第十二届的主要内容,如果未能解决你的问题,请参考以下文章