蓝桥杯单片机比赛底层驱动自测可用.docx
《蓝桥杯单片机比赛底层驱动自测可用.docx》由会员分享,可在线阅读,更多相关《蓝桥杯单片机比赛底层驱动自测可用.docx(11页珍藏版)》请在冰点文库上搜索。
![蓝桥杯单片机比赛底层驱动自测可用.docx](https://file1.bingdoc.com/fileroot1/2023-6/5/00ef5aeb-201e-443a-9289-6798332d7247/00ef5aeb-201e-443a-9289-6798332d72471.gif)
蓝桥杯单片机比赛底层驱动自测可用
蓝桥杯单片机比赛底层驱动(自测可用)
1、温度
ucharread_temp(void)
{
a)uinttemp;
b)ucharlow,high;
c)Init_DS18B20();
d)Write_DS18B20(0xcc);
e)Write_DS18B20(0x44);
f)while(!
DQ);
g)Init_DS18B20();
h)Write_DS18B20(0xcc);
i)Write_DS18B20(0xbe);
j)low=Read_DS18B20();
k)high=Read_DS18B20();
l)temp=high&0x0f;
m)temp<<=8;
n)temp|=low;
o)return(uchar)(temp*0.0625);
}
2、时钟
voidsettime(uchar*p)
{
a)ucharaddr=0x8c,i=7;
b)DS1302_write(0x8e,0x00);//关闭写保护
c)while(i--)
d){
e)DS1302_write(addr,*p);
f)p++;
g)addr-=2;
h)}
i)DS1302_write(0x8e,0x80);
}
voidgettime(uchar*p)
{
j)ucharaddr=0x8d,i=7;
k)while(i--)
l){
m)*p++=DS1302_read(addr);
n)addr-=2;
o)}
}
voidsettime(uchar*p)
{
ucharaddr=0x80,i;
Write_Ds1302(0x8e,0x00);
for(i=0;i<3;i++)
{
Write_Ds1302(addr,*p++);
addr+=2;
}
Write_Ds1302(0x8e,0x80);
}
3、AD
voidadc_init()
{
a)IIC_Start();
b)IIC_SendByte(0x90);
c)IIC_WaitAck();
d)IIC_SendByte(0x05);
e)IIC_WaitAck();
f)IIC_Stop();
}
voidgetadc(unsignedchar*p)
{
g)unsignedchari;
h)IIC_Start();
i)IIC_SendByte(0x91);
j)IIC_WaitAck();
k)for(i=0;i<3;i++)
l){
m)*p++=IIC_RecByte();
n)IIC_Ack
(1);
o)}
p)*p=IIC_RecByte();
q)IIC_Ack(0);
r)IIC_Stop();
}
4、eeprom
voideeprom_write(unsignedcharaddr,unsignedcharp)
{
a)IIC_Start();
b)IIC_SendByte(0xa0);
c)IIC_WaitAck();
d)IIC_SendByte(addr);
e)IIC_WaitAck();
f)IIC_SendByte(p);
g)IIC_WaitAck();
h)IIC_Stop();
i)Delay10ms();
}
unsignedchareeprom_read(unsignedcharaddr)
{
j)unsignedchari;
k)IIC_Start();
l)IIC_SendByte(0xa0);
m)IIC_WaitAck();
n)IIC_SendByte(addr);
o)IIC_WaitAck();
p)
q)IIC_Start();
r)IIC_SendByte(0xa1);
s)IIC_WaitAck();
t)i=IIC_RecByte();
u)IIC_Ack(0);
v)IIC_Stop();
w)returni;
}
5、蜂鸣器
voidBuzzInit()
{
a)P2=((P2&0x1f)|0xa0);
b)P0=0x00;
c)P2&=0x1f;
}
6、显示
voidDisplay()
{
a)staticuchardspom=0;
b)P2=((P2&0x1f)|0xe0);
c)P0=0xff;
d)P2=((P2&0x1f)|0xc0);
e)P0=1<f)P2=((P2&0x1f)|0xe0);
g)P0=tab[dspbuf[dspom]];
h)P2&=0x1f;
i)if(dspom==7)
j)dspom=0;
k)else
l)dspom++;
}
7、按键(0-9、-、不亮、C、H)
codetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6,0x89};
unsignedcharkey_scan()
{
a)staticucharkeytime=0;
b)uchari;
c)P3|=0x0f;
d)i=P3&0x0f;
e)if(i==0x0f){
f)if(keytime<2){
g)keytime=0;
h)return0;
i)}
j)else{
k)keytime=0;
l)return1;
m)}
n)}
o)else
p){
q)keytime++;
r)if(i==0x0e)
s)keyvalue=7;
t)elseif(i==0x0d)
u)keyvalue=6;
v)elseif(i==0x0b)
w)keyvalue=5;
x)else
y)keyvalue=4;
zz)}
aa)return2;
}
8、按键2
ucharKeyBoard()
{
uchara,hang,lie;
P3|=0x0f;
keyline1=0;
keyline2=0;
keyline3=0;
keyline4=0;
a=P3&0x0f;
if(a==0x0f)
{
if(key_time>2)
{
key_time=0;
return1;
}
else
key_time=0;
}
else
{
key_time++;
switch(a)
{
case0x0e:
hang=4;
break;
case0x0d:
hang=3;
break;
case0x0b:
hang=2;
break;
case0x07:
hang=1;
break;
default:
hang=0;
}
keyline1=1;
keyline2=1;
keyline3=1;
keyline4=1;
P3&=0xf0;
if(!
keyline1)
lie=1;
elseif(!
keyline2)
lie=2;
elseif(!
keyline3)
lie=3;
else
lie=4;
keyvalue=lie*4+hang-1;
return2;
}
return0;
}
9、串口
voidsendstr(unsignedchar*p)
{
ES=0;
while(*p!
='\0')
{
SBUF=*p++;
while(!
TI);
TI=0;
}
ES=1;
}
voiduart_isr()interrupt4
{
unsignedchara;
staticunsignedchari;
RI=0;
rectab[i++]=SBUF;
//if((rectab[0]=='A')&&(rectab[1]=='A')&&(rectab[2]=='A')&&(rectab[3]=='S')&&(rectab[4]=='S')&&(rectab[5]=='S'))
if(strcmp(rectab,"AAASSS")==0)
{
for(a=0;a<6;a++)
{
rectab[a]=0;
}
i=0;
//ES=0;
uartflag=1;
}
}
10、超声波
unsignedintsonic_test()
{
unsignedintp;
for(p=0;p<8;p++){
TX=1;
Delay10us();
TX=0;
Delay10us();
}
while(!
RX);
TR1=1;
while((RX==1)&&(TF1==0));
TR1=0;
if(TF1==1)
{
TF1=0;
return999;
}
else
{
p=TH1;
p<<=8;
p|=TL1;
p*=0.017;
TH1=0;
TL1=0;
}
returnp;
}