风清海蓝 发表于 2019-3-13 19:40

蓝桥杯单片机比赛--基础框架程序

本帖最后由 风清海蓝 于 2019-3-19 16:35 编辑

*程序说明:本程序加一定的技巧可达省赛三等奖水平

#include<stc15f2k60s2.h>

#define uchar unsigned char//宏定义
#define uintunsigned int

uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0Xbf,0XFF};//code表示储存在ROM中
//    数组表示:    0    1    2    3    4    5    6    7    8    9    -   全灭
uchar yi,er,san,si,wu,liu,qi,ba;
bit S7=0,S6=0,S5=0,S4=0;
uchar num=0;

void delayms(int i);
void display1(uchar yi,uchar er);
void display2(uchar san,uchar si);
void display3(uchar wu,uchar liu);
void display4(uchar qi,uchar ba);
void allinit(void);
void keyscan();
//void keyscan16();

void main()
{
      allinit();
      yi=0;er=8;san=10;si=5;wu=0;liu=10;qi=5;ba=5;//初始数码管显示08-50-55
      while(1)
      {
                keyscan();
                //keyscan16();
                display1(yi,er);
                display2(san,si);
                display3(wu,liu);
                display4(qi,ba);
      }
}

//独立按键跳线帽:BTN
void keyscan()
{
      if(P30==0)
      {
                delayms(5);//消抖
                if(P30==0)
                {
                     S7=1;
                }
                while(!P30);
      }
      else if(P31==0)
      {
                delayms(5);
                if(P31==0)
                {
                     S6=1;
                }
                while(!P31);
      }
      else if(P32==0)
      {
                delayms(5);
                if(P32==0)
                {
                     S5=1;
                }
                while(!P32);
      }
      else if(P33==0)
      {
                delayms(5);
                if(P33==0)
                {
                     S4=1;
                }
                while(!P33);
      }
}


/*矩阵按键:跳线帽:KBD
void keyscan16()
{
      uchar temp;
      
      P44=0;P42=1;P3=0X7F;//0111 1111
      temp=P3;
      temp=temp&0X0F;
      if(temp!=0x0f)
      {
                delayms(5);//消抖
                temp=P3;
                temp=temp&0X0F;
                if(temp!=0x0f)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0x7e: num=0;break;
                              case 0x7d: num=1;break;
                              case 0x7b: num=2;break;
                              case 0x77: num=3;break;      
                        }
                        while(temp!=0x0f)
                        {
                              temp=P3;
                              temp=temp&0X0F;
                        }
                }
      }

      P44=1;P42=0;P3=0XBF;
      temp=P3;
      temp=temp&0X0F;
      if(temp!=0x0f)
      {
                delayms(5);
                temp=P3;
                temp=temp&0X0F;
                if(temp!=0x0f)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0xBe: num=4;break;
                              case 0xBd: num=5;break;
                              case 0xBb: num=6;break;
                              case 0xB7: num=7;break;      
                        }
                        while(temp!=0x0f)
                        {
                              temp=P3;
                              temp=temp&0X0F;
                        }
                }
      }
      
      P3=0XDF;P44=1;P42=1;
      temp=P3;
      temp=temp&0X0F;
      if(temp!=0x0f)
      {
                delayms(5);
                temp=P3;
                temp=temp&0X0F;
                if(temp!=0x0f)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0xDe: num=8;break;
                              case 0xDd: num=9;break;
                              case 0xDb: num=10;break;
                              case 0xD7: num=11;break;      
                        }
                        while(temp!=0x0f)
                        {
                              temp=P3;
                              temp=temp&0X0F;
                        }
                }
      }
      
      P3=0XEF;P44=1;P42=1;
      temp=P3;
      temp=temp&0X0F;
      if(temp!=0x0f)
      {
                delayms(5);
                temp=P3;
                temp=temp&0X0F;
                if(temp!=0x0f)
                {
                        temp=P3;
                        switch(temp)
                        {
                              case 0xEe: num=12;break;
                              case 0xEd: num=13;break;
                              case 0xEb: num=14;break;
                              case 0xE7: num=15;break;      
                        }
                        while(temp!=0x0f)
                        {
                              temp=P3;
                              temp=temp&0X0F;
                        }
                }
      }
}
*/

void allinit(void)
{
      P2=0XA0;//打开控制蜂鸣器继电器573
      P0=0X00;//关闭蜂鸣器继电器
      
      P2=0XC0;//打开数码管位选
      P0=0XFF;//选择所有数码管
      P2=0XFF;//打开数码管段选
      P0=0XFF;//关闭所有数码管
      
      P2=0X80;//打开控制LED573
      P0=0XFF;//关闭所有LED灯
}

void display1(uchar yi,uchar er)
{
                P2=0XC0;//打开数码管位选573U8
                P0=0X01;//选择第一个数码管
                P2=0XFF;//打开数码管段选573U7
                P0=tab;//数码管显示码值
                delayms(1);
               
                P2=0XC0;//打开数码管位选573U8
                P0=0X02;//选择第一个数码管
                P2=0XFF;//打开数码管段选573U7
                P0=tab;//数码管显示码值
                delayms(1);
}

void display2(uchar san,uchar si)
{
                P2=0XC0;
                P0=0X04;
                P2=0XFF;
                P0=tab;
                delayms(1);
               
                P2=0XC0;
                P0=0X08;
                P2=0XFF;
                P0=tab;
                delayms(1);
}

void display3(uchar wu,uchar liu)
{
                P2=0XC0;
                P0=0X10;
                P2=0XFF;
                P0=tab;
                delayms(1);
               
                P2=0XC0;
                P0=0X20;
                P2=0XFF;
                P0=tab;
                delayms(1);
}

void display4(uchar qi,uchar ba)
{
                P2=0XC0;
                P0=0X40;
                P2=0XFF;
                P0=tab;
                delayms(1);
               
                P2=0XC0;
                P0=0X80;
                P2=0XFF;
                P0=tab;
                delayms(1);

                P2=0XC0;
                P0=0XFF;
                P2=0XFF;
                P0=0XFF;
}

void delayms(int i)//注意最后一个for后有分号
{
      int j;
      for(i;i>0;i--)
               for(j=845;j>0;j--);
}

pipi虾 发表于 2019-3-19 16:27

对不起,是我太菜了

wangfatao 发表于 2021-3-12 14:24

我最近也要参加蓝桥杯单片机比赛,有问题请教前辈。

runfog 发表于 2019-3-17 22:53

达省赛三等奖水平:victory:

风清海蓝 发表于 2019-3-19 16:41

pipi虾 发表于 2019-3-19 16:27
对不起,是我太菜了

兄弟,加油啊:handshake

jxfzlin 发表于 2019-3-21 09:41

好,还看不懂

低调的菜鸡 发表于 2019-3-23 22:45

卧槽。蓝桥杯单片机这么水的么,我只参加过c++的,也贼tm水

风清海蓝 发表于 2019-3-24 19:21

低调的菜鸡 发表于 2019-3-23 22:45
卧槽。蓝桥杯单片机这么水的么,我只参加过c++的,也贼tm水

省赛超级水的,从监考老师就能看得出来。国赛还行

qxqy52462 发表于 2019-6-13 22:02

.........这么水?

风清海蓝 发表于 2019-6-16 23:25

qxqy52462 发表于 2019-6-13 22:02
.........这么水?

其实这个不重要,关键是自己学到了东西就行
页: [1]
查看完整版本: 蓝桥杯单片机比赛--基础框架程序