蓝桥杯单片机学习过程记录(十一)第三届自动售水机

蓝桥杯单片机学习过程记录(十一)第三届自动售水机

用到的内容:

独立按键s6.s7
数码管显示
IIC光敏电阻
Led小灯
定时器
继电器

#include<STC15F2K60S2.H>
#include<intrins.h>
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf,0xff};
sbit s4=P3^3;
sbit s5=P3^2;
sbit s6=P3^1;
sbit s7=P3^0;
sbit SCL=P2^0;
sbit SDA=P2^1;           
long int num,num_1;
long int price;
unsigned char flag_time;
unsigned char t;
unsigned char rd_num;
void delayms(int ms);
void allinit();
void display_12(yi,er);
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void key_scan();
void Delay6us();
void time0init();
void rd_start();
void rd_stop();
void rd_send(unsigned char dat);
void wait();
unsigned char rd_rect();
unsigned char rd_read();
void main(void){
 allinit();
 yi=21;er=10;san=5;si=0;
 wu=0;liu=10;qi=0;ba=0;
 while(1){
  key_scan();
  rd_num=rd_read();
  if(flag_time==1){
   wu=num/100;liu=num%100/10+10;qi=num%10;ba=0;
  }
  else{
   EA=0;ET0=0;
   P2=0XA0;
   //¼ÌµçÆ÷¹Ø
   P0=~0X10;
   price=num*5;
   wu=price/1000;liu=price%1000/100+10;qi=price%100/10;ba=price%10;
  }
  if(rd_num>125){
   P2=0X80;P0=0XFF;
  }
  else if(rd_num<126){
   P2=0X80;P0=~0X01;
  }
  //yi=rd_num/100;er=rd_num%100/10;san=rd_num%10;
  display_12(yi,er);
  display_34(san,si);
  display_56(wu,liu);
  display_78(qi,ba);
 }
}
//Æô¶¯
void rd_start(){
 SCL=1;SDA=1;Delay6us();
 SDA=0;Delay6us();
 SCL=0;
}
//Í£Ö¹
void rd_stop(){
 SCL=0;SDA=0;Delay6us();
 SDA=1;Delay6us();
}
//·¢ËÍ
void rd_send(unsigned char dat){
 unsigned char i;
 for(i=0;i<8;i++){
  if(dat&0x80) SDA=1;
  else SDA=0;
  Delay6us();
  SCL=1;
  dat<<=1;
  Delay6us();
  SCL=0;
 }
}
//µÈ´ý
void rd_wait(){
 SDA=1;Delay6us();
 SCL=1;Delay6us();
 if(SDA){
  SCL=0;
  rd_stop();
 }
 else 
  SCL=0;
}
//½ÓÊÕ
unsigned char rd_rect(){
 unsigned char i;
 unsigned char dat;
 for(i=0;i<8;i++){
  SCL=1;Delay6us();
  dat<<=1;
  if(SDA)
   dat|=0x01;
  SCL=0;Delay6us();
 }
 return dat;
}
//¶ÁÈ¡
unsigned char rd_read(){
 unsigned char temp;
 rd_start();
 rd_send(0x90);
 rd_wait();
 rd_send(0x01);
 rd_wait();
 rd_stop();
 rd_start();
 rd_send(0x91);
 rd_wait();
 temp=rd_rect();
 rd_stop();
 return temp;
}
//ÑÓʱ6us
void Delay6us()  //@11.0592MHz
{
 unsigned char i;
 i = 14;
 while (--i);
}
//°´¼ü¹¦ÄÜ
void key_scan(){
 //S7¿ØÖÆ¿ª
 if(s7==0){
  delayms(5);
  if(s7==0){
   if(flag_time==1){
    num=num;
   }
   else{
    time0init();
    P2=0XA0;
    //¼ÌµçÆ÷¿ª
    P0=0X10;
    //¶¨Ê±Æ÷´ò¿ª
    EA=1;ET0=1;
    flag_time=1;
    num=0;
   }
  }
  while(!s7);
 }
 //s6¿ØÖƹØ
 else if(s6==0){
  delayms(5);
  if(s6==0){
   flag_time=0;
  }
  while(!s6);
 }
}
void time0(void) interrupt 1
{
 t++;
 //1s¼Ó0.1L
 if(t==200)
 {
  num++;
 }
 if(num==1000){
  yi=21;er=21;san=21;si=21;
  flag_time=0;
 }
}
//5ms
void time0init(){
 AUXR |=0X80;
 TMOD &=0XF0;
 TL0=0X00;
 TH0=0X28;
 TF0=0;
 TR0=1;
}
void allinit(){
 P2=0XA0;P0=0X00;
 P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;
 P2=0X80;P0=0XFF;
}
void display_12(yi,er){
 P2=0XC0;P0=0X01;P2=0XE0;P0=seg[yi];
 delayms(1);
 P2=0XC0;P0=0X02;P2=0XE0;P0=seg[er];
 delayms(1);
}
void display_34(san,si){
 P2=0XC0;P0=0X04;P2=0XE0;P0=seg[san];
 delayms(1);
 P2=0XC0;P0=0X08;P2=0XE0;P0=seg[si];
 delayms(1); 
}
void display_56(wu,liu){
 P2=0XC0;P0=0X10;P2=0XE0;P0=seg[wu];
 delayms(1);
 P2=0XC0;P0=0X20;P2=0XE0;P0=seg[liu];
 delayms(1); 
}
void display_78(qi,ba){
 P2=0XC0;P0=0X40;P2=0XE0;P0=seg[qi];
 delayms(1);
 P2=0XC0;P0=0X80;P2=0XE0;P0=seg[ba];
 delayms(1); 
}
void delayms(int ms){
 int q,w;
 for(q=0;q<ms;q++)
  for(w=0;w<845;w++);
}
发布了27 篇原创文章 · 获赞 17 · 访问量 4147

猜你喜欢

转载自blog.csdn.net/weixin_44747240/article/details/104313972