MSP430单片机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;