无线传感实验一

更新时间:2023-11-03 14:59:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验七 EL-IOT-II实验箱采集节点DS18B20实验

班级:网工13101 姓名:徐香奇 学号:201317030126

一、实验目的

1、掌握DS18B20的时序。 2、掌握7279的操作时序。 二、实验内容

编写一个程序,通过7279驱动数码管显示采集到的温度值。 三、实验设备

计算机、EL-IOT-II实验箱、仿真器、USB线(一头方的一头扁的)。 四、实验原理

7279的时序类似SPI,根据时序图用GPIO来模拟7279时序,从而显示采集到的温度值。 五、实验步骤

1、将实验箱上的跳线帽JP7短接在右边;

2、将仿真器连接到实验箱的JTAG2接口上,给实验箱上电; 3、在计算机上打开Keil uVision4环境,并打开实验程序\\EL-IOT-II实验箱程序\\LM3S811程序\\DS18B20\\DS18B20. Uvproj,编译、下载程序;

4、按下复位键(REST2)观察数码管上显示的温度值,若显示不正确请给实验箱重新上电; 5、用手摸住DS18B20,观察数码管上显示的温度值的变化。 六、思考题

1、如何控制DS18B20的时序? 答:修改使用如下函数控制时序

void delay(unsigned int t) { }

void short_delay(void) { }

void long_delay(void) { }

SysCtlDelay(20*(SysCtlClockGet( ) / 3000)/1000);

//

延时大约15us

//

短延时,用于控制时钟

SysCtlDelay(15*(SysCtlClockGet( ) / 3000)/1000);

//

延时大约10us

//

短延时,用于控制时钟

//

延时函数

SysCtlDelay(t*(SysCtlClockGet( ) / 3000)/1000);

实验八 EL-IOT-II实验箱采集节点7279实验

班级:网工13101 姓名:徐香奇 学号:201317030126

一、实验目的

1、学习GPIO使用及其相关的API函数。

2、学会对HD7279的操作及编程,并体会这种控制芯片的优势。 二、实验内容

编程使用Cortex-M3的GPIO向HD7279中写入控制命令、显示数据和读按键值等,实现键值的显示。

三、实验设备

计算机、EL-IOT-II实验箱、仿真器、USB线(一头方的一头扁的)。 四、实验原理

配置GPIO,模拟出符合HD7279的总线时序,从而向HD7279中写入控制命令、显示数据和读取按键值等。使能GPIO中断,并将HD7279的中断信号引致该中断,有按键按下即会产生中断。 五、实验步骤

1、将仿真器连接到实验箱的JTAG2接口上,给实验箱上电; 3、在计算机上打开Keil uVision4环境,并打开实验程序\\EL-IOT-II实验箱程序\\LM3S811程序\\HD7279\\HD7279 .Uvproj,编译、下载程序; 4、按下复位键(REST2),然后按下不同的按键,观察数码管显示的数据是否与键盘一一对应。 六、思考题?

1、如何控制7279? /* 接线:

1、用导线将MCU的IO1----IO3、INT0分别连接到HD7279的7279_CS、7279_CLK、7279_DATA、7279_KEY,

跳线帽JP1--JP3、JP10短接在左侧。。

2、用导线将HD7279的7279_A、7279_B、7279_C、7279_D、7279_E、7279_F、7279_G、7279_DP分别连接到

LED DISP的LED_A、LED_B、LED_C、LED_D、LED_E、LED_F、LED_G、LED_DP。

3、用导线将HD7279的7279_C1、7279_C2、7279_C3、7279_C4分别连接到LED DISP的LED_C1、LED_C2、LED_C3、LED_C4。

4、用导线将HD7279的7279_A、7279_B、7279_C、7279_D、7279_E、7279_F、7279_G、7279_DP分别连接到

KEY的KEY7、KEY6、KEY5、KEY4、KEY3、KEY2、KEY1、KEY8。 5、用导线将HD7279的7279_C1连接到KEY的插孔KEY 过程:

上电,运行程序,按键,观察LED显示的数据是否与键盘一一对应。 */

#include \#include \#include \#include \#include \

#include \#include \

#define CTL_PERIPH SYSCTL_PERIPH_GPIOC #define CTL_PORT GPIO_PORTC_BASE #define #define #define

CS

GPIO_PIN_4 GPIO_PIN_5 GPIO_PIN_6

// // //

定义CS 定义CLK 定义DATA

CLK DAT

// 定义INT0 #define

INT0_PERIPH

SYSCTL_PERIPH_GPIOE

#define INT0_PORT GPIO_PORTE_BASE #define INT0_PIN GPIO_PIN_1

#define CS_L GPIOPinWrite(CTL_PORT,CS,0x00); #define CLK_L GPIOPinWrite(CTL_PORT,CLK,0x00); #define DAT_L

