吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6472|回复: 9
收起左侧

[其他原创] 蓝桥杯单片机比赛--基础框架程序

[复制链接]
风清海蓝 发表于 2019-3-13 19:40
本帖最后由 风清海蓝 于 2019-3-19 16:35 编辑

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

[C] 纯文本查看 复制代码
#include<stc15f2k60s2.h>

#define uchar unsigned char  //宏定义
#define uint  unsigned 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;//打开数码管位选573  U8
                P0=0X01;//选择第一个数码管
                P2=0XFF;//打开数码管段选573  U7
                P0=tab[yi];//数码管显示码值
                delayms(1);
                
                P2=0XC0;//打开数码管位选573  U8
                P0=0X02;//选择第一个数码管
                P2=0XFF;//打开数码管段选573  U7
                P0=tab[er];//数码管显示码值
                delayms(1);
}

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

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

void display4(uchar qi,uchar ba)
{
                P2=0XC0;
                P0=0X40;
                P2=0XFF;
                P0=tab[qi];
                delayms(1);
                
                P2=0XC0;
                P0=0X80;
                P2=0XFF;
                P0=tab[ba];
                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--);
}


免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
13135621530 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pipi虾 发表于 2019-3-19 16:27
对不起,是我太菜了
wangfatao 发表于 2021-3-12 14:24
我最近也要参加蓝桥杯单片机比赛,有问题请教前辈。
runfog 发表于 2019-3-17 22:53
 楼主| 风清海蓝 发表于 2019-3-19 16:41
pipi虾 发表于 2019-3-19 16:27
对不起,是我太菜了

兄弟,加油啊
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

其实这个不重要,关键是自己学到了东西就行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表