一、介绍
关于蓝桥杯单片机的一些基础代码,比赛的时候这些基础代码基本都是要写的,具体使用要根据实际的题目进行相应的改动
二、模板模块
关于蓝桥杯单片机的代码书写时,首先书写以下代码(死模板)
#include <REGX52.H>
unsigned char code SMG_duanma[18]=//比赛时会提供,数组需要自己定义
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
0xff,0xff};
void delay(unsigned int t)//延时(也可以用STC ISP生成)
{
while(t--);
}
void Chushi()//初始化单片机
{
P2 = 0XA0;P0 = 0X00;//关闭蜂鸣器
P2 = 0X80;P0 = 0XFF;//关闭所有LED
P2 = 0XC0;P0 = 0XFF;//位选所有数码管
P2 = 0XFF;P0 = 0XFF;//关闭所有数码管
}
void HC138(unsigned int n)//138译码器
{
switch(n)
{
case 4: P2 = (P2 & 0X1F) | 0X80;break;//LED灯
case 5: P2 = (P2 & 0X1F) | 0XA0;break;//继电器
case 6: P2 = (P2 & 0X1F) | 0XC0;break;//数码管位选
case 7: P2 = (P2 & 0X1F) | 0XE0;break;//数码管显示
}
}
void main()//主函数
{
while(1)
{
//调用的函数,需要实现的代码在此输入
}
}
三、LED灯模块
原理图
傻瓜式数码管流水灯
void LED()
{
HC138(4);//调用HC138函数,选择LED灯
P0 = 0xfe;
delay(60000);//延时
P0 = 0xfd;
delay(60000);
P0 = 0xfb;
delay(60000);
P0 = 0xf7;
delay(60000);
P0 = 0xef;
delay(60000);
P0 = 0xdf;
delay(60000);
P0 = 0xbf;
delay(60000);
P0 = 0x7f;
delay(60000);
}
四、数码管显示
原理图
数码管显示代码
void display(unsigned char count,num)//数码管显示无小数点,count为数码管位选,num为数码管显示内容
{
HC138(6);
P0 = 0X01<<count;
HC138(7);
P0 = SMG_duanma[num];
delay(845);
}
五、独立按键&矩阵按键
原理图
独立按键代码
void key()
{
if(P3_0 == 0)//按键S7 相应的只需要改PX_X就可以
{
delay(100)
if(P3_0 == 0)
{
/*按键事件*/
}
while(!P3_0);
}
}
矩阵按键代码
sfr P4 = 0xc0;
sbit L1 = P3^0;
sbit L2 = P3^1;
sbit L3 = P3^2;
sbit L4 = P3^3;
sbit W1 = P4^4;
sbit W2 = P4^2;
sbit W3 = P3^5;
sbit W4 = P3^4;
void MatrixKey()
{
L1 = L2 = L3 = L4 = W1 = W2 = W3 = W4 = 1;
L1 = 0;
if(W1 == 0){delay(100);while(W1==0);delay(100);/*按键事件*/}//S7
if(W2 == 0){delay(100);while(W2==0);delay(100);/*按键事件*/}//S11
if(W3 == 0){delay(100);while(W3==0);delay(100);/*按键事件*/}//S15
if(W4 == 0){delay(100);while(W4==0);delay(100);/*按键事件*/}//S19
L1 = L2 = L3 = L4 = W1 = W2 = W3 = W4 = 1;
L2 = 0;
if(W1 == 0){delay(100);while(W1==0);delay(100);/*按键事件*/}//S6
if(W2 == 0){delay(100);while(W2==0);delay(100);/*按键事件*/}//S10
if(W3 == 0){delay(100);while(W3==0);delay(100);/*按键事件*/}//S14
if(W4 == 0){delay(100);while(W4==0);delay(100);/*按键事件*/}//S18
L1 = L2 = L3 = L4 = W1 = W2 = W3 = W4 = 1;
L3 = 0;
if(W1 == 0){delay(100);while(W1==0);delay(100);/*按键事件*/}//S5
if(W2 == 0){delay(100);while(W2==0);delay(100);/*按键事件*/}//S9
if(W3 == 0){delay(100);while(W3==0);delay(100);/*按键事件*/}//S13
if(W4 == 0){delay(100);while(W4==0);delay(100);/*按键事件*/}//S17
L1 = L2 = L3 = L4 = W1 = W2 = W3 = W4 = 1;
L4 = 0;
if(W1 == 0){delay(100);while(W1==0);delay(100);/*按键事件*/}//S4
if(W2 == 0){delay(100);while(W2==0);delay(100);/*按键事件*/}//S8
if(W3 == 0){delay(100);while(W3==0);delay(100);/*按键事件*/}//S12
if(W4 == 0){delay(100);while(W4==0);delay(100);/*按键事件*/}//S16
}
本人水平有限,所有代码都是作者自己的风格书写,但是大致的应该是没有什么问题,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论