OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10467|回复: 22

LED为啥不闪烁?求大神相助

[复制链接]

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
发表于 2012-12-11 11:32:17 | 显示全部楼层 |阅读模式

想建立一个BUTTON控件,让LED闪烁表示程序进行,但是一直亮着。
mian.c
void INIT(void)
{
 #ifdef DEBUG
 debug();
 #endif
 RCC_Configuration();
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
 GPIO_Configuration();
 delay_init(72);
 init_timer(71, 1000);
 StartTouch();
 GUI_Init();
 GUI_SetBkColor(GUI_WHITE);
 GUI_SetColor(GUI_BLACK);
 GUI_Clear();
}

int main(void)
{  

 INIT();
 MainTask();
    while(1)
 {
   GPIO_ResetBits(GPIOD,GPIO_Pin_2);
   delay_ms(250);
   GPIO_SetBits(GPIOD,GPIO_Pin_2);
   delay_ms(250);

 }                                                        
}

建立BUTTON控件
#include "misc.h"
#include "gui.h"
#include "button.h"
u8 Key=0;
void DemoButton(void)
{
BUTTON_Handle hButton;

GUI_SetFont(&GUI_Font8x16);
GUI_DispStringHCenterAt("Click on button...",160,0);
hButton=BUTTON_Create(110,20,100,40,GUI_ID_OK,WM_CF_SHOW);
BUTTON_SetText(hButton,"Click me...");
Key=GUI_WaitKey();
BUTTON_Delete(hButton);
}
void MainTask(void)
{
  DemoButton();
}

复件 STM32TEMPLATE.rar

1.66 MB, 下载次数: 152

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-11 12:24:33 | 显示全部楼层
MainTask函数是什么东西啊?
你是用的GUIBulider的吗?
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-11 12:29:25 | 显示全部楼层
回复【2楼】lsj9383:
---------------------------------
在button.c里,其实加这个函数有点罗嗦,我就没改。
没用GUIBuilder
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-11 13:42:41 | 显示全部楼层
你把 工程发出来看看嘛?
你是用的战舰吗》?
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-11 13:56:40 | 显示全部楼层
回复【4楼】lsj9383:
---------------------------------
用的mini的
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-11 15:45:34 | 显示全部楼层
你把工程发出来嘛
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-11 19:36:09 | 显示全部楼层
回复【6楼】lsj9383:
---------------------------------
发了
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-11 19:54:43 | 显示全部楼层
我的天 ,39多M。。。
GUI的工程把那些附带文件给删掉了再发啊。。。
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-11 20:14:59 | 显示全部楼层
回复【8楼】lsj9383:
---------------------------------
好吧,,虽然文件多,我以为这样下的人build会快些
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-11 20:17:35 | 显示全部楼层
回复【8楼】lsj9383:
我的天 ,39多M。。。 GUI的工程把那些附带文件给删掉了再发啊。。。
---------------------------------
压缩包里有原子哥那个批处理文件
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-11 21:00:45 | 显示全部楼层
你的 程序卡在了GUI_WaitKey那里了,
应该是触摸屏有点问题吧~
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-11 21:18:35 | 显示全部楼层
帮你查出来了,
你的程序卡在GUI_WaitKey那里了,是由于你的触摸屏没有处理好,你的镜像有设置有问题。
这个是你的镜像设置值
#define GUI_TOUCH_SWAP_XY    1 //XY方向互调
#define GUI_TOUCH_MIRROR_X   1 //X镜像
#define GUI_TOUCH_MIRROR_Y   0 //Y镜像
按键坐标是反的,肯定点不到按钮,而WaitKey函数是一直等待按键事件发生才继续往下面执行。

你重新设置下镜像再试试程序吧。。。。

