单片机复习题答案.docx

上传人:b****7 文档编号:15759149 上传时间:2023-07-07 格式:DOCX 页数:23 大小:18.94KB
下载 相关 举报
单片机复习题答案.docx_第1页
第1页 / 共23页
单片机复习题答案.docx_第2页
第2页 / 共23页
单片机复习题答案.docx_第3页
第3页 / 共23页
单片机复习题答案.docx_第4页
第4页 / 共23页
单片机复习题答案.docx_第5页
第5页 / 共23页
单片机复习题答案.docx_第6页
第6页 / 共23页
单片机复习题答案.docx_第7页
第7页 / 共23页
单片机复习题答案.docx_第8页
第8页 / 共23页
单片机复习题答案.docx_第9页
第9页 / 共23页
单片机复习题答案.docx_第10页
第10页 / 共23页
单片机复习题答案.docx_第11页
第11页 / 共23页
单片机复习题答案.docx_第12页
第12页 / 共23页
单片机复习题答案.docx_第13页
第13页 / 共23页
单片机复习题答案.docx_第14页
第14页 / 共23页
单片机复习题答案.docx_第15页
第15页 / 共23页
单片机复习题答案.docx_第16页
第16页 / 共23页
单片机复习题答案.docx_第17页
第17页 / 共23页
单片机复习题答案.docx_第18页
第18页 / 共23页
单片机复习题答案.docx_第19页
第19页 / 共23页
单片机复习题答案.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机复习题答案.docx

《单片机复习题答案.docx》由会员分享,可在线阅读,更多相关《单片机复习题答案.docx(23页珍藏版)》请在冰点文库上搜索。

单片机复习题答案.docx

单片机复习题答案

复习题

考试时间:

90分钟

试题1:

小灯闪烁

要求利用LauncnPad上的LED小灯(P1.0P1.6),通过循环延时程序控制小灯闪烁,要求修改内部DCO系统时钟,控制小灯闪烁的速度,要求至少有四种明显变化的速度。

要求画出硬件接线图。

主程序:

#include

voidGPIO_init();

voidBCSplus_init(void);

voidP1_IODect();

voidP13_Onclick();

voidmain()

{

WDTCTL=WDTPW+WDTHOLD;

GPIO_init();

_EINT();

_enable_interrupts();

while

(1)

{

P1OUT^=BIT0;

P1OUT^=BIT6;

__delay_cycles(1000000);

}

 

}

voidGPIO_init()

{

P1DIR|=BIT0+BIT6;

P1OUT|=BIT0;

P1OUT&=~BIT6;

P1IFG&=BIT0;

P1REN|=BIT3;

P1OUT|=BIT3;

P1DIR&=~BIT3;

P1IES|=BIT3;

P1IE|=BIT3;

}

voidP1_IODect()

{

unsignedcharPush_Key=0;

Push_Key=P1IFG&(~P1DIR);

__delay_cycles(10000);

if((P1IN&Push_Key)==0)

{

switch(Push_Key)

{

caseBIT0:

break;

caseBIT1:

break;

caseBIT2:

break;

caseBIT3:

P13_Onclick();break;

default:

break;

}

}

}

#pragmavector=PORT1_VECTOR

__interruptvoidP1_ISR(void)

{

_DINT();

P1_IODect();

P1IFG&=0X00;

_EINT();

}

voidP13_Onclick()

{

staticunsignedintFreq=0;

if(Freq>3)

{

Freq=0;

}

switch(Freq)

{

case0:

BCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;break;

case1:

BCSCTL1=CALBC1_8MHZ;DCOCTL=CALDCO_8MHZ;break;

case2:

BCSCTL1=CALBC1_12MHZ;DCOCTL=CALDCO_12MHZ;break;

case3:

BCSCTL1=CALBC1_16MHZ;DCOCTL=CALDCO_16MHZ;break;

default:

break;

}

Freq++;

}

试题2:

LCD显示学号

在提供的段式LCD驱动程序基础上,编写主程序显示学号。

要求画出硬件接线图。

主程序:

#include

#include

#include

#include

main()

{

WDTCTL=WDTPW+WDTHOLD;

TCA6416A_Init();

HT1621_init();

while

(1)

{

LCD_DisplayDigit(1,10);

LCD_DisplayDigit(4,9);

LCD_DisplayDigit(8,8);

LCD_DisplayDigit(4,7);

LCD_DisplayDigit(1,1);

LCD_DisplayDigit(1,2);

LCD_DisplayDigit(0,3);

LCD_DisplayDigit(3,4);

HT1621_Reflash(LCD_Buffer);

}

}

