蓝桥杯单片机rb2,光敏电阻电压读取
时间:2023-02-08 02:00:00
#include #include #include #define ui unsigned int #define uc unsigned char ui tp; uc code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6}/0-9,关闭,C uc code tac[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; void delay()///延迟函数 { unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } void hc138(ui n)/打开/138锁定器 { switch(n) { case 0:P2=P2&0X1F;break; case 4:P2=P2&0X1F|0x80;break; case 5:P2=P2&0X1F|0xA0;break; case 6:P2=P2&0X1F|0xC0;break; case 7:P2=P2&0X1F|0xE0;break; } } void Output(uc add,uc dat)///输出函数 { hc138(add); P0=dat; } void initimer()///初始化 { Output(4,0xff); Output(5,0x00); Output(6,0x00); Output(7,0x00); } void OutputSMG(uc gqb,uc yxl)///数字管输出函数 { Output(6,(0x01<
官方驱动,自己补充完整。
/* 程序说明: IIC总线驱动程序 软件环境: Keil uVision 4.10 硬件环境: CT107单片机综合培训平台(12MHz) 日 期: 2011-8-9 */ #include "iic.h" void IICdelay() { unsigned char i; _nop_(); i = 11; while (--i); } ///总线启动条件 void IIC_Start(void) { SDA = 1; SCL = 1; IICdelay(); SDA = 0; IICdelay() ; SCL = 0; } ///总线停止条件 void IIC_Stop(void) { SDA = 0; SCL = 1; IICdelay(); SDA = 1; } ///应答位控制 void IIC_Ack(unsigned char ackbit) { if(ackbit) { SDA = 0; } else { SDA = 1; } IICdelay(); SCL = 1; IICdelay(); SCL = 0; SDA = 1; IICdelay(); } //等待回应 bit IIC_WaitAck(void) { SDA = 1; IICdelay(); SCL = 1; IICdelay(); if(SDA) { SCL = 0; IIC_Stop(); return 0; } else { SCL = 0; return 1; } } //通过I2C总线发送数据 void IIC_SendByte(unsigned char byt) { unsigned char i; for(i=0;i<8;i ) { if(byt&0x80) { SDA = 1; } else { SDA = 0; } IICdelay(); SCL = 1; byt <<= 1; IICdelay(); SCL = 0; } } //从I2C在总线上接收数据 unsigned char IIC_RecByte(void) { unsigned char da; unsigned char i; for(i=0;i<8;i ) { SCL = 1; IICdelay(); da <<= 1; if(SDA) da |= 0x01; SCL = 0; IICdelay(); } return da; } ///读取函数代码 unsigned char IIC_Read(unsigned char add) { unsigned char temp; IIC_Start(); //启动 IIC_SendByte(0x90);//调用PCF8591,并为写作操作 IIC_WaitAck();/等待 IIC_SendByte(add); //add值决定通道0x01是光敏电阻,0x三十是滑动变阻器 IIC_WaitAck();/等待 IIC_Stop();//停止 IIC_Start();//重新启动 IIC_SendByte(0x91); //调用PCF8591,还有阅读操作 IIC_WaitAck();/等待 temp=IIC_RecByte();///把读取的数据给temp IIC_Stop();//停止 return temp;//返回temp } //(写函数代码) void IIC_Write(unsigned char add,unsigned char dat) { IIC_Start(); IIC_SendByte(0x90); IIC_WaitAck(); IIC_SendByte(add); IIC_WaitAck(); IIC_SendByte(dat); IIC_WaitAck(); IIC_Stop(); }
iic.h
#ifndef _IIC_H #define _IIC_H #include #include "intrins.h" #define SlaveAddrW 0xA0 #define SlaveAddrR 0xA1 ///总线引脚定义 sbit SDA = P2^1; /* 数据线 */ sbit SCL = P2^0; /* 时钟线 */ //函数声明 void IIC_Start(void); void IIC_Stop(void); void IIC_Ack(unsigned char ackbit); void IIC_SendByte(unsigned char byt); bit IIC_WaitAck(void); unsigned char IIC_RecByte(void); unsigned char IIC_Read(unsigned char add); void IIC_Write(unsigned char add,unsigned char dat); #endif