求助,关于STM8单个按键控制led亮灭

查看: 2834|回复: 3
STM8 LED闪烁灯不停的亮灭程序
& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &无论学习什么都要先从简单的东西入手,通过配置IO口的状态,让IO口间隔的输出高低电平,间隔时间为ms级的否则认的肉眼难以设别小灯的亮灭!
程序如下:
#include &iostm8s105c6.h&
//时钟初始化
void CLK_Init(void)
CLK_CKDIVR =0x00;
//GPIO初始化
voidGPIO_Init(void)
PD_DDR|=0x01; //PD0输出,其余保持原功能
PD_CR1|=0x01; //对应位设置为推挽输出
PD_CR2|=0x00; //输出最大频率为2Mhz
//延时程序
void Delay(unsigned inti)
while(i--)
for(j=100;j&0;j--);
CLK_Init();
GPIO_Init();
while(1) //循环
PD_ODR=0 //PD0为输出0,LED灭
Delay(500);
PD_ODR=0 //PD0为输出1,LED亮
Delay(500);
 VERY&&GOOD!!!
 FIRST-RATE EFFORT!
Powered by21ic官方微信-->
后使用快捷导航没有帐号?
查看: 2487|回复: 4
请教STM8S105S4自定义加一个触摸按键控制LED问题
&&未结帖(10)
主题帖子积分
实习生, 积分 6, 距离下一级还需 44 积分
实习生, 积分 6, 距离下一级还需 44 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 6, 距离下一级还需 44 积分
实习生, 积分 6, 距离下一级还需 44 积分
求助各位高手,本人现在遇到一个STM8S105S4自定义加一个触摸按键控制LED开发难题.
要求是自己定义一个按键,来控制LED2灯,我现在已经在电路板的PA端口,用(PA5)引出一个线,并连上一个自定义按键,PA6用于LOAD, PA4用于中断屏蔽.其程序修改如下
在头文件 STM8_TSL_RC_Configuration.h中修改:
#define SCKEY_P2_KEY_COUNT&&(1)& && && && && && && && && && && && && && && && &&&/**& Single channel key Port 2: Number of keys used (value from 0 to 8) */
#define SCKEY_P2_PORT_ADDR&&(GPIOA_BaseAddress)& && && && && && && &/**& Single channel key Port 2: GPIO base address */
#define SCKEY_P2_A&&(0x10)& && && && && && && && && && && && && && && && && && && & /**& Single channel key Port 2: 1st key mask */
#define SCKEY_P2_B&&(0)& && && && && && && && && && && && && && && && && && && && &&&/**& Single channel key Port 2: 2nd key mask */
#define SCKEY_P2_C&&(0)& && && && && && && && && && && && && && && && && && && && & /**& Single channel key Port 2: 3rd key mask */
#define SCKEY_P2_D&&(0)& && && && && && && && && && && && && && && && && && && && &/**& Single channel key Port 2: 4th key mask */
#define SCKEY_P2_E&&(0)& && && && && && && && && && && && && && && && && && && && &/**& Single channel key Port 2: 5th key mask */
#define SCKEY_P2_F&&(0)& && && && && && && && && && && && && && && && && && && &&&/**& Single channel key Port 2: 6th key mask */
#define SCKEY_P2_G&&(0)& && && && && && && && && && && && && && && && && && && & /**& Single channel key Port 2: 7th key mask */
#define SCKEY_P2_H&&(0)& && && && && && && && && && && && && && && && && && && &/**& Single channel key Port 2: 8th key mask */
#define SCKEY_P2_DRIVEN_SHIELD_MASK (0x08)& &
原触摸按键有三个,用的是PB端口.
另外在源文件STM8_TS_LIB夹中的STM8_TSL_RC_Singlechannelkey.c中添加如下:
&&******************************************************************************
&&* @brief Select Port 1 I/Os to burst and call IO driver for burst sequence.
&&* @par Parameters:
&&* @retval void None
&&* @par Required preconditions:
&&******************************************************************************
void TSL_SCKEY_P1_Acquisition(void)
&&sTouchIO.PORT_ADDR = (GPIO_TypeDef *) (SCKEY_P1_PORT_ADDR);
&&for ( KeyIndex = 0; KeyIndex & SCKEY_P1_KEY_COUNT; KeyIndex++ )
& & TSL_SetStructPointer();
& & if ( (pKeyStruct-&State.whole != ERROR_STATE) && (pKeyStruct-&State.whole != DISABLED_STATE) )
& && &sTouchIO.AcqMask = Table_SCKEY_BITS[KeyIndex];
& && &sTouchIO.DriveMask = (u8)(sTouchIO.AcqMask | SCKEY_P1_DRIVEN_SHIELD_MASK);
& && &sTouchIO.Measurement = &sSCKeyInfo[KeyIndex].Channel.LastM
& && &sTouchIO.RejectedNb = &sSCKeyInfo[KeyIndex].Channel.LastMeasRejectNb;
& && &sTouchIO.Type = SCKEY_TYPE;
& && &TSL_IO_Acquisition(SCKEY_ACQ_NUM, SCKEY_ADJUST_LEVEL);
另外,在main.c中添加
if (sSCKeyInfo[3].Setting.b.DETECTED)& && && && && && && && && && && && && && &/* KEY 1 touched */
& && &if (Led1State == OFF)
& && &&&LED1_ON();
& && &else
& && &&&LED1_OFF();
可最终无法实现自定义加一个触摸按键控制LED功能,难道是程序有问题吗?恳请各位高手指点
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1444, 距离下一级还需 556 积分
助理工程师, 积分 1444, 距离下一级还需 556 积分
主题帖子积分
专家等级:结帖率:13%
主题帖子积分
助理工程师, 积分 1444, 距离下一级还需 556 积分
助理工程师, 积分 1444, 距离下一级还需 556 积分
你的板子硬件有问题可能是!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 249, 距离下一级还需 51 积分
中级技术员, 积分 249, 距离下一级还需 51 积分
主题帖子积分
专家等级:结帖率:84%
主题帖子积分
中级技术员, 积分 249, 距离下一级还需 51 积分
中级技术员, 积分 249, 距离下一级还需 51 积分
是你设置有问题。不知道一年后回帖你看不看得到
PA5对应的是0x20
DRIVEN SHIELD的PA4对应的是0x10
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1566, 距离下一级还需 434 积分
助理工程师, 积分 1566, 距离下一级还需 434 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
助理工程师, 积分 1566, 距离下一级还需 434 积分
助理工程师, 积分 1566, 距离下一级还需 434 积分
楼主问题解决了吧
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级工程师, 积分 4485, 距离下一级还需 515 积分
中级工程师, 积分 4485, 距离下一级还需 515 积分
主题帖子积分
专家等级:结帖率:4%
主题帖子积分
中级工程师, 积分 4485, 距离下一级还需 515 积分
中级工程师, 积分 4485, 距离下一级还需 515 积分
遇到同样的问题!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:关于一个按键控制2个LED灯,没搞懂_单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:133,921贴子:
关于一个按键控制2个LED灯,没搞懂收藏
刚开始玩,用at89s51,想做一个用一个按键控制2个LED灯,按一下,第一个灯亮,在按一下第二个灯亮,按第三下都不亮,之后循环第一个开始亮,程序如下:#include &reg51.h&sbit key=P3^2; //P30口为按键sbit led=P0^0;//P00口为第一个LEDsbit led1=P0^1; //P01口为第二个LED/*void delay(void){for(a=0;a&20000;a++);} ****延时函数*/void main(void){while(1){if(!key){ for(n=0;n&1000;n++)
//判断按键是否按下 ; light=~ while(!key) for(n=0;n&1000;n++);//判断按键是否弹起}led=led1=!}}目前能实现的功能是,按第一下,第一个灯亮,按第二下,第二个灯亮,再按第一个亮,就这样循环,不知道怎么能按第三下都不亮,第四下第一个才亮,开始循环按键。开始有个延时函数,是想让第二个灯闪烁,翻来覆去没搞懂。求指点修改。
江西单片机培训,尚观科技专业嵌入式培训——0基础0元入学,4个月从入门到精通,先就业后付款!7天免费试学,试学,让您更好的选择!
定义一个char变量n,初值为0当按键按下后n++,数值达到3时清0之后就可以用if判断n的值做出相应动作
谢谢,太好了,刚刚弄成了,帮忙看下,估计算法有点复杂,看能否精简?#include &reg51.h&sbit key=P3^2; //P30口为按键sbit led=P0^0;//P00口为第一个LEDsbit led1=P0^1; //P01口为第二个LED/*void delay(void){for(a=0;a&20000;a++);} ****延时函数*/void main(void){int n=0;while(1){if(!key){ for(n=0;n&1000;n++)
//判断按键是否按下 ; light=~ while(!key) for(n=0;n&1000;n++);//判断按键是否弹起 b++;}if(b%3==1){led=0;}elseif(b%3==2){led1=0; led=1;}elseif(b%3==0){led=led1=1;}}}
一键多用用标志位呗!
加个循环函数,让第二个灯循环亮灭
头痛,试了几次都不行,不知哪里不对,不会闪烁
多谢各位的指点,功能终于实现了。发现的新问题,开始用AT89S51做的实验,感觉太浪费了,改用STC15W101只有8个脚的,按手册上说的空间功耗4-6ma,我是加了升压电路,整个系统空间功耗开始在12M频率下有20ma,后来改为5M频率,空间功耗有8ma,现在就是想如何能让单片机休眠,按键的时候唤醒?感觉有点难,还望各位不吝赐教。
以3楼的例子elseif(b%3==0){led=led1=1;}//如何在这里启用掉电模式,如何唤醒,STC手册看了一晚上没整明白}}我是通过扫描按键按下的次数来判断,就是想在按第三次的时候2个LED都不亮,且进入掉电模式,第四次唤醒继续判断次数
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 单个按键控制led亮灭 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信