第三届蓝桥杯单片机设计与开发项目省赛试题:“自动售水机”设计任务书
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Ack(bit ackbit);
void IIC_SendByte(unsigned char byt);
bit IIC_WaitAck(void);
unsigned char IIC_RecByte(void);
void Delay10us();
unsigned int duquad(unsigned char add);
#include<iic.h>
#include "reg52.h"
#include "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
sbit SDA = P2^1;
sbit SCL = P2^0;
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
somenop;
SDA = 0;
somenop;
SCL = 0;
}
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
somenop;
SDA = 1;
}
void IIC_Ack(bit ackbit)
{
if(ackbit)
{
SDA = 0;
}
else
{
SDA = 1;
}
somenop;
SCL = 1;
somenop;
SCL = 0;
SDA = 1;
somenop;
}
bit IIC_WaitAck(void)
{
SDA = 1;
somenop;
SCL = 1;
somenop;
if(SDA)
{
SCL = 0;
IIC_Stop();
return 0;
}
else
{
SCL = 0;
return 1;
}
}
void IIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byt&0x80)
{
SDA = 1;
}
else
{
SDA = 0;
}
somenop;
SCL = 1;
byt <<= 1;
somenop;
SCL = 0;
}
}
unsigned char IIC_RecByte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++)
{
SCL = 1;
somenop;
da <<= 1;
if(SDA)
da |= 0x01;
SCL = 0;
somenop;
}
return da;
}
void Delay10us()
{
unsigned char i;
_nop_();
i = 25;
while (--i);
}
unsigned int duquad(unsigned char add)
{ unsigned int ad;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Stop;
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
Delay10us();
ad=IIC_RecByte();
IIC_Stop;
return ad;
}
#include<stc15f2k60s2.h>
#include<iic.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
uint yi,er,san,si,wu,liu,qi,ba;
uint t,chushui,jiaqian,qiehuan;
uint add;
uchar code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x7f};
void shangdian();
void delay1ms(int ms);
void keypros();
void display1();
void display2();
void Timer0Init(void);
main()
{ shangdian();
Timer0Init();
yi=er=san=si=wu=liu=qi=ba=10;
while(1)
{
add=duquad(0x01);
if(add<64)
{
P2=0X80;P0=~(0X01);
}
else
{
P2=0X80;P0=0Xff;
}
if(qiehuan==1){yi=10;er=0;san=5;si=0;
wu=chushui/1000;
liu=chushui%1000/100;
qi=chushui%100/10;
ba=chushui%10; display1();
display2();}
if(qiehuan==2)
{
yi=10;er=0;san=5;si=0;
wu=jiaqian/10000;
liu=jiaqian%10000/1000;
qi=jiaqian%10000%1000/100;
ba=jiaqian%10000%1000%100/10;
display1();
display2();}
keypros();
}
}
void Timer0Init(void)
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0xCD;
TH0 = 0xD4;
TF0 = 0;
TR0 = 0;
ET0=1;EA=1;
}
void time() interrupt 1
{
t++;
if(t==100)
{ chushui++;
t=0;
if(chushui==9999)
{
P2=0XA0;P0=0X00;
}
}}
void shangdian()
{
P2=0XA0;P0=0X00;
P2=0X80;P0=0XFF;
P2=0XC0;P0=0XFF;
P2=0XE0;P0=0XFF;
}
void delay1ms(int ms)
{
int i;
for( ;ms>0;ms--)
{
for(i=845;i>0;i--) ;
}}
void keypros()
{ if(s7==0)
{
delay1ms(5);
if(s7==0)
{
qiehuan=1;
TR0 = 1;
P2=0XA0;P0=0X10;
}
while(!s7) ;}
if(s6==0)
{
delay1ms(5);
if(s6==0)
{ TR0 = 0;qiehuan=2;
P2=0XA0;P0=0X00;
jiaqian=chushui*5;
chushui=0;
}
while(!s6) ;}
}
void display1()
{ P2=0XC0;P0=0X01;
P2=0XE0;P0=smg[yi];
delay1ms(1);
P2=0XC0;P0=0X02;
P2=0XE0;P0=smg[er]&0x7f;
delay1ms(1);
P2=0XC0;P0=0X04;
P2=0XE0;P0=smg[san];
delay1ms(1);
P2=0XC0;P0=0X08;
P2=0XE0;P0=smg[si];
delay1ms(1);
}
void display2()
{ P2=0XC0;P0=0X10;
P2=0XE0;P0=smg[wu];
delay1ms(1);
P2=0XC0;P0=0X20;
P2=0XE0;P0=smg[liu]&0x7f;
delay1ms(1);
P2=0XC0;P0=0X40;
P2=0XE0;P0=smg[qi];
delay1ms(1);
P2=0XC0;P0=0X80;
P2=0XE0;P0=smg[ba];
delay1ms(1);
}