智能车生涯(一)

下载软件总是下载不了,connect总是变不成disconnect,最后问了学长大佬才知道必须要开着电才可以。

每次下载再次上电才可以运行。

首先学习一下TFT1.8显示屏:

屏幕颜色全是大写

英飞凌TC264开源库极速入门之屏幕OLED和TFT--龙邱科技_哔哩哔哩_bilibili

一定要看测试函数,里面说了这个模块是如何使用的

一开始是只有把关于屏幕的函数放在前面(初始化那里才可以得到想要的结果)

发现问题是按键那里应该初始化,他写的是测试,所以运行不了。

sprintf  :可以把整数打印到字符串中

        PIN_InitConfig(P32_4, PIN_MODE_OUTPUT, 0);
        PIN_InitConfig(P22_3, PIN_MODE_OUTPUT, 0);
        PIN_InitConfig(P21_5, PIN_MODE_OUTPUT, 0);
        PIN_InitConfig(P21_3, PIN_MODE_OUTPUT, 0);
//      TFTSPI_Fill_Area(10, 20, 30, 40, u16YELLOW);
        TFTSPI_P8X16(1, 1, 'S',u16YELLOW,u16RED);
        TFTSPI_P8X16(2, 1, 'p',u16YELLOW,u16BLACK);
        TFTSPI_P8X16(3, 1, 'e',u16YELLOW,u16BLACK);
        TFTSPI_P8X16(4, 1, 'e',u16YELLOW,u16BLACK);
        TFTSPI_P8X16(5, 1, 'd',u16YELLOW,u16BLACK);
        TFTSPI_P8X16(6, 1, ':',u16YELLOW,u16BLACK);

然后学习一下按键:

用if就可以了

        if (KEY_Read(KEY0) == 0)      //按下KEY0键
        {
            Motor_start_var=1;
        }
        if (KEY_Read(KEY1) == 0)      //按下KEY0键
        {

        }
        if (KEY_Read(KEY2) == 0)      //按下KEY0键
        {
            TFTSPI_P8X16(10, 2, 'o',u16YELLOW,u16BLACK);
        }
        if (KEY_Read(DSW0) == 0)      //按下KEY0键
        {
            TFTSPI_P8X16(8, 2, '1',u16YELLOW,u16BLACK);
        }
        if (KEY_Read(DSW1) == 1)      //按下KEY0键
        {
            TFTSPI_P8X16(9, 2, '2',u16YELLOW,u16BLACK);
        }

然后学习直线行驶(控制电机):

void LQ_Atom_Motor_8chPWM(void)
{
	unsigned short duty=5000;
	char txt[16];


	TFTSPI_Init(1);        //LCD初始化  0:横屏  1:竖屏
	TFTSPI_CLS(u16BLACK);   //黑色屏幕
	TFTSPI_P8X16Str(0, 3, "Test Motor",u16WHITE,u16BLACK);		//字符串显示
	GPIO_KEY_Init();

	ATOM_PWM_InitConfig(ATOMPWM0, 5000, 12500);
	ATOM_PWM_InitConfig(ATOMPWM1, 5000, 12500);
	ATOM_PWM_InitConfig(ATOMPWM2, 5000, 12500);
	ATOM_PWM_InitConfig(ATOMPWM3, 5000, 12500);
	ATOM_PWM_InitConfig(ATOMPWM4, 1000, 12500);
	ATOM_PWM_InitConfig(ATOMPWM5, 1000, 12500);
	ATOM_PWM_InitConfig(ATOMPWM6, 1000, 12500);
	ATOM_PWM_InitConfig(ATOMPWM7, 1000, 12500);

	while(1)
	{
		if(KEY_Read(KEY0)==0)//按下KEY0键,占空比减小
		{
			if(duty>500)
				duty-=500;
		}
		if(KEY_Read(KEY2)==0)//按下KEY2键,占空比加大
		{
			if(duty<ATOM_PWM_MAX)//满占空比为10000
				duty+=500;
		}
		if(KEY_Read(KEY1)==0)//按下KEY1键,占空比中值
		{
			duty=5000;
		}

		ATOM_PWM_SetDuty(ATOMPWM0, duty, 12500);//驱动四个电机
		ATOM_PWM_SetDuty(ATOMPWM1, 5000, 12500);
		ATOM_PWM_SetDuty(ATOMPWM2, duty, 12500);
		ATOM_PWM_SetDuty(ATOMPWM3, 5000, 12500);
//		ATOM_PWM_SetDuty(ATOMPWM4, duty, 12500);
//		ATOM_PWM_SetDuty(ATOMPWM5, duty, 12500);
//		ATOM_PWM_SetDuty(ATOMPWM6, duty, 12500);
//		ATOM_PWM_SetDuty(ATOMPWM7, duty, 12500);

		sprintf(txt, "PWM: %05d;", duty);
		TFTSPI_P8X16Str(0, 5, txt,u16WHITE,u16BLACK);		//字符串显示
		UART_PutStr(UART0,txt);

    	LED_Ctrl(LED0,RVS);        //电平翻转,LED闪烁
		delayms(200);              //延时等待
	}
}

