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。)

 

posted @ 2023-03-22 18:00  鬼幽电z  阅读(184)  评论(0编辑  收藏  举报