当怀疑镜像出问题,而不知道如何找的时候,可以用这个方法
while(1)
{
GUI_TOUCH_GetState(&STATE);
if (STATE.Pressed == 1)
{

GUI_CURSOR_SetPosition(STATE.x, STATE.y);
GUI_CURSOR_Show();
}
}
这个循环是重复读取坐标值,再在该坐标上显示光标,只需要观测光标的移动方向,你就知道是哪些弄反了,只需要再相应配置一下就可以了。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-11 21:23:05 | 显示全部楼层
这是修改后的工程. 你再试下一嘛。
如果还是有问题就把WaitKey给注销了,看光标怎么移动的,再改配置
不过话说你的库包含的好多好乱啊,用不到的都包进去了。

复件 STM32TEMPLATE(修).zip

1.71 MB, 下载次数: 175

回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-12 08:55:18 | 显示全部楼层
回复【13楼】lsj9383:
---------------------------------
那个触摸屏的移植都是参考你之前传过的程序,其实我对内部原理也不是特别了解。
库函数是不断学习例程时留下的,一些常用的我就没删,不用的时候就注销掉。
谢谢,辛苦了。
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-12 09:19:05 | 显示全部楼层
回复【12楼】lsj9383:
---------------------------------
我之前用你的程序移植触摸屏的,当时触摸屏的坐标是反的,然后我自己改好了。应该跟这个没关系,我发现注销WaitKey按钮就不会显示出来了。这是为啥?
如果程序为
while(1)
 {
   GPIO_ResetBits(GPIOD,GPIO_Pin_2);
   delay_ms(250);
   GPIO_SetBits(GPIOD,GPIO_Pin_2);
   delay_ms(250);
   GUI_TOUCH_GetState(&STATE);
  if (STATE.Pressed == 1)
  {
 
   GUI_CURSOR_SetPosition(STATE.x, STATE.y);
   GUI_CURSOR_Show();
  }
 }  
点一下亮灭一次。
 
如果程序为:
while(1)
 {
   GPIO_ResetBits(GPIOD,GPIO_Pin_2);
   delay_ms(250);
   GPIO_SetBits(GPIOD,GPIO_Pin_2);
   delay_ms(250);
 }  
就不能循环
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-12 12:44:59 | 显示全部楼层
//Key=GUI_WaitKey();
BUTTON_Delete(hButton);
你不是直接删除按钮控件了吗?
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-12 12:47:11 | 显示全部楼层
你说的不能循环是啥意思
是不是指的灯一直亮?
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-12 12:56:05 | 显示全部楼层
回复【15楼】xiaoyangyang:
---------------------------------
你另外写一个延时函数
delay(u16 t)
{
 u16 r1, r2;
 for(r1=0;r1<t;r1++)
  for(r2=0;r2<300;r2++)
}
你把delay_ms换成这个再试试>
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-12 12:56:58 | 显示全部楼层
我单片机不在旁边。
我感觉是你延时函数那里出了问题。
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-12 14:03:07 | 显示全部楼层
回复【16楼】lsj9383:
---------------------------------
哦,那注释掉Key=GUI_WaitKey()之后就直接删除了。
我突然想到一个问题就是,不注释的话,按下去之后,应该删除的啊,但是按键还是显示在那里。
然后就是灯一直亮
改了延时函数,不管用,还是一直亮,延时函数也是原子哥的程序我没动过直接用的。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-12 14:06:35 | 显示全部楼层
回复【20楼】xiaoyangyang:
---------------------------------
因为你没刷新屏幕,所以还是显示在那里。
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-12 14:12:31 | 显示全部楼层
回复【21楼】lsj9383:
---------------------------------
哦,原来如此
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-11-7
在线时间
0 小时
 楼主| 发表于 2012-12-12 14:53:38 | 显示全部楼层
回复【19楼】lsj9383:
---------------------------------
确实延时函数出了问题,发现用delay_ms和delay_us都会一直亮,用GUI_Delay就没问题了。
记得有次GUI_Delay有问题,上网查了下,改了库函数一些地方。
难道这几个延时函数之间有矛盾的地方么?看来以后只能用GUI_Delay了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 08:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表