第三届蓝桥杯单片机设计与开发项目省赛试题:“自动售水机”设计任务书
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); }
- 版权声明:文章来源于网络采集,版权归原创者所有,均已注明来源,如未注明可能来源未知,如有侵权请联系管理员删除。