端口(外設(shè)I/O)
- 對(duì)于USART和定時(shí)器I/O,在一個(gè)數(shù)字I/O引腳上選擇外設(shè)I/O功能芝薇,需要設(shè)置對(duì)應(yīng)的PxSEL位為1庶近。
- PxDIR配置I/O口的輸入和輸出,0為輸入训挡,1為輸出。
上拉/下拉電阻
- 上拉(Pull Up )或下拉(Pull Down)電阻(兩者統(tǒng)稱(chēng)為“拉電阻”)最基本的作用是:將狀態(tài)不確定的信號(hào)線(xiàn)通過(guò)一個(gè)電阻將其箝位至高電平(上拉)或低電平(下拉)歧强,如果拉電阻用于輸入信號(hào)引腳澜薄,通常的作用是將信號(hào)線(xiàn)強(qiáng)制箝位至某個(gè)電平,以防止信號(hào)線(xiàn)因懸空而出現(xiàn)不確定的狀態(tài)摊册,繼而導(dǎo)致系統(tǒng)出現(xiàn)不期望的狀態(tài)肤京,如下圖所示(上拉電阻一邊接電源):
拉電阻
三態(tài)
- 0、1、高阻
實(shí)驗(yàn)
- 完成Key忘分、led實(shí)驗(yàn)
- 作業(yè):cc2530 PWM按鍵控制led燈亮度棋枕。
cc2530 PWM按鍵控制led燈亮度(參考代碼)
#include <ioCC2530.h>
#define LED1 P1_4
#define S5 P0_4
#define S6 P0_5
#define PERIOD 20
#define ON 0
#define OFF 1
#define DOWN 0
#define UP 1
unsigned char pulse_high=20;
unsigned char delay_s5_flag=0;
unsigned char up_s5=1;
unsigned char delay_s6_flag=0;
unsigned char up_s6=1;
void led_init(void);
void key_init(void);
void poll_key(void);
void delay_ms(int nms);
void main(void)
{
led_init();
key_init();
while(1){
poll_key();
if(pulse_high !=0)
{
LED1=OFF;
delay_ms(pulse_high);
}
if(PERIOD!=pulse_high)
{
LED1=ON;
delay_ms(PERIOD-pulse_high);
}
}
}
void led_init(void)
{
P1SEL&=~0x10;
P1DIR |=0x10;
LED1=OFF;//初始狀態(tài)
}
void delay_ms(int nms)
{
unsigned int i,j;
for(i=nms;i>0;i--)
for(j=578;j>0;j--);
}
void key_init(void)
{
P0SEL &=~0x30;
P0DIR &=~0x30;
P0INP &=~0x30;
P2INP &=~0x20;
}
void poll_key(void)
{
//延時(shí)消抖
if((DOWN==S5)||(DOWN==S6))
{
delay_ms(20);
if(DOWN==S5)
{
if(delay_s5_flag)//松開(kāi)按鍵為1
{
if(pulse_high&&up_s5)
{
up_s5=0;
pulse_high-=5;
}
}
else
{
delay_s5_flag=1;
}
}
else if(DOWN==S6)
{
if(delay_s6_flag)
{
if((pulse_high<PERIOD)&&(up_s6))
{
up_s6=0;
pulse_high+=5;
}
}
else
{
delay_s6_flag=1;
}
}
else
{
delay_s5_flag=0;
up_s5=1;
delay_s6_flag=0;
up_s6=1;
}
}
}
————————————————
版權(quán)聲明:本文為CSDN博主「路燈謠」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議妒峦,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明重斑。
原文鏈接:https://blog.csdn.net/lululumiao/article/details/118531639