显示为本人学号

试题3:

流水灯

在提供的TCA6416驱动程序基础上,要求首先实现8个外扩小灯的循环显示即流水灯功能,循环显示方式为:

(要求画出硬件接线图)

●○○○○○○○○●○○○○○○○○●○○○○○○○○●○○○○○○○○●○○○○○○○○●○○○○○○○○●○○○○○○○○●●○○○○○○○

加入TCA6416A.c

voidLEDFlash(void)

{

unsignedcharout0_7[2]={0};

unsignedcharFlag1=0x7F;

unsignedcharFlag2=0xFE;

unsignedinti;

for(i=0;i<8;i++)

{

out0_7[0]=Out_CMD0;

out0_7[1]=Flag1;

Flag1=(Flag1>>1)|0x80;

TCA6416_Tx_Frame(out0_7,2);//将更新后的数据包,写入芯片寄存器

__delay_cycles(16000000);

}

for(i=0;i<8;i++)

{

out0_7[0]=Out_CMD0;

out0_7[1]=Flag2;

Flag2=(Flag2<<1)|0x01;

TCA6416_Tx_Frame(out0_7,2);//将更新后的数据包,写入芯片寄存器

__delay_cycles(16000000);

}

}

主程序:

#include

#include

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

TCA6416A_Init();

BCSCTL1=CALBC1_12MHZ;

DCOCTL=CALDCO_12MHZ;

while

(1)

{

LEDFlash();

}

}

试题4:

按键外部中断

要求利用LaunchPad板,P1.3外接按键,控制LED小灯(P1.6)状态,通过外部中断实现。

要求画出硬件接线图。

主程序:

(非常规方法)

#include"msp430g2553.h"

voidP13_Onclick();

voidP1_IODect();

voidGPIO_init();

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

GPIO_init();

_EINT();

TACTL=TASSEL_2+ID_0+MC_1+TACLR+TAIE+~TAIFG;

TACCTL1=OUTMOD_7;

TACCR0=500;

_BIS_SR(LPM0_bits+GIE);

LPM3;

}

voidGPIO_init()

{

P1DIR|=BIT6;

P1SEL|=BIT6;

P1REN|=BIT3;

P1OUT|=BIT3;

P1DIR&=~BIT3;

P1IES|=BIT3;

P1IE|=BIT3;

}

#pragmavector=PORT1_VECTOR

__interruptvoidPORT1_ISR(void)

{

P1_IODect();

P1IFG=0;

}

voidP1_IODect()

{

unsignedintkey=0;

key=P1IFG&(~P1DIR);

__delay_cycles(10000);

if((P1IN&key)==0)

{

switch(key)

{

//caseBIT0:

P10_Onclick();break;

caseBIT3:

P13_Onclick();break;

default:

break;

}

}

}

voidP13_Onclick()

{

staticunsignedintFreq=0;

if(Freq>=3)

{

Freq=0;

}

elseFreq++;

switch(Freq)

{

case0:

TACCR1=100;break;

case1:

TACCR1=0;break;

case2:

TACCR1=100;break;

case3:

TACCR1=0;break;

default:

break;

}

}

试题5:

定时器

利用定时器定时0.5S功能,让小灯亮0.5s,暗0.5s方式闪烁。

要求采用定时器中断功能实现。

主程序:

#include

voidBCSplus_init(void);

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

BCSplus_init();

P1SEL=0X00;

P1DIR|=0X01;

P1OUT|=0X01;

while

(1)

{

P1OUT^=0X01;

_delay_cycles(500000);

}

}

 

voidBCSplus_init(void)

{

BCSCTL2=SELM_0+DIVM_0+DIVS_0;

if(CALBC1_1MHZ!

=0xFF){

DCOCTL=0x00;

BCSCTL1=CALBC1_1MHZ;/*SetDCOto1MHz*/

DCOCTL=CALDCO_1MHZ;

}

 

BCSCTL1|=XT2OFF+DIVA_0;

 

}

试题6:

串口控制小灯亮灭

要求通过串口连接实验箱和计算机,编制程序,从PC机发送字符A到单片机,单片机接收后关闭LED小灯。

发送字符B到单片机,单片机接收后点亮LED小灯。

