2-点亮LED灯
1.前导
添加STC芯片库
因为keil5中没有对应STC89C52RC芯片的型号,在网上搜了一下发现,可以用stc-isp那个软件来添加STC芯片库
1.点击添加型号和头文件到Keil中
2.选择安装了keil5的目录
这样就添加完成了
3.此时,重启keil5,再创建项目时就有STC芯片库了
创建项目步骤:
1.点击project,创建新项目
2.选择合适的文件位置以及文件名进行保存
3.选择对应的单片机型号即可(OK后面弹出来的那个窗口可以点否)
4.右键点击Source Group 1,选择Add new item这个选项
5.选择C语言文件,命名为main
6.可以修改字体和大小(当然可以直接用ctrl+鼠标滚轮)
2.LED介绍
-
中文名:发光二极管
-
外文名:Light Emitting Diode
-
简称:LED
-
用途:照明、广告灯、指引灯、屏幕
如何区分正负极:
长脚为正,短脚为负;内电极较小为正极,较大为负极
3.开发板LED介绍
电阻标号含义:102=10×10^2=1000Ω 1001=100×10^1=1000Ω
串联电阻用来限流,因为直接接电源会烧毁LED二极管;若左边p20也为高电平,则LED不亮;若左边为低电平,则LED亮
点亮LED原理:
4.点亮LED
视频中是用二进制最后一位来控制最右边那个LED灯的亮和灭,而新买的板子是STC89C52RC,需要用二进制的最前面一位来控制最右边的LED灯的亮面,就是二进制的最左边那位控制的是LED最右边的灯
#include <STC89C5xRC.H>//通过右键点击插入头文件 void main() { P2=0X7F; //0111 1111,C语言中要用16进制来表示2进制 //P2指的是一个寄存器,在头文件中有描述,头文件通过在第一行点击右键进行插入 //P2=0X55; //0101 0101,让个灯一个亮一个灭 while(1) //通过死循环来使程序终止 { } }
这里要记得生成hex文件
然后打开stc-isp软件执行该程序
1.选择对应板子
2.要选择那个USB的串口,如果没有的话可能是win10,win11没有驱动的原因,去网上找一下stc-isp的usb驱动下载即可
3.打开之前在keil5中生成的hex文件
4.点击下载编程,然后再重启板子,就可以点亮LED灯了

5.LED闪烁
可以新建一个工程来进行实验
思路就是让LED灯先亮然后再熄灭,因为单片机执行速度很快,所以只执行这两条语句我们肉眼就无法观察到,所以要给它设置延时程序,我们可以用STC-ISP软件来帮我们生成这个程序
然后复制粘贴到程序中就可以
#include <STC89C5xRC.H> #include <INTRINS.H> void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_();//nop函数在#include <INTRINS.H>这个头文件中,我们自己也可以打开这个文件去看里面的函数 i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); } void main() { while(1) { P2=0X55;//LED亮 Delay500ms(); P2=0XFF;//LED灭 Delay500ms(); } }
6.LED流水灯
#include <STC89C5xRC.H> #include <intrins.h> void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); } void main() { while(1) { P2=0X7F; //0111 1111 Delay500ms(); P2=0XBF; //1011 1111 Delay500ms(); P2=0XDF; //1101 1111 Delay500ms(); P2=0XEF; //1110 1111 Delay500ms(); P2=0XF7; //1111 0111 Delay500ms(); P2=0XFB; //1111 1011 Delay500ms(); P2=0XFD; //1111 1101 Delay500ms(); P2=0XFE; //1111 1110 Delay500ms(); } }
自己设置间隔时间:首先用STC生成一个1ms的延时程序,然后再传入参数,用while循环来把1ms的内容循环多次,就可以达到延时xms的效果
#include <STC89C5xRC.H> #include <intrins.h> void Delay1ms(unsigned x) //@11.0592MHz { while(x) { unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); x--; } } void main() { while(1) { P2=0X7F; //0111 1111 Delay1ms(1000); P2=0XBF; //1011 1111 Delay1ms(1000); P2=0XDF; //1101 1111 Delay1ms(1000); P2=0XEF; //1110 1111 Delay1ms(200); P2=0XF7; //1111 0111 Delay1ms(200); P2=0XFB; //1111 1011 Delay1ms(200); P2=0XFD; //1111 1101 Delay1ms(200); P2=0XFE; //1111 1110 Delay1ms(200); } }
参考
本文作者:Jinx8823
本文链接:https://www.cnblogs.com/Jinx8823/p/17444831.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步