蜂鸣器:

    while(1)//主循环
	{
        if(KEY_Read(KEY1)==0)     //电机启动
        {
            delayms(20);
            if(KEY_Read(KEY1)==0)
            {
                  PIN_Write(P33_8,1);  //蜂鸣器
                  delayms(100);
            }
        }
	 }

记得对蜂鸣器初始化

以及电感:

void Test_ADC(void)
{
	unsigned long i;
    char txt[16];
    float ADC_Value[4];       //电磁的采集值
    float ADC_left = 0,ADC_right = 0;

    ADC_InitConfig(ADC0, 80000); //初始化
    ADC_InitConfig(ADC1, 80000);
    ADC_InitConfig(ADC2, 80000);
    ADC_InitConfig(ADC3, 80000);
    ADC_InitConfig(ADC4, 80000);
    ADC_InitConfig(ADC5, 80000);
    ADC_InitConfig(ADC6, 80000);
    ADC_InitConfig(ADC7, 80000);

    TFTSPI_Init(1);        //LCD初始化  0:横屏  1:竖屏
    TFTSPI_CLS(u16BLACK);   //蓝色屏幕
    TFTSPI_P8X16Str(0, 3, "Test Motor",u16WHITE,u16BLACK);      //字符串显示
    while(1)
    {
//    	unsigned long nowTime = STM_GetNowUs(STM0);//采样时间开始
//    	for( i = 0; i < 10000; i++)
//    	{
//    	    ADC_Value[0] = ADC_Read(ADC0);
//    	    ADC_Value[1] = ADC_Read(ADC3);
//    	}
//    	int time = STM_GetNowUs(STM0) - nowTime;   //采样结束
//    	sprintf(txt, "time : %d", time);           //转换为字符串
//    	OLED_P6x8Str(0,3,txt);
    	//显示采样时间

        ADC_Value[0] = ADC_ReadAverage(ADC0, 5);
        ADC_Value[1] = ADC_ReadAverage(ADC3, 5);
        ADC_left = (ADC_Value[0] - 100) / (1900 - 100) * 100;   //归一化
        ADC_right = (ADC_Value[1] - 100) / (1900 - 100) * 100;

        if(ADC_left < 0)    ADC_left = 0;
        if(ADC_left > 100)  ADC_left = 100;
        if(ADC_right < 0)   ADC_right = 0;
        if(ADC_right > 100) ADC_right = 100;

//    	ADC_left = ADC_Value[0];
//    	ADC_right = ADC_Value[1];

    	sprintf(txt, "ADC_left:%5.0f;", ADC_left);
        TFTSPI_P8X16Str(0, 5, txt,u16WHITE,u16BLACK);       //字符串显示
    	sprintf(txt, "ADC_righ:%5.0f;", ADC_right);
        TFTSPI_P8X16Str(0, 6, txt,u16WHITE,u16BLACK);       //字符串显示

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值