主程序:

#include"msp430g2553.h"

voidUART_RX(void);

unsignedchartemp;

voidmain(void)

{

//CSL_init();//ActivateGrace-generatedconfiguration

WDTCTL=WDTPW+WDTHOLD;

P1DIR|=BIT0;

P1SEL=BIT1+BIT2;

P1SEL2=BIT1+BIT2;

if(CALBC1_1MHZ!

=0xFF){

DCOCTL=0x00;

BCSCTL1=CALBC1_1MHZ;/*SetDCOto1MHz*/

DCOCTL=CALDCO_1MHZ;

}

UCA0CTL1|=UCSWRST;

UCA0CTL1=UCSSEL_2+UCSWRST;

UCA0MCTL=UCBRF_0+UCBRS_1;

UCA0BR0=104;

UCA0CTL1&=~UCSWRST;

IFG2&=~(UCA0RXIFG);

IE2|=UCA0RXIE;

__bis_SR_register(GIE);

LPM0;

}

#pragmavector=USCIAB0RX_VECTOR

__interruptvoidUSCI0RX_ISR_HOOK(void)

{

UART_RX();

}

 

voidUART_RX(void)

{

temp=UCA0RXBUF;

if(temp=='B')

P1OUT|=BIT0;

Elseif(temp=='A')

P1OUT&=~BIT0;

while(!

(IFG2&UCA0TXIFG));

UCA0TXBUF=temp;

}

题7:

串口通信

要求通过串口连接实验箱和计算机,编制程序,从PC机发送字符到单片机,单片机在LCD上显示接收到的字符。

#include

#include

#include

#include

voidUART_RX(void);

unsignedchartemp;

voidmain(void)

{

//CSL_init();//ActivateGrace-generatedconfiguration

WDTCTL=WDTPW+WDTHOLD;

P1DIR|=BIT0;

P1SEL=BIT1+BIT2;

P1SEL2=BIT1+BIT2;

if(CALBC1_1MHZ!

=0xFF){

DCOCTL=0x00;

BCSCTL1=CALBC1_1MHZ;/*SetDCOto1MHz*/

DCOCTL=CALDCO_1MHZ;

}

UCA0CTL1|=UCSWRST;

UCA0CTL1=UCSSEL_2+UCSWRST;

UCA0MCTL=UCBRF_0+UCBRS_1;

UCA0BR0=104;

UCA0CTL1&=~UCSWRST;

IFG2&=~(UCA0RXIFG);

IE2|=UCA0RXIE;

__bis_SR_register(GIE);

LPM0;

}

#pragmavector=USCIAB0RX_VECTOR

__interruptvoidUSCI0RX_ISR_HOOK(void)

{

UART_RX();

}

 

voidUART_RX(void)

{

temp=UCA0RXBUF;

TCA6416A_Init();

HT1621_init();

LCD_DisplayDigit(temp-48,6);

HT1621_Reflash(LCD_Buffer);

while(!

(IFG2&UCA0TXIFG));

UCA0TXBUF=temp;

}

r

试题8:

定时器

使用单片机的内部定时器模块,制作电子钟并通过液晶显示时间信息。

电子钟能正常运行时在LCD液晶上显示”XX:

XX:

XX”(时分秒)

主程序:

#include

#include

#include

#include

inti,j=0,a1,a2,a3;

voidjs();

voidGPIO_init();

main()

{

WDTCTL=WDTPW+WDTHOLD;

TCA6416A_Init();

HT1621_init();

GPIO_init();

js();

}

voidjs(void)

{

TCA6416A_Init();

HT1621_init();

_DINT();

while

(1)

{

i++;

if(i%2)

{

LCD_DisplaySeg(99);

LCD_DisplaySeg(83);

}

if(i%2==0)

{

LCD_ClearSeg(83);

LCD_ClearSeg(99);

}

 

a1=i/3600;

a2=(i-a1*3600)/60;

a3=i-a1*3600-a2*60;

 

LCD_DisplayDigit(a1/10%6,1);

LCD_DisplayDigit(a1%10,2);

LCD_DisplayDigit(a2/10%6,3);

LCD_DisplayDigit(a2%10,4);

LCD_DisplayDigit(a3/10%6,5);

LCD_DisplayDigit(a3%10,6);

__delay_cycles(1000000);

HT1621_Reflash(LCD_Buffer);

}

}

 

voidGPIO_init()

