嵌入式基础考试题目

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1、用PWM方式,使LED灯闪烁。#includeconfig.hvoidPwmInit(void);intmain(void){PINSEL0=0x00080000;PwmInit();while(1){PWMMR0=4000;PWMMR6=2000;}return0;}voidPwmInit(){PWMPR=0x00;PWMMCR=0x02;PWMMR0=4000;PWMMR6=2000;PWMLER=0x41;PWMPCR=0x4000;PWMTCR=0x09;}2、用定时器匹配后引脚翻转功能使LED灯1秒闪烁一次。#includeconfig.h#defineLED13void__irqIRQ_Time0(){while((T0IR&0x01)==0);T0IR=0x01;VICVectAddr=0x00;}voidTime0Init(){T0PR=99;T0MCR=0x03;T0MR0=110592/4;T0TCR=0x03;T0TCR=0x01;T0EMR=0X30;VICIntSelect=0x00;VICVectCntl0=0x24;VICVectAddr0=(uint32)IRQ_Time0;VICIntEnable=0x00000010;}intmain(){PINSEL0=0x00000080;IOCLR=LED;Time0Init();while(1);return1;}3、上位机发送一个数字字符给下位机(1-8),下位机接受到这个字符若为“1”,则点亮一盏灯,“2”点亮2盏灯。。。。。。。“8”点亮8盏灯。4、设外部中断为FIQ快速中断,按键按下,灯的亮灭状态改变。/**注意:需要在LPC2106.h中添加EXTMODE和EXTPOLAR寄存器*/#includeconfig.h#defineLED0x01void__irqIRQ_SPR(){if((IOPIN&0X01)==0)IOSET=0X01;elseIOCLR=0X01;while((EXTINT&0X02)!=0)EXTINT=0x02;}//中断初始化voidEINT_init(){PINSEL0=0X20000000;//选择P0.14为中EINT1,P0.0为GPIOVICIntSelect=/*~*/(115);//设置EINT1为FIQ中断VICIntEnable=(115);//EINT1中断使能,开中断EXTINT=0x02;//清中断}intmain(){EINT_init();IODIR=LED;//P0.0为输出,其余为输入IOSET=LED;//开始不显示while(1);return0;}修改头文件修改lpc20161)在#defineMAMTIM(*((volatileunsignedchar*)0xE01FC004))//定时控制添加:#defineEXTMODE(*((volatileunsignedchar*)0xE01FC148))#defineEXTPOLAR(*((volatileunsignedchar*)0xE01FC14C))2)添加lcd16023)修改target.cvoidFIQ_Exception(void){if((IOPIN&0X01)==0)IOSET=0X01;elseIOCLR=0X01;while((EXTINT&0X02)!=0)EXTINT=0x02;//while(1);//这一句替换为自己的代码}4)修改seartup.s文件将5f改成9f5、外部中断,通过1个按键使8个发光二极管二进制显示加法。#includeconfig.h#defineLED0x000000FF//设置p0引脚typedefunsignedintuint32;uint32counter=0;void__irqIRQ_Eint1(void){//加法counter++;IOSET=LED;IOCLR=counter;while((EXTINT&0x02)!=0){EXTINT=0x02;}VICVectAddr=0;}intmain(void){PINSEL0=0x20000000;IODIR=LED;IOSET=LED;IOCLR=counter;VICIntSelect=0;VICIntEnable=0x00008000;VICVectCntl1=0x2F;VICVectAddr1=(int)IRQ_Eint1;while(1);}6、用单边沿、双边沿两种方式输出两路脉冲信号,要求占空比为50%,显示在同一个示波器上;#includeconfig.hvoidPWM_Init(){PWMPR=0x00;PWMMCR=0x02;PWMMR0=4000;PWMMR1=1000;PWMMR2=3000;PWMMR3=2000;PWMLER=0x0F;PWMPCR=0x0C04;PWMLER=0X0F;PWMTCR=0x09;}intmain(){PINSEL0=0X00008008;PWM_Init();while(1){PWMMR0=4000;PWMMR1=1000;PWMMR2=3000;PWMMR3=2000;}return0;}7、用延时方法,使共阳数码管静态循环显示0—F。7seg-com-an-grn#includeconfig.h#defineLED0X7FvoiddelayNS(uint32xms){inti,j;for(i=xms;i0;i--)for(j=5000;j0;j--);}uint32dis_tab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};intmain(){inti;PINSEL0=0;IODIR=LED;while(1)for(i=0;i16;i++){IOSET=0xff;IOCLR=dis_tab[i];delayNS(280);}return0;}8、8位共阴数码管动态显示12345678。#includeconfig.h#defineucharunsignedchar#defineuintunsignedint#defineCS0xFEFFvoiddelay(uintxms){uinti,j;for(i=xms;i0;i--)for(j=110;j0;j--);}intmain(void){constuinta[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff};PINSEL0=0x00000000;PINSEL1=0x00000000;IODIR=0xFFFF;while(1){uchari;for(i=0;i8;i++){IOSET=(CSi)&(0xFF00)|a[i];delay(20);IOCLR=0xFFFF;}}return0;}9、使用中断,2按键,2灯。不同按键控制不同灯,按键按下,所控制的灯的状态改变。修改头文件1)在#defineMAMTIM(*((volatileunsignedchar*)0xE01FC004))//定时控制添加:#defineEXTMODE(*((volatileunsignedchar*)0xE01FC148))#defineEXTPOLAR(*((volatileunsignedchar*)0xE01FC14C))#includeconfig.h#defined110//第一盏灯#defined211//第二盏灯//EINT1的中断服务程序void__irqEINT1_ISR(){if((IOPIN&d1)==0x0)IOSET=d1;elseIOCLR=d1;while((EXTINT&0X02)!=0)//产生中断要清中断EXTINT=0x02;}//EINT2的中断服务程序void__irqEINT2_ISR(){if((IOPIN&d2)==0x0)IOSET=d2;elseIOCLR=d2;while((EXTINT&0X04)!=0)EXTINT=0x04;}//中断初始化voidEINT_init(){PINSEL0=0XA0000000;//选择P0.14,p0.15为中EINT1,EINT2,P0.0,P0.1为GPIOEXTMODE|=0X06;//-,0110,跳沿触发EXTPOLAR|=0x09;//-,1001,下跳沿触发VICIntSelect&=~0x00018000;//设置EINT1,2为IRQ中断VICVectCntl1=0x20|15;//EINT1分配为向量IRQ中通道1,b5=1VICVectCntl2=0x20|16;//EINT2分配为向量IRQ中通道2,b5=1VICVectAddr1=(uint32)EINT1_ISR;//EINT1的中断服务程序VICVectAddr2=(uint32)EINT2_ISR;//EINT2的中断服务程序VICIntEnable=0x00018000;//EINT1,2中断使能,开中断EXTINT=0x0f;//清中断}intmain(){EINT_init();IODIR=d1|d2;//P0.0,p0.1为输出,其余为输入IOSET=d1|d2;//开始不显示while(1);return0;}10、以中断方式,控制两个数码管显示数字,三个按键,每个按键分别控制数字的加、减和清零。#includeconfig.h#defineLED0x000000ffuint32temp=0;//加法void__irqIRQ_Eint0(){temp=VICIRQStatus;temp=IOSET;temp++;if((temp&0x000f)=10)temp+=6;//个位大于9进位,改0if((temp&0x00ff)0x99)temp+=0x060;//十位大于9进位,改0IOCLR=LED;IOSET=temp;while((EXTINT&0x01)!=0)EXTINT=0x01;VICVectAddr=0x00;}//清零void__irqIRQ_Eint1(){temp=VICIRQStatus;IOCLR=LED;IOSET=0;while((EXTINT&0x02)!=0)EXTINT=0x02;VICVectAddr=0x00;}//减法void__irqIRQ_Eint2(){temp=VICIRQStatus;temp=IOSET;temp--;if((temp&0x000f)==0xf)//temp--,个位出现f,执行下边操作temp&=0xf9;//个位f-9-,十位保留if((temp&0x00f0)==0xf0)//temp--,十位出现f,执行下边操作temp&=0x9f;//十位f--9,个位保留IOCLR=LED;IOSET=temp;while((EXTINT&0x04)!=0)EXTINT=0x04;VICVectAddr=0x00;}voidEXTINT_Init(){VICIntSelect=0x00000000;VICVectCntl0=0x2e;VICVectAddr0=(int)IRQ_Eint0;VICVectCntl1=0x2f;VICVectAddr1=(int)IRQ_Eint1;VICVectCntl2=0x30;VICVectAddr2=(int)IRQ_Eint2;VICIntEnable=0x0001c000;EXTINT=0x07;}intmain(){PINSEL0=0xa0000000;PINSEL1=0x00000001;EXTINT_Init();IODIR=LED;IOCLR=LED;while(1);return0;}11、以GPIO的方式控制LCD1602输出两行,第一行显示邮箱,第二行显示电话号#includeconfig.h#defi

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功