蓝桥杯单片机学习过程记录(六)基础内容综合

蓝桥杯单片机学习过程记录(六)基础内容综合

基础内容总结
LED+数码管+独立按键+矩阵按键+蜂鸣器

#include<STC15F2K60S2.H>
#define uchar unsigned char
#define uint unsigned int
bit s4,s5,s6,s7;
void delayms(int ms);
void display_12(one,two);
void display_34(three,four);
void display_56(five,six);
void display_78(seven,eight);
void key_scan();
void key_scan_1();
void all();
uchar temp;
uint one,two,three,four,five,six,seven,eight;
uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
uchar sep[]={0xc7,0xfb,0x1c,0xbf,0xF1,0x04,0x54,0x6f};
void main(void){
 all();
 one=seg[1];two=seg[2];three=seg[3];four=seg[4];five=seg[5];six=seg[6];
 seven=seg[7];
 eight=seg[8];
 while(1){
  key_scan_1();
  display_12(one,two);
  display_34(three,four);
  display_56(five,six);
  display_78(seven,eight);
 }
}
//独立键盘
void key_scan(){
 if(P30==0){
  delayms(5);
  if(P30==0){
   s7=1;
   one =seg[0];
  }
  while(!P30);
 }
 else if(P31==0){
  delayms(5);
  if(P31==0){
   two=seg[8];
  }
  while(!P31);
 }
}
//矩阵键盘
void key_scan_1(){
 //第一列
 P44=0;P42=1;P3=0xFF;
 temp=P3;
 temp=temp&0X0f;
 if(temp!=0x0f){
  delayms(5);
  temp=P3;
  temp=temp&0x0f;
  if(temp!=0x0f){
   temp=P3;
   switch(temp){
    case 0xfe: one=seg[6];break;
    case 0xfd: two=seg[8];break;
   }
   while(temp!=0x0f){
    temp=P3;
    temp=temp&0x0f;
   }
  }
 }
 //第二列
 P44=1;P42=0;P3=0xFF;
 temp=P3;
 temp=temp&0X0f;
 if(temp!=0x0f){
  delayms(5);
  temp=P3;
  temp=temp&0x0f;
  if(temp!=0x0f){
   temp=P3;
   switch(temp){
    case 0xfe: one=seg[9];break;
    case 0xfd: two=seg[0];break;
   }
   while(temp!=0x0f){
    temp=P3;
    temp=temp&0x0f;
   }
  }
 }
 //第三列
 P44=1;P42=1;P3=0xdF;
 temp=P3;
 temp=temp&0X0f;
 if(temp!=0x0f){
  delayms(5);
  temp=P3;
  temp=temp&0x0f;
  if(temp!=0x0f){
   temp=P3;
   switch(temp){
    case 0xde: one=seg[4];break;
    case 0xdd: two=seg[7];break;
   }
   while(temp!=0x0f){
    temp=P3;
    temp=temp&0x0f;
   }
  }
 }
  //第四列
 P44=1;P42=1;P3=0xeF;
 temp=P3;
 temp=temp&0X0f;
 if(temp!=0x0f){
  delayms(5);
  temp=P3;
  temp=temp&0x0f;
  if(temp!=0x0f){
   temp=P3;
   switch(temp){
    case 0xee: one=sep[0];two=sep[1];three=~sep[2];four=sep[3];five=sep[4];six=~sep[5];seven=~sep[6],eight=~sep[7];break;
    case 0xed: one=seg[11];two=seg[11];three=seg[11];four=seg[5];
    five=seg[2];six=seg[0];seven=seg[11],eight=seg[11];break;
   }
   while(temp!=0x0f){
    temp=P3;
    temp=temp&0x0f;
   }
  }
 }
}
//数码管12
void display_12(one,two){
 P2=0XC0;P0=0X01;P2=0XE0;P0=one;
 delayms(1);
 P2=0XC0;P0=0X02;P2=0XE0;P0=two;
 delayms(1);
}
//数码管34
void display_34(three,four){
 P2=0XC0;P0=0X04;P2=0XE0;P0=three;
 delayms(1);
 P2=0XC0;P0=0X08;P2=0XE0;P0=four;
 delayms(1);
}
//数码管56
void display_56(five,six){
 P2=0XC0;P0=0X10;P2=0XE0;P0=five;
 delayms(1);
 P2=0XC0;P0=0X20;P2=0XE0;P0=six;
 delayms(1);
}
//数码管78
void display_78(seven,eight){
 P2=0XC0;P0=0X40;P2=0XE0;P0=seven;
 delayms(1);
 P2=0XC0;P0=0X80;P2=0XE0;P0=eight;
 delayms(1);
}
//延时函数
void delayms(int ms){
 int q,w;
 for(q=0;q<ms;q++)
  for(w=0;w<845;w++);
}
//初始化
void all(){
 //初始蜂鸣器
 P2=0XA0;P0=0X00;
 //关闭数码管
 P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;
 //关闭LED
 P2=0X80;P0=0XFF;
}
发布了27 篇原创文章 · 获赞 17 · 访问量 4155

猜你喜欢

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