2287|0

1729

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

【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)
还有个频率的测量,争取明天搞定。



点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表