目录
1、Keil写程序前准备步骤(Keil写程序步骤和stc-isp软件程序烧录步骤只写于第一个文章,后续跳过)
由B站江科大51单片机视频学习做的笔记,便于自己以后复习回顾。
一、点亮一个LED灯
1、Keil写程序前准备步骤(Keil写程序步骤和stc-isp软件程序烧录步骤只写于第一个文章,后续跳过)
(1)新建工程
(2)新建文件夹放程序
KeilProject用来保存所有文件的程序
第二层文件名用于显示程序的功能
用通用文件夹名Project来保存程序
(3)选择单片机
单片机实物采用B站江科大视频中的89C52RC单片机,Keil软件中选择单片机如上
跳出的提示选择否
(4)开始写程序
新建程序文件
选择语言,第一个是C语言,第二个是C++,第三个是汇编
选择语言确定后,Name编辑统一名字main,再点add
在新出现的main.c中,编辑程序
添加主函数
(5)更改程序编辑字体
以上就是写C语言程序前需要用到的步骤
2、LED模块原理图详解
上图左边8个口连接到单片机的P2.0口~P2.7口, 右边VCC是指电源;
VCC左边的蓝色方框是指电阻,右上角1K指1000Ω,用于保护电路,防止超载;
中间绿色的为LED二极管,当P2.0口为低电平时,则对应电路上的LED灯D1亮;若为高电平,则对应电路上的LED灯D1灭,其他灯同理。
单片机上电阻的读数方式
3、编写点亮一个LED灯的程序
为了让编译器识别单片机上的寄存器,需在主函数前插入#include<REGX52.H>
#include<REGX52.H>
void()
{
P2=0xFE; /*0x代表前缀,表示后面的是16进制
(0xFE)H=(1111 1110)B,功能是将P2.0口为低电平,点亮P2.0上的LED;
其他口为高电平*/
while(1) //让程序停滞在循环体中,而不会重复执行主程序
{
}
}
点亮一个LED灯的C语言程序
点击左上角Build编译按钮
出现0错误,0警告,即程序没有问题
在option选项中的output,勾选生成HEX后缀文件,才能通过STC-ISP软件烧录程序
4、将写好的程序通过软件烧录至单片机中
打开STC-ISP软件,选择单片机型号为STC89C52(这里型号以自己单片机为准)
如果板子烧录程序没有反应,可能是单片机型号不对,比如我的板子是89C52RC版本
串口号可以通过右键我的电脑,选择属性,再找到设备管理器,在端口一栏查看
选择打开程序文件后,打开KeilProject/2-1点亮一个LED/project/object中hex后缀的文件
最后再点击下载/编程,然后将按下单片机的复位键,即完成烧录程序
5、亮一个LED灯实物图
三、让LED灯闪烁
1、软件延时设定
打开STC-ISP软件中的软件延时计数器
系统频率选择12MHZ,定时长度选择500ms,指令集选择STC-Y1,然后将代码复制至Keil编译器
2、编写LED灯闪烁程序
#include <REGX52.H>
#include <INTRINS.H> //函数库,定义空语句_nop_()
void Delay500ms() //晶振为12.000MH,延迟函数,延迟0.5s
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main() //主函数
{
while(1)
{
P2=0xFE; //让P2.0为低电平,LED亮
Delay500ms(); //LED亮0.5s
P2=0xFF; //让P2全部为高电平,LED都灭
Delay500ms(); //LED灭0.5s
}
}
3、LED闪烁实物图
51单片机一个LED灯闪烁
四、LED流水灯
1、编写流水灯程序
(1)初阶流水灯程序
#include <REGX52.H>
#include <INTRINS.H> //函数库,定义空语句_nop_()
void Delay500ms() //@12.000MHz,延迟函数,延迟500毫秒
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE; //1111 1110
Delay500ms();
P2=0xFD; //1111 1101
Delay500ms();
P2=0xFB; //1111 1011
Delay500ms();
P2=0xF7; //1111 0111
Delay500ms();
P2=0xEF; //1110 1111
Delay500ms();
P2=0xDF; //1101 1111
Delay500ms();
P2=0xBF; //1011 1111
Delay500ms();
P2=0x7F; //0111 1111
Delay500ms();
}
}
(2)高阶流水灯程序
#include <REGX52.H>
#include <INTRINS.H>
void Delay1ms(unsigned int x) //@12.000MHz,延迟1ms,x为无符号整数参数
{
unsigned char i, j; //定义i、j为无符号字符
while(x) //将延迟1ms函数循环x次
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i); //将程序延迟1ms
x--; //每循环一次,x自动减1
}
}
void main()
{
while(1)
{
P2=0xFE; //1111 1110
Delay1ms(500); //将500赋予x参数,可以通过更改函数参数,直接改变延迟时间
P2=0xFD; //1111 1101
Delay1ms(500);
P2=0xFB; //1111 1011
Delay1ms(500);
P2=0xF7; //1111 0111
Delay1ms(500);
P2=0xEF; //1110 1111
Delay1ms(500);
P2=0xDF; //1101 1111
Delay1ms(500);
P2=0xBF; //1011 1111
Delay1ms(500);
P2=0x7F; //0111 1111
Delay1ms(500);
}
}
2、LED流水灯实物图
LED流水灯闪烁