如何在ccs快速使用感为八路灰度传感器

声明:此文章方便新手快速使用感为灰度传感器,代码是从官方文章和例程总结下来的。官方提供三种方法,第一种用的gpio过多,第三种iic对于新手不友好,第二种,串行读取数据,我个人认为最方便上手。

1、在系统文件上配置gpio口(CLK,DAT),gpio口可以随便选,CLK输出,DAT输入,其他默认选项。打开嘀嗒计时器(systick),配置到1us(period=32)。

2、配置board.c文件,用到微秒延时,.h自己写就行

#include "board.h"

#include "stdio.h"

void delay_us(unsigned long __us)

{

    uint32_t ticks;

    uint32_t told, tnow, tcnt = 38;

    ticks = __us * (32000000 / 1000000);

    told = SysTick->VAL;

    while (1)

    {

        tnow = SysTick->VAL;

        if (tnow != told)

        {

            if (tnow < told)

                tcnt += told - tnow;

            else

                tcnt += SysTick->LOAD - tnow + told;

            told = tnow;

            if (tcnt >= ticks)

                break;

        }

    }

}


 

3、创建灰度传感器.c文件,.h自己写就行。

#include "ti_msp_dl_config.h"

#include "GreySensor.h"

#include "board.h"

unsigned char Digtal;//用于存放灰度传感器的数据//全亮11111111,全灭00000000

uint8_t gw_gray_serial_read()

{

    uint8_t ret = 0;

    uint8_t i;

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

        /* 输出时钟下降沿 */

        DL_GPIO_clearPins(GPIOB, Grey_Sensors_Serial_CLK_PIN);

        delay_us(2);

        //避免GPIO翻转过快导致反应不及时

        ret |= (DL_GPIO_readPins(GPIOB, Grey_Sensors_Serial_DAT_PIN)==0?0:1) << i;

        /* 输出时钟上升沿,让传感器更新数据*/

        DL_GPIO_setPins(GPIOB, Grey_Sensors_Serial_CLK_PIN);

        /* 延迟需要在5us左右 */

        delay_us(5);

    return ret;

}

4、在main函数循环调用读取函数。

extern unsigned char Digtal;

//用于存放灰度传感器的数据

//全亮11111111,全灭00000000

int main(void){

SYSCFG_DL_init();   

 while(1) {

Digtal=gw_gray_serial_read();//读取灰度传感器数据存入Digtal 

sprintf(str,"%d%d%d%d%d%d%d%d",(Digtal>>0)&0x01,(Digtal>>1)&0x01,(Digtal>>2)&0x01,(Digtal>>3)&0x01,(Digtal>>4)&0x01,(Digtal>>5)&0x01,(Digtal>>6)&0x01,(Digtal>>7)&0x01); //OLED_ShowString(0, 6, (uint8_t *)str,16);//OLED显示数据

5、使用前记得校准,不接任何跳线冒。

你可能感兴趣的:(c语言)