单片机复习题答案汇编

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

复习题

考试时间:90分钟

试题1:小灯闪烁

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

主程序:

#include

void GPIO_init();

void BCSplus_init(void);

void P1_IODect();

void P13_Onclick();

void main()

{

WDTCTL=WDTPW+WDTHOLD;

GPIO_init();

_EINT();

_enable_interrupts();

while(1)

{

P1OUT^=BIT0;

P1OUT^=BIT6;

__delay_cycles(1000000);

}

}

void GPIO_init()

{

P1DIR|=BIT0+BIT6;

P1OUT|=BIT0;

P1OUT&=~BIT6;

P1IFG&=BIT0;

P1REN|=BIT3;

P1OUT|=BIT3;

P1DIR&=~BIT3;

P1IES|=BIT3;

P1IE|=BIT3;

}

void P1_IODect()

{

unsigned char Push_Key=0;

Push_Key=P1IFG&(~P1DIR);

__delay_cycles(10000);

if((P1IN&Push_Key)==0)

{

switch(Push_Key)

{

case BIT0: break;

case BIT1: break;

case BIT2: break;

case BIT3: P13_Onclick();break;

default:break;

}

}

}

#pragma vector=PORT1_VECTOR

__interrupt void P1_ISR(void)

{

_DINT();

P1_IODect();

P1IFG&=0X00;

_EINT();

}

void P13_Onclick()

{

static unsigned int Freq=0;

if(Freq>3)

{

Freq=0;

}

switch(Freq)

{

case 0:BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;break;

case 1:BCSCTL1 = CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ;break;

case 2:BCSCTL1 = CALBC1_12MHZ; DCOCTL = CALDCO_12MHZ;break;

case 3: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

void LEDFlash(void)

{

unsigned char out0_7[2]={0};

unsigned char Flag1=0x7F;

unsigned char Flag2=0xFE;

unsigned int i;

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

void main(void)

{

相关文档
最新文档