流水灯的设计
概述
控制LED,需要将IO口配置成输出模式,LED亮灭的电平控制又取决于发光二极管的电路设计,本文设计的电路是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzCbJlNB-1601626151714)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200925173344912.png)]
本文的LED需要使用低电平,是LED发光。
因此,本实验的目的就是通过设置相关IO口的电平,达到LED按照一定逻辑进行亮灭的目的。
CC2530IO口的使用
配置
要使用CC2530中的IO口,需要先对目标IO口进行配置。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4IKB3il9-1601626151719)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200925175211727.png)]
根据datasheet,要配置IO口是输出还是输入,需要控制PxDIR这个寄存器,这里需要将P1DIR中的0,1,4位拉高:
P1DIR |= 0x13;
注释:此为或运算,我们可以简单的将P1DIR视作一个八位的运算符,其中我们将0x13转换为二进制,或运算的运算方式便是将其转换为1,从而拉高电平,而且,其转换为二进制时便是将0、1、4的电位拉高,从而点亮这几个灯。
控制输出电平
SFRBIT( P1 , 0x90, P1_7, P1_6, P1_5, P1_4, P1_3, P1_2, P1_1, P1_0 )
注释:
1、P1DIR意思即为P1口方向控制寄存器.
2、关于16进制的运算:
在16进制中,0x表示此数为十六进制表示,是按照满十六进一的原则表示。
0 1 2 3 4 5 6 7 8 9 等同于十进制下的0-9
a=10 b=11 c=12 d=13 e=14 f=15 分别对应的是10-15
要表示16就应该进一位,十六进制表示16是0x10。
如0x13=1*16+3=19
0x7f=7*16+15
0x100=1*16^2
按键控制流水灯
概述
通过点击按键进行改变LED灯的亮灭,当按键松开时,为p0_1通过电阻,将电平上拉,此时为高电平;当按键闭合时,此时p0_1为低电平,电灯可以发亮。本文的电路设计思路是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oH1tQi8X-1601626151722)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200926122937070.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CBTjYOcU-1601626151726)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200926122953921.png)]
本次实验需要使LED发光,故我们需要考虑将电平拉低,此时LED才能够发光。
因此本次实验我们通过对I/O口的控制,结合起来按键的控制可以达到按照电路逻辑控制LED的亮灭。
IO口的控制
配置
本次实验需要我们对CC2530的IO口进行配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W76jZszh-1601626151729)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200926124543303.png)]
根据datasheet 我们可知此次实验我们需要对,p0_1进行配置,需要用到的是:P0SEL寄存器.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFPGzNVo-1601626151730)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200926124805009.png)]
通过P0DIR我们可以进行的是:P0口的方向选择,即为按键拉低拉高电压
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KP9kESC3-1601626151731)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200926124925111.png)]
配置P1DIR寄存器则是为了点亮p1_0,p1_1,p1_4.
控制输出电平
首先,我们需要设置p0_1口为输入模式,凭此条件我们可以通过按键来改变LED灯的亮灭,具体代码如下:
P0SEL &= ~0x02; //设置 P0.1 为普通 IO 口
P0DIR &= ~0x02; //按键接在P0.1口上,设P0.1为输入模式
注释:&为和运算方式 ~为反运算,即将二进制倒置
接下来是对LED灯的控制,我们需要将p1_0,p1_1,p1_4设置为输出模式,具体代码如下:
P1DIR |=0x13;
按键控制LED灯开关
概述
本次实验,需要使用按键对灯的亮灭进行控制,即为IO口控制中的input,本次实验LED的亮灭取决于button的使用,在P1_0端输出低电平得时候D1会亮,输出高电平的时候D1熄灭,同理可以得到D2和D3亮灭。当button松开的时候,P0_1通过电阻上拉提升为高电平;button按下时,P0_1变为低电平。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZkKALqXS-1601626151732)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200930160346605.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aP1nkxjD-1601626151733)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200930160359766.png)]
所以本次实验最主要的目的便是,通过button的控制,结合发光二极管的性质,通过按键控制电灯的亮灭。
IO口的控制
配置
首先需要对各个IO口进行配置,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0o7W0qkF-1601626151734)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200930162516471.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldjK9VQi-1601626151735)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200930163348741.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lAqbLuaL-1601626151735)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200930163536549.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91ofl5Cp-1601626151736)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200930163716522.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O692rp7O-1601626151737)(C:\Users~~\AppData\Roaming\Typora\typora-user-images\image-20200930163753203.png)]
对电灯D1的配置
P1SEL &=~0x01;//配置p1.0为通用IO口,默认为0,可以不设
P1DIR |=0x01;//p1.0定义为输出
对button的配置
P0SEL &=~0x02;//设置P01为普通IO口
P0DIR &=~0x02;//设置 P01为输入模式