GPIOPinWrite(CTL_PORT,DAT,0x00);

#define CS_H GPIOPinWrite(CTL_PORT,CS,0xFF); #define CLK_H GPIOPinWrite(CTL_PORT,CLK,0xFF); #define DAT_H

GPIOPinWrite(CTL_PORT,DAT,0xFF);

#define cmd_reset 0xa4 #define cmd_test 0xbf #define cmd_left 0xa1

#define cmd_read 0x15 #define decode1

0xc8

void delay(unsigned int t)

{ SysCtlDelay(t*(SysCtlClockGet( ) / 3000)/1000);

}

void short_delay(void)

{ SysCtlDelay(10*(SysCtlClockGet( ) / 3000)/1000);

//

}

void long_delay(void)

{ SysCtlDelay(15*(SysCtlClockGet( ) / 3000)/1000);

//

}

// 7279的片选输出低电平 // 7279的时钟输出低电平

//

7279的数据输出低电平

// 7279的片选输出高电平 //

7279的时钟输出高电平

//

7279的数据输出高电平

// 7279的复位命令 // 7279的测试命令

// 7279的左移位命令 // 7279的读缓冲命令

//

7279的译码显示命

//

延时函数

//

延时到输入量为0

//

短延时,用于控制时钟

延时大约10us

//

短延时,用于控制时钟

延时大约15us

void send_byte(unsigned char out_byte )

{ unsigned short i; GPIODirModeSet(CTL_PORT, DAT ,GPIO_DIR_MODE_OUT);

出口 ;

CS_L;

long_delay();

for (i=0;i<8;i++)

{

if (out_byte & 0x80) DAT_H

电平

else DAT_L; CLK_H; short_delay(); CLK_L;

short_delay();

out_byte <<= 1;

}

short_delay(); DAT_L;

}

unsigned char receive_byte (void) { unsigned char i,in_byte=0; GPIODirModeSet(CTL_PORT, DAT ,GPIO_DIR_MODE_IN);

口 ;

DAT_H;

电平

long_delay();

for(i=0;i<8;i++)

{

CLK_H;

short_delay();

in_byte <<= 1; if (GPIOPinRead(CTL_PORT,DAT)) in_byte |= 1; // CLK_L;

short_delay();

}

//

发送数据

// 设置循环变量

// 设置GPIO 为输

//

置低片选信号

//

延时等待稳定

//

写入8 bit数据

// 最高位为1 //

数据线输出高

// 否则输出低电平 // 置高时钟位 // 延时至稳定 //

置低时钟位 // 延时至稳定 // 输出参数变量右移一

// 延时至稳定

//

置高片选信号

// 接收数据 // 定义变量 // 设置DAT为输入 //

数据线输出高

//

延时等待稳定

// 读出8 bit数据 // 置高时钟位 //

延时至稳定

// 已收到的数据移位 向数据中增加一位

//

置低时钟位

//

延时至稳定

DAT_L; 电平

short_delay(); }

unsigned char read7279(void) { }

void write7279(unsigned char cmd, char dat) { }

void test7279(void) { }

void init(void) {

GPIODirModeSet(CTL_PORT, (CS | CLK ) ,GPIO_DIR_MODE_OUT);

GPIODirModeSet(INT0_PORT, ( INT0_PIN ) ,GPIO_DIR_MODE_IN); GPIOIntTypeSet(INT0_PORT, INT0_PIN, GPIO_FALLING_EDGE); 下降沿触发

GPIOPinIntEnable(INT0_PORT, INT0_PIN); IntEnable(INT_GPIOE); IntMasterEnable(); }

void GPIO_Port_E_ISR(void) 数, 在startup.s中注册中断函数

// GPIOB的中断服务函

// 使能INT0所在管脚的中断

// 使能GPIO端口中断 // 使能处理器中断

// 设置GPIO为输出口 ; // 设置INT0所在管脚为输入 // 设置INT0管脚的中断类型

SysCtlPeripheralEnable( CTL_PERIPH ); SysCtlPeripheralEnable( INT0_PERIPH );

// 使能GPIO口外设 // 使能GPIO口外设

//

芯片初始化

send_byte(cmd_test); delay(50000);

send_byte(cmd_reset);

// //

发送测试命令 //

等待以便观察 发送复位命令

//

显示测试程序

if(cmd != 255) send_byte(cmd); if(dat != 255) send_byte(dat&15);

//

//

写命令

//

置高片选位

写显示数据

//

向LED写显示数据和命令

send_byte(cmd_read);

// //

发送读键值命令 返回键值

return (receive_byte())+1;

//

读键值

//

//

延时至稳定

return(in_byte);

返回接收到的数据

//

数据线输出低

CS_H;

本文来源:https://www.bwwdw.com/article/tlo2.html

Top