首页 > 分享 > 蓝桥杯单片机led流水灯学习

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

大一零基础搞蓝桥杯单片机组,多天以来,感觉上手挺难的,将自己的学习笔记拿出来分享
首先是建工程,我用的单片机是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); } 123456789

结果图:在这里插入图片描述
下面讲一下16进制
也就是满16进一,对应关系:

11223344……10A/a11B/b12C/c13D/d14E/e15F/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); } 123456789

效果图:
在这里插入图片描述

以此推的话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);} }

123456789101112131415161718192021222324252627282930313233343536373839404142434445

效果视频就不播放了
但是这个程序是不是有点冗长呢?
那么看这样
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);}} }

1234567891011121314151617181920212223242526

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

相关知识

第十六届“蓝桥杯”全国软件和信息技术专业人才大赛(电子类)报名通知
蓝桥杯
第十一届蓝桥杯青少组C++竞赛规则及样题.pdf.pdf
关于第十六届蓝桥杯全国软件和信息技术专业人才大赛报名的通知
基于Proteus学习单片机系列(十)——LCD1602
蓝桥杯 算法训练 字符串编辑
蓝桥杯大赛——视觉艺术设计赛
LED发光宠物用品灯条 闪光项圈
第八届蓝桥杯全国总决赛真题解析
蓝桥杯2017年第八届真题

网址: 蓝桥杯单片机led流水灯学习 https://m.mcbbbk.com/newsview806093.html

所属分类:萌宠日常
上一篇: Linux中调用setsocko
下一篇: 要的短视频:宠物冻干虽好,买错就