LPC2138实验程序
(尾部附有电路图)
①实现键盘1中断(1~9数字),数码管1显示按键数字,同时用7个LED显示数码管1的相应位,即每个LED对应数码管相应位(a~g)。
②实现按键1中断,7个LED实现流水灯;实现按键2中断,7个LED实现跑马灯。
③实现按键3中断,7个LED闪烁10次,延时采用定时器
#include
//定时器中断计数器
uchar a=0; //LED闪烁函数标志
//普通延时函数
void delay(int x) { } int i; for(;x>0;x--)
for(i=10000;i>0;i--);
void ms(unsigned int x) {
T0TCR = 0X01; while(k!=x); T0TCR = 0X00; T0TC = 0; T0PC = 0; k=0;
//定时器中断延时函数
}
//流水灯函数
void LED_1() { }
void LED_2() {
unsigned char i; for(i=0;i<7;i++) {
IO1SET = 1<<(i+16); delay(20);
IO1CLR = 1<<(i+16);
}
//跑马灯函数
unsigned char i; for(i=0;i<15;i++) {
if(i<7) { } else {
IO1SET = 1<<(29-i);
IO1SET = 1<<(i+16); delay(20);
IO1CLR = 1<<(i+16);
}
}
}
delay(20);
IO1CLR = 1<<(29-i);
void LED_3() { }
//LED闪烁函数
unsigned char i; for(i=0;i<10;i++) { }
IO1SET = 0x7F<<16; delay(20);
IO1CLR = 0X7F<<16; delay(20);
void display(uchar x) {
/*数码管显示函数 x为显示的数字 */
unsigned char table[10]={0x00, 0x06,0x5b,0x4f,
0x66,0x6d,0x7d, 0x07,0x7f,0x6f};
IO0SET = (table[x]<<25); IO1SET = (table[x]<<16); delay(20);
IO0CLR = (table[x]<<25);
}
IO1CLR = (table[x]<<16);
void key_w() { }
//键盘按行低电平扫描函数
IO0SET = 0X7<<20; IO0CLR = 1<<20; delay(2); IO0SET = 1<<20;
IO0CLR =1<<21; delay(2); IO0SET =1<<21;
IO0CLR =1<<22; delay(2); IO0SET =1<<22;
unsigned char key_r() {
int a=0,b;
/*键盘按列读取扫描数值 返回值为键盘对应数字*/
switch(IO0PIN&(7<<16)) {
case 0x00060000:b=1;break; case 0x00050000:b=2;break; case 0x00030000:b=3;break;
}
}
default:break;
switch(IO0PIN&(7<<20)) { }
case 0x00600000:a=1;break; case 0x00500000:a=2;break; case 0x00300000:a=3;break; default :break;
if(a!=0) a=(a-1)*3+b; else a=0; return(a);
void EINT0()__irq { }
void EINT1()__irq {
LED_1();
//外部中断0服务函数,对应矩阵键盘
unsigned char num; num=key_r(); display(num); EXTINT = 0x0f; VICVectAddr=0;
//外部中断1服务函数,对应流水灯
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库LPC2138实验程序 中断 定时器 led 扫描 键盘在线全文阅读。
相关推荐: