下载软件总是下载不了,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); //字符串显示
}