打印
[菜农助学交流]

CN(菜鸟)之250助学板GPIO点灯小练习

[复制链接]
2887|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chinacn1989|  楼主 | 2011-8-29 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chinacn1989 于 2011-8-29 10:09 编辑

这是我第一次发的帖子,希望大家多多指教哈!
首先写个小小的总结:
    这次主要是为了测试下板子,和熟悉下板子的GPIO的基本应用。程序很简单,只用了IO,中断,其实中断可以不需要用的。但是为了测试,就试试了....
    先说说这次使用的点点小看法吧,本次小程序用的是库操作。所以程序很容易理解。但是有个问题就是我比如用的IO比较多的时候,使能几个IO,就会调用几次DRV_GPIO_open的程序,但是我用寄存器就只需要一句就够了!有时候觉得这样可能能提高程序的效率吧,虽然现在都还不清楚怎么去提高程序的效率,只是胡乱来写的。没有一点的概念...
希望大家多多指教哈。
    还有就是程序中遇到的问题,刚刚开始用的时候,直接用中断发现有时候不能达到理想的效果,后来发现是应该是按键抖动造成的。使能IO的防反跳。效果比较明显,基本上没有什么问题了。由于现在用的东西比较少,所以就没能发现什么具体的问题,但是我会先把裸板上能用的都自己试试。(包括AD,1820,串口等等这些基本的东东)
到时候在和大家分享...
这次只是开始....
未完待续...
程序如下(请大家有时间多提点问题。谢谢...):
#include"nuc1xx.h"
#include"drvgpio.h"
#include"drvtimer.h"

int n;
void delay(int i) //延时小程序
{
unsigned int j,k;
for(j=0;j<i;j++)
for(k=0;k<600;k++);
}
void deng1() //1 2 3 4(点亮方式)
{
DrvGPIO_ClrBit(E_GPA,2);delay(200);
DrvGPIO_SetBit(E_GPA,2);delay(200);
DrvGPIO_ClrBit(E_GPA,3);delay(200);
DrvGPIO_SetBit(E_GPA,3);delay(200);
DrvGPIO_ClrBit(E_GPA,4);delay(200);
DrvGPIO_SetBit(E_GPA,4);delay(200);
DrvGPIO_ClrBit(E_GPA,5);delay(200);
DrvGPIO_SetBit(E_GPA,5);delay(200);
}
void deng2() //1 12 123 1234 234 34 4
{
DrvGPIO_ClrBit(E_GPA,2);
delay(600);
DrvGPIO_ClrBit(E_GPA,3);
delay(600);
DrvGPIO_ClrBit(E_GPA,4);
delay(600);
DrvGPIO_ClrBit(E_GPA,5);
delay(600);

DrvGPIO_SetBit(E_GPA,2);
delay(600);
DrvGPIO_SetBit(E_GPA,3);
delay(600);
DrvGPIO_SetBit(E_GPA,4);
delay(600);
DrvGPIO_SetBit(E_GPA,5);
delay(600);
}
void deng3() //24 13
{
DrvGPIO_ClrBit(E_GPA,2);
DrvGPIO_ClrBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,3);
DrvGPIO_SetBit(E_GPA,5);
delay(800);
DrvGPIO_ClrBit(E_GPA,3);
DrvGPIO_ClrBit(E_GPA,5);
DrvGPIO_SetBit(E_GPA,2);
DrvGPIO_SetBit(E_GPA,4);
delay(800);
}
void deng4() //14 23
{
DrvGPIO_ClrBit(E_GPA,2);
DrvGPIO_ClrBit(E_GPA,5);
DrvGPIO_SetBit(E_GPA,3);
DrvGPIO_SetBit(E_GPA,4);
delay(800);
DrvGPIO_ClrBit(E_GPA,3);
DrvGPIO_ClrBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,2);
DrvGPIO_SetBit(E_GPA,5);
delay(800);
}
void deng5() //23 45
{
DrvGPIO_ClrBit(E_GPA,2);
DrvGPIO_ClrBit(E_GPA,3);
DrvGPIO_SetBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,5);
delay(800);
DrvGPIO_ClrBit(E_GPA,4);
DrvGPIO_ClrBit(E_GPA,5);
DrvGPIO_SetBit(E_GPA,2);
DrvGPIO_SetBit(E_GPA,3);
delay(800);
}
void deng6() // 1 4 2 3
{
DrvGPIO_ClrBit(E_GPA,2);delay(200);
DrvGPIO_SetBit(E_GPA,2);delay(200);
DrvGPIO_ClrBit(E_GPA,5);delay(200);
DrvGPIO_SetBit(E_GPA,5);delay(200);
DrvGPIO_ClrBit(E_GPA,3);delay(200);
DrvGPIO_SetBit(E_GPA,3);delay(200);
DrvGPIO_ClrBit(E_GPA,4);delay(200);
DrvGPIO_SetBit(E_GPA,4);delay(200);
}
void EINT0Callback(void) //按键中断的n++程序,n的值不同,闪灯的小程序不同。
{
DrvGPIO_SetBit(E_GPA,2);
DrvGPIO_SetBit(E_GPA,3);
DrvGPIO_SetBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,5);
n++;
if(n>5)
n=0;
}
main()
{
DrvGPIO_Open(E_GPA,2,E_IO_OUTPUT); //配置GPA2345为输出口
DrvGPIO_Open(E_GPA,3,E_IO_OUTPUT);
DrvGPIO_Open(E_GPA,4,E_IO_OUTPUT);
DrvGPIO_Open(E_GPA,5,E_IO_OUTPUT);
DrvGPIO_EnableEINT0(E_IO_FALLING,E_MODE_EDGE,EINT0Callback); //使能外部中断0
DrvGPIO_EnableDebounce(E_GPB,14); //使能中断防反跳模式

while(1) // 亮灯的循环
{
switch(n)
{
case 0:deng1();break;
case 1:deng2();break;
case 2:deng3();break;
case 3:deng4();break;
case 4:deng5();break;
case 5:deng6();break;
default :break;
}
}
}

相关帖子

沙发
hotpower| | 2011-8-29 09:41 | 只看该作者
可以操作寄存器或用红杏直接一次设置。
争取中午加入选美阵营。还有两天时间投票。

使用特权

评论回复
板凳
lixiaoxu2meng| | 2011-8-29 09:47 | 只看该作者
帮顶 加油:lol

使用特权

评论回复
地板
chinacn1989|  楼主 | 2011-8-29 10:04 | 只看该作者
2# hotpower
大叔啊,
我的不是下一期吗?
呵呵...
怎么是这期啊!
有鸭梨啊。

使用特权

评论回复
5
chinacn1989|  楼主 | 2011-8-29 10:07 | 只看该作者
红杏还没有用过,先弄基础...
然后在...
出墙!

使用特权

评论回复
6
hotpower| | 2011-8-29 12:40 | 只看该作者
2# hotpower  
大叔啊,
我的不是下一期吗?
呵呵...
怎么是这期啊!
有鸭梨啊。
chinacn1989 发表于 2011-8-29 10:04


哈哈,忘记了,到时提醒俺呀~~~

使用特权

评论回复
7
hotpower| | 2011-8-29 12:43 | 只看该作者
晕,选美只能增加不能减少和修改。

使用特权

评论回复
8
chinacn1989|  楼主 | 2011-8-29 14:44 | 只看该作者
晕,选美只能增加不能减少和修改。
hotpower 发表于 2011-8-29 12:43

难道我都上去了?

使用特权

评论回复
9
hotpower| | 2011-8-29 14:53 | 只看该作者
上去陪练,晕!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

272

帖子

0

粉丝