蓝桥杯单片机比赛--基础框架程序
本帖最后由 风清海蓝 于 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--);
}
对不起,是我太菜了 我最近也要参加蓝桥杯单片机比赛,有问题请教前辈。 达省赛三等奖水平:victory: pipi虾 发表于 2019-3-19 16:27
对不起,是我太菜了
兄弟,加油啊:handshake 好,还看不懂 卧槽。蓝桥杯单片机这么水的么,我只参加过c++的,也贼tm水 低调的菜鸡 发表于 2019-3-23 22:45
卧槽。蓝桥杯单片机这么水的么,我只参加过c++的,也贼tm水
省赛超级水的,从监考老师就能看得出来。国赛还行 .........这么水? qxqy52462 发表于 2019-6-13 22:02
.........这么水?
其实这个不重要,关键是自己学到了东西就行
页:
[1]