MSP430单片机实验报告

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

MSP430单片机实验报告

专业:

姓名:

学号:

MSP430单片机实验报告

设计目标:使8位数码管显示“5201314.”,深入了解串行数据接口。

实现过程:主要分为主函数、驱动8位数码管函数、驱动1位数码管函数及延时函数。

延时函数:采用for循环。

驱动1位数码管子函数:设置74HC164的时钟传输和数传输,声明变量,使数据表中每一个要表示的字符的每一位都与shift做与运算从而进行传输,上升沿将传输数据传送出去。驱动1位数码管子函数的流程图如图1所示。

图1 驱动1位数码管子函数流程图

驱动8位数码管子函数:调用8次驱动1位数码管子函数。驱动8位数码管子函数流程图如图2所示。

图2 驱动8位数码管流程图

while

图3 主函数流程图

实验结果:供电后,数码管显示“5201314.”字样。

源程序:

/************* 程序名称:5201314.*************/

/***程序功能:通过模拟同步串口控制8个共阳数码管***/

/*******P5.1 数据管脚,P5.3 同步时钟管脚*******/

#include // 头文件

void delay(void); // 声明延迟函数void seg7_1 (unsigned char seg7_data);

// 声明驱动1 位数码管函数void seg7_8 ( unsigned char seg7_data7,

unsigned char seg7_data6,

unsigned char seg7_data5,

unsigned char seg7_data4,

unsigned char seg7_data3,

unsigned char seg7_data2,

unsigned char seg7_data0); // 声明驱动8 位数码管函数

const unsigned char decoder_seg7[]

={0x92,0xa4,0xc0,0xf9,0xb0,0xf9,0x99,0x7f }; //数码管显示表【5201314.】

int main(void) // 主函数

{

WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗

P5SEL&=~BIT1; // 设置P5.1 端口为并行数字输入/ 输出口P5DIR|=BIT1; // 设置P5.1 端口为输出口

P5SEL&=~BIT3; // 设置P5.3 端口为并行数字输入/ 输出口P5DIR|=BIT3; // 设置P5.3 端口为输出口

while(1) // 重复执行

{

seg7_8 (7,6,5,4,3,2,1,0); // 调用驱动8 位数码管函数

delay ( ); // 延时

}

}

void seg7_8 (unsigned char seg7_data7,

unsigned char seg7_data6,

unsigned char seg7_data5,

unsigned char seg7_data4,

unsigned char seg7_data3,

unsigned char seg7_data1,

unsigned char seg7_data0)

// 驱动8位数码管的同步串行数据接口驱动函数

{

seg7_1(seg7_data0); // 调用1 位数码管的同步串行数据接口驱动函数

seg7_1(seg7_data1);

seg7_1(seg7_data2);

seg7_1(seg7_data3);

seg7_1(seg7_data4);

seg7_1(seg7_data5);

seg7_1(seg7_data6);

seg7_1(seg7_data7);

}

void seg7_1 (unsigned char seg7_data)

// 驱动1 位数码管的同步串行数据接口驱动函数

{

unsigned char code_seg7; // 声明显示代码变量

unsigned char a; // 声明循环变量

unsigned char shift; // 声明串行数据位存储变量

code_seg7=decoder_seg7[seg7_data]; // 显示数据译码

P5OUT&=~BIT1; // P5.1 输出低电平

P5OUT&=~BIT3; // P5.3 输出低电平

shift=0x80; // 串行数据位指向8 位数据的最高位for(a=0; a<8; a++)

{

if(code_seg7&shift) // 判断显示代码位的状态

{

P5OUT|=BIT1; // P5.1 输出高电平}

else

{

P5OUT&=~BIT1; // P5.1 输出低电平}

P5OUT|=BIT3; // P5.3 输出高电平

P5OUT&=~BIT3; // P5.3 输出低电平

shift=shift>>1; // 串行数据位指向数据位右移1 位}

}

void delay (void) //延时函数

{

unsigned char b;

相关文档
最新文档