蓝桥杯单片机基础部分——1、基础模块代码

一、介绍

关于蓝桥杯单片机的一些基础代码,比赛的时候这些基础代码基本都是要写的,具体使用要根据实际的题目进行相应的改动

二、模板模块

关于蓝桥杯单片机的代码书写时,首先书写以下代码(死模板)

#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灯模块

原理图
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
}

本人水平有限,所有代码都是作者自己的风格书写,但是大致的应该是没有什么问题,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论

上一节:蓝桥杯单片机基础部分——0、新建工程
下一节:蓝桥杯单片机基础部分——2、定时器中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值