{

P1REN|=BIT3;

P1OUT|=BIT3;

P1DIR&=~BIT3;

P1IES|=BIT3;

P1IE|=BIT3;

}

试题9:

温度测量显示

要求MSP430G2553单片机ADC,内部温度传感器进行测量,并把温度结果通过LCD显示。

要求画出硬件接线图。

主程序:

#include

#include

#include

#include

#include

#include

voidADC10_init(void);

voidBCSplus_init(void);

longIntDegc;

unsignedintValue;

intmain(intargc,char*argv[])

{

//WDTplus_init();

WDTCTL=WDTPW+WDTHOLD;

TCA6416A_Init();

HT1621_init();

BCSplus_init();

ADC10_init();

while

(1)

{

ADC10CTL0|=ENC+ADC10SC;

//while(ADC10DTCL1&BIT0);

Value=ADC10MEM;

IntDegc=((Value-673)*423)/1024;

LCD_DisplayDigit(IntDegc/100,1);

LCD_DisplayDigit(IntDegc/10%10,2);

LCD_DisplayDigit(IntDegc%10,3);

LCD_DisplaySeg(24);

LCD_DisplaySeg(51);

LCD_DisplaySeg(55);

LCD_DisplaySeg(54);

LCD_DisplaySeg(50);

LCD_DisplaySeg(63);

LCD_DisplaySeg(57);

LCD_DisplaySeg(56);

LCD_DisplaySeg(59);

HT1621_Reflash(LCD_Buffer);

}

//return(0);

}

试题10:

信号周期检测,并通过串口显示。

要求利用定时器的输入捕捉功能,检测输入信号周期,并通过串口发送给PC显示。

#include"msp430g2553.h"

unsignedchartemp;

unsignedcharstring[]="Pleaseinputcontrolednumber:

";

voidputchar(unsignedcharc);

voidputstr(unsignedchar*s);

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//StopWDT

if(CALBC1_1MHZ==0xFF)//Ifcalibrationconstanterased

{

while

(1);//donotload,trapCPU!

!

}

DCOCTL=0;//SelectlowestDCOxandMODxsettings

BCSCTL1=CALBC1_1MHZ;//SetDCO

DCOCTL=CALDCO_1MHZ;

P1DIR|=BIT6;

P1DIR|=BIT2;//P1.2UART_TX

P1DIR&=~BIT1;//P1.2UART_RX

P1SEL|=BIT1+BIT2;//selectP1.1andP1.2asUARTport

P1SEL2|=BIT1+BIT2;

UCA0CTL1|=UCSWRST;

UCA0CTL1=UCSSEL_2+UCSWRST;

UCA0MCTL=UCBRF_0+UCBRS_1;

 

UCA0BR0=104;

UCA0CTL1&=~UCSWRST;

IE2|=UCA0RXIE;

_EINT();

putstr(string);

LPM0;

//__bis_SR_register(LPM0_bits+GIE);//EnterLPM0,interruptsenabled

}

#pragmavector=USCIAB0RX_VECTOR

__interruptvoidUSCIA0_ISR(void)

{

while(!

(IFG2&UCA0TXIFG));//USCI_A0TXbufferready?

UCA0TXBUF=UCA0RXBUF;

temp=UCA0RXBUF;

if(temp=='A')

{

P1OUT|=BIT6;

}

else

{

P1OUT&=~BIT6;

}

 

}

voidputchar(unsignedcharc)

{

while(!

(IFG2&UCA0TXIFG));

UCA0TXBUF=c;

}

voidputstr(unsignedchar*s)

{

IE2&=~UCA0RXIE;

while((*s)!

=0)

{

putchar(*s);

s++;

}

putchar('\n');

IE2|=UCA0RXIE;

}

TACTL=TASSEL_2+MC_2+TAIE+TACLR;TACTL=TASSEL_2+MC_2+TAIE+TACLR;

试题11:

PWM控制小灯亮度

要求利用LaunchPad开发板上P1.3按键,P1.6TA输出口接LED(用跳线帽连接),编写一段代码,通过按键改变PWM占空比,从而改变LED亮度。

要求至少实现四级亮度变化。

#include

voidGPIO_init();

voidBCSplus_init(void);

voidP1_IODect();

voidP13_Onclick();

voidmain()

{

WDTCTL=WDTPW+WDTHOLD;

GPIO_init();

_EINT();

_enable_interrupts();

while

(1)

{

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2