大一零基础搞蓝桥杯单片机组,多天以来,感觉上手挺难的,将自己的学习笔记拿出来分享
首先是建工程,我用的单片机是IAP15F2K61S2型号的,建的工程是IA89C52的
新建一个文档,保存名称是main.c,接下来一个曾经困扰我的一个设置就是hex文件的生成,我们可以这样设置
点上去后我开始写第一个程序,点亮我的开发板上第一个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);
}
结果图:
下面讲一下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);
}
效果图:
以此推的话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);
}
}
}
好了,这样流水灯就做出来了
今天就到这吧