1 / 19
文档名称:

c语言实验报告.doc

格式:doc   大小:568KB   页数:19页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

c语言实验报告.doc

上传人:w447750 2018/10/1 文件大小:568 KB

下载得到文件列表

c语言实验报告.doc

文档介绍

文档介绍:实验名称:单片机C语言程序结构和设计(实验2、3)
姓名_ __ 学号
实验班号机器号
实验目的:
掌握单片机C语言程序结构;
掌握单片机C语言程序调试方法;
掌握MSP430FG2553基本I/O控制方法;
巩固编写和调试单片机C语言程序方法;
了解简单接口电路的控制方法;
了解MSP430汇编格式的寻址方式和指令系统
实验基本任务
1、练****调试程序
内容:用跳线将实验板上的8个发光二极管与单片机连接。,功能是控制与单片机相连接的8个发光二极管在全亮与全灭这两种状态下循环变换。该程序没有语法上的错误, 但运行后不能实现上述现象, 请上机调试其中的问题, 指出程序的问题,并修改程序。
答: 将单片机P2端口的8个引脚与L1~L8相连。电路如下:
原有程序为:
通过上机调试,发现原程序有以下错误:
由于是P2端口上引脚与LED相接,所以应该设置P2而不是P1
应将P2端口调为基本I/O端口,仅通过DIR寄存器是不行的
源程序没有对P2OUT进行初始化,无法达到全亮全灭的效果
没有循环结构,无法达到全亮全灭的循环效果,可用for(;;)或while(1)结构
delay()函数延时过短,人眼几乎无法感受亮灭的变化
正确的程序应为:
#include ""
void delay();
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P2SEL=0; //将P2端口设为基本I/O端口
P2SEL2=0;
P2DIR=0Xff; //设置端口2为输出方向
P2OUT=0; //初始化P2端口引脚,
For(;;){
P2OUT=~P2OUT;
delay();}
}
void delay()
{
unsigned int j;
for (j=0;j<0xffff;j++); //延时
}
2. 控制发光二极管的显示变化
在任务 1 的连线基础上,编程控制 8 个发光二极管按下面的 2 种规律循环变换,即规
律 1à→规律 2→规律 1→规律 2→……,如此循环反复。
1) 规律 1:8 个 LED 灯顺时针一个一个单独点亮,即 L1 亮àL2……L7 亮àL8 亮,
每次只有一个灯亮,其他灯灭;
2) 规律 2:8 个LED灯两两点亮,顺序为 L1 和 L8,L2和 L7,L3 和 L6,L4 和 L5,
每次只有两个灯亮,其他灯灭;
答:程序如下:
#include ""
void delay();
void rule1();
void rule2();
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P2SEL=0; //将P2端口设为基本I/O端口
P2SEL2=0;
P2DIR=0Xff; //设置端口2为输出方向
P2OUT=0; //初始化P2端口引脚,
for(;;){
rule1();
rule2();
}
}
void rule1() //规律1
{
unsigned char LED_0=0x01,LED_temp;
LED_temp=LED_0;
for(unsigned int i=0;i<8;i++)
{
P2OUT=~LED_temp;
delay();
LED_temp=LED_temp<<1;
}
}
void rule2() //规律2
{
unsigned char LED_data[]={0x81,0x42,0x24,0x18};
for(unsigned int i=0;i<4;i++)
{
P2OUT=~LED_data[i];
delay();
}
}
void delay()
{
unsigned int j;
for (j=0;j<0xffff;j++); //延时
}
思考:
如果选择用单片机的 P1 端口控制 8 个发光二极管,如何在实验板上设计连线、
并编程实现任务 2 的功能?
答:
设计连线:将P1端口的8个引脚与L1~L8对应相连。
程序设计:将原先程序中所有关于P2端口的操作都换为P1端口即可
3. 用按键控制发光二极管的显示变化
在任务 2 基础上,增加 2 个按键与单片机的引脚相连,编程实现由按键控制发光二级管
的显示变化:当按下实验板上的 K1 键时,8 个发光二极管按任务 2 中的规律 1 变化;
当按下实验板上的 K2 键