单片机实验报告Word文档格式.docx

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

单片机实验报告Word文档格式.docx

《单片机实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实验报告Word文档格式.docx(29页珍藏版)》请在冰点文库上搜索。

单片机实验报告Word文档格式.docx

voiddelay();

intmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

//关闭看门狗

P2SEL=0;

//将P2端口设为基本I/O端口

P2SEL2=0;

P2DIR=0Xff;

//设置端口2为输出方向

P2OUT=0;

//初始化P2端口引脚,

For(;

){

P2OUT=~P2OUT;

delay();

}

voiddelay()

unsignedintj;

for(j=0;

j<

0xffff;

j++);

//延时

2.控制发光二极管的显示变化

在任务1的连线基础上,编程控制8个发光二极管按下面的2种规律循环变换,即规

律1?

?

规律2?

规律1?

……,如此循环反复。

1)规律1:

8个LED灯顺时针一个一个单独点亮,即L1亮?

L2……L7亮?

L8亮,

每次只有一个灯亮,其他灯灭;

2)规律2:

8个LED灯两两点亮,顺序为L1和L8,L2和L7,L3和L6,L4和L5,

每次只有两个灯亮,其他灯灭;

程序如下:

voidrule1();

voidrule2();

for(;

rule1();

rule2();

}

voidrule1()//规律1

unsignedcharLED_0=0x01,LED_temp;

LED_temp=LED_0;

for(unsignedinti=0;

i<

8;

i++)

{

P2OUT=~LED_temp;

LED_temp=LED_temp<

<

1;

voidrule2()//规律2

unsignedcharLED_data[]={0x81,0x42,0x24,0x18};

4;

P2OUT=~LED_data[i];

}

思考:

如果选择用单片机的P1端口控制8个发光二极管,如何在实验板上设计连线、

并编程实现任务2的功能?

设计连线:

将P1端口的8个引脚与L1~L8对应相连。

程序设计:

将原先程序中所有关于P2端口的操作都换为P1端口即可

3.用按键控制发光二极管的显示变化

在任务2基础上,增加2个按键与单片机的引脚相连,编程实现由按键控制发光二级管

的显示变化:

当按下实验板上的K1键时,8个发光二极管按任务2中的规律1变化;

当按下实验板上的K2键时,8个发光二极管按任务2中的规律2变化。

在实验1的连线基础上,将P1.0、P1.1分别于K1、K2相连。

如下图

P2DIR=0xff;

P1SEL&

=~(BIT0+BIT1);

//设置P1为基本I/O

P1SEL2&

P1DIR&

//设置P1.0和P1.1为输入状态

P1REN=0x03;

//使P1.0和P1.1能上拉电阻

P1OUT=0x03;

intkey=2;

if((P1IN&

BIT0)==0)

key=0;

elseif((P1IN&

BIT1)==0)

key=1;

if(key==0)

elseif(key==1)

4.并行方式控制数码管的显示

参看附录A,掌握MSP430G2553扩展板上4个数码管的工作原理,用单片机的8个I/O

引脚并行控制数码管的控制端Sh~Sa,设计相关连线。

编程完成下面任务:

1)画出单片机与4个数码管连接的原理图,分析控制方法;

2)编程控制四个数码管从右到左、依次每个数码管分别循环显示0~9、A~F。

3)用4个数码管做一个电子表,高两位数码管显示分钟值,低两位数码管显示秒值。

每计数到5分钟时,控制蜂鸣器发出一报警声,然后又从0开始重新计时。

其中1

秒时间可通过延时完成,如执行for(i=0;

i<

0x1FFFF;

i++),约为1秒。

本次实验对

秒值长短精确度不要求。

每个数码管显示的时间不能太长,也不能太短,为什么?

1)原理图如下:

控制方法:

P2.0~P2.7与Sa~Sh相连,控制LED灯的亮灭,P1.0~P1.3控制选择哪一个数码管进行输出。

2)编程控制四个数码管从右到左、依次每个数码管分别循环显示0~9、A~F。

constcharLEDtab[16]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};

//关闭看门狗

P1SEL=0;

P1SEL2=0;

P1DIR=0xff;

//设置P1为输出出口

P1OUT=0;

//设置P2为基本I/O

//设置P2为输出出口

P2OUT=0xff;

unsignedinti;

P1OUT=BIT0;

//第一个数码管开始输出

