C51单片机001-led
RAM:内存条,掉电就无
ROM:硬盘,一直存在 FLASH
如果芯片内部有晶振,则可以去掉晶振电路
关于修改kel5的字体大小:
如果是只想让D1亮,D2-D8都是灭的状态,那就是
D1-0,D2-1,D3-1…D8-1
也就是P2=1111 1110(最低位表示第一位,P2是指寄存器P2,因为此次的LED是靠P2^1,P2^2…P2^8的高低电位来驱动的,若是靠P1^1…P1^8来驱动的,则是P1=……)
但要将这转化成16进制才能用,也就是P2=0xfe;//或者P2=0xFE;
如何快速添加头文件:
头文件里定义了很多寄存器,其中P2就是里面的一个。//0XA0是P2的地址
这个状态是D1,只打开一次,如果希望它可以持续一直是打开的状态
就要引入while循环,这样就可以实现我们想要的状态,就是我设定打开,led就是持续进行打开。
//while(1) or while(2>1)都可以,但是我们习惯填入一个非零数字1,这样while循环的条件也就一直是True。
PS:关于51单片机烧录程序,是先点击软件上的烧录按钮,然后单片机关机,再开机,这样就烧录成功了。
关于延时函数
需要注意这几个参数
关于 _nop_ 报错,只需要添加一个头文件即可解决 #include <intrins.h>
main.c(7): warning C206: '_nop_': missing function-prototype
main.c(7): error C264: intrinsic '_nop_': declaration/activation error
笨办法的流水灯写法:
但实际上从二进制可以看出,0其实是从最低位一直左移到最高位。
关于delay延时函数:
假如我要将500ms修改成200ms或是50ms,那我就每次都要去生成函数,那有没有简便一点的方法呢?
就是生成一个1ms的函数,给一个参数,这样我只需要输入参数,就可以得到我想要的延时时间了(毕竟除了0以外的任何数都是1的倍数,但一个延时函数不需要0)
(PS:红色是1ms延时函数代码,蓝色是给一个参数之后增加的代码)
如果是这样:
实现的效果就是1ms+ x减少的时间(毕竟晶振是12MHz,所以x减少的时间几乎可以忽略不计)
(PS:12MHz是指时钟周期,即1/12M秒(每秒震荡12M次)。 两个时钟周期是一个状态周期,而一个机器周期由6个状态周期组成,所以一个机器周期为12个时钟周期,即1us。)