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); } } |