|
【R7F0C809】简易的浓度检测仪器(软件部分)
[复制链接]
本帖最后由 cat3902982 于 2015-11-24 01:53 编辑
今天花时间整理了下两个部分:
1.串口部分,串口部分大部分采用的是瑞萨官网提供的例程,这里做一些简要的说明。
void main(void)
{
/* Start user code. Do not edit comment generated here */
MD_STATUS status; /* UART Status */
System_Init(); //这里加了系统初始化,主要初始化了P01-P07,P01是SENSOR的使能,P02-P05是HC595的控制脚;
HC595Send(0x00);//关闭LED灯板的所有的灯;
/* UART0 receive buffer setting */
status = R_UART0_Receive(&g_Uart0RxBuf, 1);
/* Start the UART0 Tx/Rx operation */
R_UART0_Start();
/* Main loop */
while (1U)
{
HALT(); /* wait for UART Rx interrupt */
/* Finish Reception and check result */
SRMK0 = 1U; /* disable Reception Interrupt */
SREMK0 = 1U; /* disable Reception error Interrupt */
/* For next reception */
if(g_Uart0RxBuf == 0x00) //Null Test
{
HC595Send(0x02);
for(i=0;i<250;i++)
{
delay_1ms();
delay_1ms();
delay_1ms();
delay_1ms();
}
HC595Send(0x00);
g_Uart0TxEnd = R_UART0_Send(messageOK,4);
while (g_Uart0TxEnd == 0){} /* wait for final transmit */
}
else if(g_Uart0RxBuf == 0x01) //Null Test
{
HC595Send(0x04);
for(i=0;i<250;i++)
{
delay_1ms();
delay_1ms();
delay_1ms();
delay_1ms();
}
HC595Send(0x00);
g_Uart0TxEnd = R_UART0_Send(messagePE,4);
while (g_Uart0TxEnd == 0){} /* wait for final transmit */
}
else if(g_Uart0RxBuf == 0x02) //Null Test
{
HC595Send(0x08);
for(i=0;i<250;i++)
{
delay_1ms();
delay_1ms();
delay_1ms();
delay_1ms();
}
HC595Send(0x00);
g_Uart0TxEnd = R_UART0_Send(messageFE,4);
while (g_Uart0TxEnd == 0){} /* wait for final transmit */
}
/* Set reception buffer pointer */
status = R_UART0_Receive(&g_Uart0RxBuf, 1);
SRMK0 = 0U; /* enable Reception Interrupt */
SREMK0 = 0U; /* enable Reception error Interrupt */
}
/* End user code. Do not edit comment generated here */
}
这里系统初始化主要是初始化了IO口,参考的an_r01an2005cc0110_r7f0c809_io例程中的IO初始化,注意的就是 PIOR |= 0x40; 要把这句注释掉,否则串口的TXD将会被映射到P137上。这里发送数据时,要注意需要加while (g_Uart0TxEnd == 0){} ,否则的话,他会一直在发。有空在看下是怎么回事。还有个问题,我把接受改为4个字节,收的时候,可以收到4个字节的 数据,但是只有第一个字节是对的,后面三个全不对。不知道是不是哪里有问题,也要研究下。
第二部分是LED驱动板的控制:
LED灯板驱动用的SN74HC595,在工程里面添加了这部分代码。
SN74HC595.H 文件:
#ifndef __SN74HC595_H
#define __SN74HC595_H
#define HC595_CLK_PIN 3 // SHCP
#define HC595_CLK_H() P0 |= 1<
#define HC595_CLK_L() P0 &= ~(1<
#define HC595_CS_PIN 5 //STCP
#define HC595_CS_H() P0 |= 1<
#define HC595_CS_L() P0 &= ~(1<
#define HC595_DATA_PIN 4 //DS
#define HC595_DATA_H() P0 |= 1<
#define HC595_DATA_L() P0 &= ~(1<
#define HC595_OE_PIN 2 //OE
#define HC595_OE_H() P0 |= 1<
#define HC595_OE_L() P0 &= ~(1<
void delay_1us(void);
void delay_1ms(void);
void HC595Init(void);
void HC595Send(uint8_t data);
#endif
SN74HC595.c 文件:
#include "r_cg_macrodriver.h"
#include "SN74HC595.h"
void delay_1us(void)
{
unsigned char n;
n = 1;
for(; n>0; n--);
}
void delay_1ms(void)
{
unsigned char i,j;
for(j=14; j>0; j--)
for(i=250; i>0; i--)
;
for(i=4; i>0; i--);
}
void HC595Init(void)
{
HC595_OE_L();
HC595_CLK_H();
HC595_DATA_H();
HC595_CS_H();
}
void HC595Send(uint8_t data)
{
uint8_t j;
HC595_CS_L();
for (j = 8; j > 0; j--)
{
if(data & 0x80)
{
HC595_DATA_H();
}
else
{
HC595_DATA_L();
}
HC595_CLK_L(); //上升沿发生移位
delay_1us();
delay_1us();
delay_1us();
delay_1us();
data <<= 1;
HC595_CLK_H();
delay_1us();
delay_1us();
delay_1us();
delay_1us();
}
HC595_CS_H();
}
效果实拍:
代码工程:
an_r01an2492cc0100_r7f0c809_serial.rar
(888.55 KB, 下载次数: 13)
还有个频率的测量,争取明天搞定。
|
|