因为记性不好学过的东西老是忘记于是决定把过程都记录下来,也方便自己归纳整理和记忆
小白从基本实验和简单比赛入手,采取通过项目的方式来学习
首先是我自己对单片机的理解,不一定正确,但是有利于我理解一些原理
首先引入一段基本程序
#include <REGX52.H>
void delay(unsigned int x)
{
while(x--)
{
unsigned char i,j;
i=2;
j=239;
do
{
while(--j);
}while(--i);
}
}
void main()
{
int num=0;
P2=0xfe;
while(1)
{
if(P3_1==0)
{
delay(20);
while(P3_1==0);
delay(20);
num++;
if(num>=8)
num=0;
P2=(0xff<<num);
}
if(P3_0==0)
{
delay(20);
while(P3_0==0);
delay(20);
num--;
if(num<0)
num=7;
P2=(0xff<<num);
}
}
}
这一段是简单的独立按键代码,当然我现在是学过一些东西了之后回头来看这段代码的,所以很简单,但是刚开始学的时候觉得很难,什么都不会
好了,首先要讲的是头文件,这里用的头文件是#include <REGX52.H>,也还有其他的很多头文件可以用,这一个头文件的内容是定义了各个引脚,给引脚赋值了地址,而地址就对应着单片机里面的空间,相当于把一个数字和实际存在的物理地址连接起来了,此后的对引脚操作就是对地址操作。
第二点要讲的是函数,这里面的函数和C++没什么区别,需要注意的就是定义的时候括号里面要写变量类型和名字,void 也要写。
第三点就是main函数了,也没什么讲的,基本上所有的main函数都是要成为一个循环的,就是在main函数里面加上(我一般加的是)while(1),然后把主体函数卸载while(1)里面。
第四点是单片机语言和我之前学的C++的数据类型不太一样,它有u8,u16这种数据类型,虽然是需要自己定义的,一般需要加上像
typedef unsigned int u16; typedef unsigned char u8;
u8的数据具体指代就是一个八位的二进制数,比如01111111,10101010这种。在单片机里面应用很广,至少之前我是完全没看懂一些语句的时候很大一部分就是不理解这个八位数据,比如说左移右移,我以前就一直不知道在移动什么,然后这个左移就是(以八位为例)把整体的数字往左移动,缺的部分用0补上,具体来说就是取后七位放到前七位,最后一位变成0