写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。
标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。
点击此处进入学习日记的总目录
一、跨越半年的接力
经历了半年时间的坎坎坷坷,终于又有时间开始学习日记计划,这次时间较为充裕,打算从根本开始过一遍,因为每天仅能分两小时程序相关,故不会内容太多。
二、51:搭配编程环境——新建、配置并导入
-
新建并保存工程
-
选择器件型号
-
添加文件
-
修改编码规范(注释可以用中文),选择生成二进制文件(
.hex
)
- 写代码并编译
- 打开
ISP
,挑好芯片型号,找到编译的二进制文件(.hex),导入到板子里
三、51:点亮LED
- 头文件
#include <REGX52.H>
- 看原理图,发现
P2
哪个引脚低电平,哪个灯亮
- 给
P2
定义低电平
如果感觉十六进制不太直观的话,可以使用我基于
quicker
编写的一个小工具
- 编译并导入板子
四、51:LED流水灯
考虑到重复性,每次只写新碰见的知识。
-
搜索时钟频率范围
-
选择时钟频率(只要在范围内,可以更改)
-
设定定时长度、指令集,生成时延函数,复制到程序里,并添加头文件
#include <INTRINS.H>
-
编译并导入板子
六、51:51中的数据类型大小以及数据范围
七、51:独立按键控制亮灯左右移动
- 查看原理图,发现按键后引脚会输入低电平。
- 输入程序
#include <REGX52.H>
//控制灯左右移动
void Delay(int xms) //@12.000MHz
{
unsigned char i, j;
while(--xms)
{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
void LED_bright(int which)
{
P2=0xFF;
switch(which)
{
case 1:P2_0=0;break;
case 2:P2_1=0;break;
case 3:P2_2=0;break;
case 4:P2_3=0;break;
case 5:P2_4=0;break;
case 6:P2_5=0;break;
case 7:P2_6=0;break;
case 8:P2_7=0;break;
}
}
/*void LED_extinguish(int which)
{
switch(which)
{
case 1:P2_0=1;break;
case 2:P2_1=1;break;
case 3:P2_2=1;break;
case 4:P2_3=1;break;
case 5:P2_4=1;break;
case 6:P2_5=1;break;
case 7:P2_6=1;break;
case 8:P2_7=1;break;
}
}
*/
void main()
{
int LED=1;
while (1)
{
//检测按键
if (P3_1 == 0)
{
Delay(50); //防止机械反弹
LED--;
while(P3_1 == 0);
}
if (P3_0 == 0)
{
Delay(50); //防止机械反弹
LED++;
while(P3_0 == 0);
}
//防止出界
if (LED < 1)
LED = 8;
if (LED > 8)
LED = 1;
Delay(200);
LED_bright(LED);
}
}
- 编译并导入板子