void controlsinit()
{
//PIO2_5 <-- A
//PIO0_6 <-- B
LPC_GPIO2->DIR &= ~(1<<5);//PIO2_5 as input
LPC_GPIO0->DIR &= ~(1<<6);//PIO0_6 as input
LPC_GPIO2->IS &= ~(1<<5);//edge sensitive
LPC_GPIO2->IBE &= ~(1<<5);//no both edges
LPC_GPIO2->IEV &= ~(1<<5);//falling edge
LPC_GPIO2->IE |= (1<<5);//falling edge
NVIC_EnableIRQ(EINT2_IRQn);
} |
void PIOINT2_IRQHandler(void)
{
if (LPC_GPIO0->DATA & (1<<6)) number--;
else number++;
LPC_GPIO2->IC = LPC_GPIO2->RIS;//clear edge interrupt
delayck(5);
}
|
void PIOINT2_IRQHandler(void)
{
LED_ON;
LPC_GPIO2->IC = LPC_GPIO2->RIS;//clear edge interrupt
__NOP();__NOP();
if (LPC_GPIO0->DATA & (1<<3))
{
OUT1_ON;
number++;
}
else
{
OUT2_ON;
number--;
}
LED_OFF;
}
|
LPC_GPIO2->IE |= (1<<5);//falling edge [color=#f00] LPC_GPIO2->IC |= (1<<5);//clear int [/color] NVIC_EnableIRQ(EINT2_IRQn); |
asm [color=#f00]volatile [/color]("nop"); |
__NOP(); |
#ifdef __USE_CMSIS
#include "LPC11xx.h"
#include "pseudospi.h"
#include "controls.h"
#include "bfunc.h"
#endif
#include <cr_section_macros.h>
volatile unsigned int number =100;
const unsigned int numbers[]={0x00,0x00,0x20,0x40,0xfe,0x00,0x00,//1 0
0x00,0x46,0x8a,0x8a,0x92,0x92,0x62,//2 7
0x00,0x44,0x82,0x92,0x92,0x92,0x7c,//3 14
0x00,0x18,0x28,0x48,0x88,0x3e,0x00,//4 21
0x00,0xf4,0x92,0x92,0x92,0x92,0x8c,//5 28
0x00,0x7c,0x92,0x92,0x92,0x92,0x4c,//6 35
0x00,0x00,0x80,0x80,0x86,0x98,0xe0,//7 42
0x00,0x6c,0x92,0x92,0x92,0x92,0x6c,//8 49
0x00,0x64,0x92,0x92,0x92,0x92,0x7c,//9 56
0x00,0x7c,0x82,0x82,0x82,0x82,0x7c};//0 63
int main(void)
{
initpseudospi();
controlsinit();
while(1)
{
clearscr();
writenumber(7,20,number,&numbers);
}
}
void PIOINT2_IRQHandler(void)
{
LPC_GPIO2->IC = LPC_GPIO2->RIS;//clear edge interrupt
delayck(2);
if (LPC_GPIO0->DATA & (1<<6)) number++;
else number--;
} |
void writecipher(unsigned int page, unsigned int x, unsigned int number,unsigned int* arraynumbers)
{
send_com(0b10110000|page);
send_com(0b00010000|(0b1111&(x>>4)));
send_com(0b00000000|(0b1111&x));
unsigned int numberhelp=typenumber(number);
for (unsigned int i=0;i<7;i++)
{
send_data(arraynumbers[numberhelp+i]);
}
}
void writenumber(unsigned int page, unsigned int x, unsigned int number,unsigned int* arraynumbers)
{
if (number<10)
{
writecipher(page,x,number,arraynumbers);
}
else if (number<100)
{
writecipher(page,x,(number/10),arraynumbers);
writecipher(page,x+7,(number%10),arraynumbers);
}
else if (number<1000)
{
writecipher(page,x,(number/100),arraynumbers);
writecipher(page,x+7,((number/10)%10),arraynumbers);
writecipher(page,x+14,(number%10),arraynumbers);
}
} |