for(i=0;

16;

i++){

P2OUT=LEDtab[i];

P1OUT=BIT1;

//第二个数码管开始输出

P1OUT=BIT2;

//第三个数码管开始输出

P1OUT=BIT3;

//第四个数码管开始输出

voiddelay(){//延时函数

for(j=0;

//延时

在上述连线的基础上,将P1.7与BUZZ相连,程序如下

voidsecond();

constcharLEDtab[10]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};

unsignedchara,b,c,d;

//关闭看门狗

P1OUT=0+BIT7;

//初始化

a=b=c=d=~0x3F;

for(intk=0;

k<

5;

k++)//分钟

c=LEDtab[k];

for(intj=0;

6;

j++)//秒钟十位

b=LEDtab[j];

for(inti=0;

10;

i++)//秒钟个位

a=LEDtab[i];

second();

P1OUT=~BIT7;

//报警器报警

voiddelay()//延时函数

0x100;

voidsecond()//读秒函数,同时以很快的速度显示4个数码管的读数

40;

j++)

P2OUT=a;

P1OUT=BIT0+BIT7;

P2OUT=b;

P1OUT=BIT1+BIT7;

P2OUT=c;

P1OUT=BIT2+BIT7;

P2OUT=d;

P1OUT=BIT3+BIT7;

时间过长,没有连续的效果;

时间过短,不利于观察读数。

5.汇编格式指令和寻址方式的学习(可在simulator下完成)

L2_2.c源程序见下,建立C项目,进入DEBUG状态,点击view/disassembly,在反汇编

窗口得到L2_2.c汇编格式指令的程序代码,如图2-1和图2-2,阅读该程序的汇编格

式代码。

1)程序用到了哪些指令?

数据传送指令;

调用指令;

逻辑运算指令;

跳转指令;

堆栈操作指令;

减法运算指令;

加法运算指令;

返回指令;

无条件转移指令。

2)程序用到了哪几种寻址方式?

立即数寻址;

寄存器寻址;

绝对地址寻址;

符号地址寻址。

3)修改l2_2.C,将变量i定义为全局变量,通过反汇编的代码,比较与定义为局部变

量的不同;

定义为全局变量时寻址方式为绝对寻址;

而定义为局部变量时为寄存器寻址;

?

4)修改L2_2.C,将变量i的类型从unsignedint类型,改为unsignedlong类型,

反汇编看看函数delay的代码发生了什么变化?

程序执行的结果有什么不同?

为什

么?

(需在实验板上运行)。

1 代码增加了。

unsignedint类型下

Unsignedlong类型下:

2 程序执行时,发光二极管亮灭的时间间隔增大

3 delay程序执行时间增长

三、已完成的选做任务

1.(选做)用蜂鸣器、发光二极管显示按键信息

设计在实验板上用3个相邻发光二极管、8个按键、1个蜂鸣器与单片机的连接,编程

完成每按下某一个键,8个发光二极管以二进制形式显示该键值,K1~K8的键值分别

为000~111B,同时每按下一次键,蜂鸣器响一下,用声音提示接收到按键信息。

连线:

将P2.0~P2.2分别于L1~L3相连,P2.3与BUZZ相连,P1.0~P1.7分别与K1~K8

相连.

P2SEL&

=0xf0;

P2SEL2&

P2OUT|=0x0f;

P1REN=0xff;

P1OUT=0xff;

P1DIR=0x00;

BIT0)==0)//按下K1

P2OUT=0x07;

//LED灯显示为000,蜂鸣器响

P2OUT+=BIT3;

//蜂鸣器停止响

};

P2OUT=0x06;

BIT2)==0)

P2OUT=0x05;

BIT3)==0)

P2OUT=0x04;

BIT4)==0)

P2OUT=0x03;

BIT5)==0)

P2OUT=0x02;

BIT6)==0)

P2OUT=0x01;

BIT7)==0)

P2OUT=0x00;

voiddelay(){

i++);

2.(选做)增加按键控制功能:

按下K1键开始计时(或称继续计时);

按下K2键暂停计时,计时保持不变,此后若按下K1键将继续计时;

按下K3键将计时归零,并停止计时,若此后按下K1键,将开始计时。

在前面并行电路制作电子表连线的基础上,将P1.4~P1.6与K1~K3相连

unsignedcharkey=0;

P1DIR=0x8f;

//设置P1引脚的输入输出状态

P1REN=0x70;

//使P1.4~P1.6能上拉电阻

P1OUT=BIT4+BIT5+BIT6+BIT7;

while

(1){

while(key!

=1){//等待按K1键开始计时

BIT4)==0)key=1;

a=b=c=d=~0x3f;

unsignedcharflag=1;

k++)

BIT5)==0)key=2;

while(key==2)//等待按K2键暂停计时

BIT6)==0)key=3;

if(key==1)

if(key==3)//清零操作开始

flag=0;

break;

if(flag==0)break;

P1OUT=BIT4+BIT5+BIT6;

//蜂鸣器响

voiddelay()

0x500;

voidsecond()

P1OUT=BIT0+BIT4+BIT5+BIT6+BIT7;

P1OUT=BIT1+BIT4+BIT5+BIT6+BIT7;

P1OUT=BIT2+BIT4+BIT5+BIT6+BIT7;

P1OUT=BIT3+BIT4+BIT5+BIT6+BIT7;

3.(选做)串行方式控制数码管的显示

答:

连线方式:

将P1.0~P1.3与S1~S4相连,P1.4与DS相连,P1.5与SHCP相连,P1.6与STCP相连,Sa~Sh与Q0~Q7相连。

voidoutput(charData);

P1DIR=0XFF;

P1OUT=BIT7;

while

(1)

//第一个数码管输出

output(LEDtab[i]);

voidoutput(charData)//串行方式输出指定信号

if((Data&

P1OUT&

=~BIT4;

else

P1OUT|=BIT4;

Data=Data<

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

当前位置:首页 > 表格模板 > 表格类模板

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

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