蓝桥杯单片机led流水灯学习

大一零基础搞蓝桥杯单片机组,多天以来,感觉上手挺难的,将自己的学习笔记拿出来分享
首先是建工程,我用的单片机是IAP15F2K61S2型号的,建的工程是IA89C52的
新建一个文档,保存名称是main.c,接下来一个曾经困扰我的一个设置就是hex文件的生成,我们可以这样设置蓝桥杯单片机led流水灯学习_第1张图片
点上去后我开始写第一个程序,点亮我的开发板上第一个led灯:

#include "reg52.h"
sbit led0 = P0^0;//定义led0,也就是P0的零号引脚
sbit led1 = P0^1;
int main(){
     
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;//初始化,暂时不讲了,这里意思是关掉蜂鸣器,P0口转向led灯并全部关闭
	led0=0;//点亮led0,这里1为关闭0为开
	while(1);
}

结果图:蓝桥杯单片机led流水灯学习_第2张图片
下面讲一下16进制
也就是满16进一,对应关系:

1 1
2 2
3 3
4 4
10 A/a
11 B/b
12 C/c
13 D/d
14 E/e
15 F/f

然后下面再写一个前面4个灯一起亮的程序
我们知道0,1代表的是灯亮灭,那么四位的二进制数字代表的就是四个灯,也就是为什么使用十六进制
有很多器件也是8个引脚,所以0X**十六进制可以广泛应用于单片机

#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
int main(){
     
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;
	P0=0xf0;//11110000对应的灯
	while(1);
}

效果图:
蓝桥杯单片机led流水灯学习_第3张图片

以此推的话P0=0x55就是偶数灯亮,0xaa就是奇数灯亮

接下来我们开始写流水灯

先介绍一下延时的方法,要么就是计数器,中断程序,要么就是延时函数
计数器和中断程序后面写,先讲个最简单的也就是延时函数,通过空循环,让程序延时,原理就是处理每条语句cpu都需要一定时间处理,通过空循环那么可以轻松延时
以下是计算循环次数的方法

1.先计算你单片机的振荡(时钟)周期 T= 1/晶振(11.0592MHZ)

2.一次 i - -操作为12T

3.忽略变量定义,上述延时函数共需时间:921z12T

4.带入T:92112T*z 约为 z ms

可以轻松计算。那么实现延时流水灯的方法已经浮现了
以下是最初的程序

#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
sbit led5 = P0^5;
sbit led6 = P0^6;
sbit led7 = P0^7;
void delayms(unsigned int ms){
     
	unsigned int i;
	while(ms--){
     
		for(i=0;i<628;i++);
	}
}
int main(){
     
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;
	while(1){
     
		led7=1;
		led0=0;
		delayms(500);
		led1=0;
		led0=1;
		delayms(500);
		led2=0;
		led1=1;
		delayms(500);
		led3=0;
		led2=1;
		delayms(500);
		led4=0;
		led3=1;
		delayms(500);
		led4=1;
		led5=0;
		delayms(500);
		led5=1;
		led6=0;
		delayms(500);
		led6=1;
		led7=0;
		delayms(500);
	}
}

效果视频就不播放了
但是这个程序是不是有点冗长呢?
那么看这样
led0显示是P0状态是11111110
led1显示是P0状态是11111101
led2显示是P0状态是11111011

那么我们想到左移右移运算符
我们只需要让1往左移i位是不是就可以了然后取反就是我们所要的情况
下面上码!

#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
sbit led5 = P0^5;
sbit led6 = P0^6;
sbit led7 = P0^7;
void delayms(unsigned int ms){
     
	unsigned int i;
	while(ms--){
     
		for(i=0;i<628;i++);
	}
}
int main(){
     
	unsigned int i;
	P2=0xa0;P0=0x00;
	P2=0x80;P0=0xff;
	while(1){
     
		for(i=0;i<8;i++){
     
			P0=~(1<<i);
			delayms(500);
		}
	}
}

好了,这样流水灯就做出来了
今天就到这吧

你可能感兴趣的:(蓝桥杯单片机,单片机)