发新帖我要提问
12
返回列表
打印
[STM32F1]

STM32+DX-BT04蓝牙应用

[复制链接]
楼主: hanzhen654
手机看帖
扫描二维码
随时随地手机跟帖
21
hanzhen654|  楼主 | 2017-10-31 07:53 | 只看该作者 回帖奖励 |倒序浏览
u8 tpad_scan(u8 mode)
{
        static u8 keyen=0;         //0:可以开始检测,>0:不能开始检测
        u8 sample=3;          //默认采样次数是3
        u8 res=0;
        u16 rval;
        if(mode)
        {       
                sample=6;         //如果为连续按下,采样次数是6
                keyen=0;
        }
        rval=tpad_get_maxval(sample);
        if(rval>(tpad_default_val+tpad_gate_val)) //触摸  有效
        {
                if(keyen==0)
                {
                        res=1;
                }
                printf("rval= %d\r\n",rval);
                keyen=3;  //至少要经过3次之后才算触摸有效                       
        }
        if(keyen)keyen--;
        return res;
}


使用特权

评论回复
22
hanzhen654|  楼主 | 2017-10-31 07:55 | 只看该作者
按键部分 初始化
void button_init()
{
        GPIO_InitTypeDef  GPIO_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE, ENABLE);//使能PB\E端口时钟
        GPIO_InitStructure.GPIO_Pin = k_up;                          
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;          //下拉输入
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOA,GPIO_Pin_0);

        GPIO_InitStructure.GPIO_Pin = k_left|k_down|k_right;                          
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          //上拉输入
        GPIO_Init(GPIOE, &GPIO_InitStructure);

}

使用特权

评论回复
23
hanzhen654|  楼主 | 2017-10-31 07:55 | 只看该作者
按键扫描
u8 keyscan(u8 mode)               
{
        static u8 key_up=1;
        if(mode)
        {
                key_up=1;       
        }
        if(key_up&&(K_UP==1||K_LEFT==0||K_DOWN==0||K_RIGHT==0))       
        {
                delay_ms(10);
                key_up=0;
                if(K_UP==1)
                {
                        return K_UP_PRESS;
                }
                else if(K_LEFT==0)
                {
                        return K_LEFT_PRESS;       
                }
                else if(K_DOWN==0)
                {
                        return K_DOWN_PRESS;       
                }
                else if(K_RIGHT==0)
                {
                        return K_RIGHT_PRESS;       
                }
        }
        else if(K_UP==0&&K_LEFT==1&&K_DOWN==1&&K_RIGHT==1)
        {
                key_up=1;       
        }
        return 0;
}


使用特权

评论回复
24
hanzhen654|  楼主 | 2017-10-31 11:37 | 只看该作者
在彩屏上面画一点
void GUI_Dot(uint16_t x, uint16_t y, uint16_t color)
{  
        TFT_SetWindow(x, y, x, y);  //设置点的位置
        TFT_WriteData_Color(color);       //画点       
}

使用特权

评论回复
25
hanzhen654|  楼主 | 2017-10-31 11:38 | 只看该作者
给一个区域涂上颜色
void GUI_Box(uint16_t xState, uint16_t yState, uint16_t xEnd, uint16_t yEnd, uint16_t color)
{
        uint16_t temp;


    if((xState > xEnd) || (yState > yEnd))
    {
        return;
    }   
        TFT_SetWindow(xState, yState, xEnd, yEnd);
    xState = xEnd - xState + 1;
        yState = yEnd - yState + 1;


        while(xState--)
        {
                 temp = yState;
                while (temp--)
                 {       
                        TFT_WriteData_Color(color);
                }
        }
}

使用特权

评论回复
26
hanzhen654|  楼主 | 2017-10-31 15:37 | 只看该作者
画一个十字的标记
void GUI_DrowSign(uint16_t x, uint16_t y, uint16_t color)
{
    uint8_t i;

    /* 画点 */
    TFT_SetWindow(x-1, y-1, x+1, y+1);
    for(i=0; i<9; i++)
    {
        TFT_WriteData_Color(color);   
    }

    /* 画竖 */
    TFT_SetWindow(x-4, y, x+4, y);
    for(i=0; i<9; i++)
    {
        TFT_WriteData_Color(color);   
    }

    /* 画横 */
    TFT_SetWindow(x, y-4, x, y+4);
    for(i=0; i<9; i++)
    {
        TFT_WriteData_Color(color);   
    }
}


使用特权

评论回复
27
hanzhen654|  楼主 | 2017-10-31 15:39 | 只看该作者
看门狗初始化
void iwdg_init(u8 prer,u16 rlr)
{
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//使能对寄存器 IWDG_PR 和 IWDG_RLR 的写操作
        IWDG_SetPrescaler(prer);   //设置看门狗分频系数 0-7
           IWDG_SetReload(rlr);                //设置看门狗重装载初值
        IWDG_ReloadCounter();        //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器
        IWDG_Enable();                        //使能 IWDG
}

使用特权

评论回复
28
hanzhen654|  楼主 | 2017-10-31 15:40 | 只看该作者
喂狗
void iwdg_feed()  
{
        IWDG_ReloadCounter();       
}

使用特权

评论回复
29
hanzhen654|  楼主 | 2017-10-31 15:41 | 只看该作者
ESP8266初始化
void esp8266_init(u32 baund)
{
        GPIO_InitTypeDef GPIO_InitStructure;         //声明一个结构体变量,用来初始化GPIO


        USART_InitTypeDef USART_InitStructure;         //串口结构体定义


        NVIC_InitTypeDef NVIC_InitStructure;        //中断结构体定义


        //打开时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);


        /*  配置GPIO的模式和IO口 */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;        //TX        //串口输出PA2
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;                  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;       
        GPIO_Init(GPIOA,&GPIO_InitStructure);                                         /* 初始化串口输入IO */
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;        //RX           //串口输入PA3
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;            //模拟输入
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);                         /* 初始化GPIO */


        //PG7-CH_PD   PG8-GPIO2
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;        //PG6 7 8
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;           //推挽输出
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOG,&GPIO_InitStructure);
        GPIO_SetBits(GPIOG,GPIO_Pin_7|GPIO_Pin_8);       
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;        //PE6
        GPIO_Init(GPIOE,&GPIO_InitStructure);
        GPIO_SetBits(GPIOE,GPIO_Pin_6);                  


        USART_InitStructure.USART_BaudRate = baund;                           //波特率设置为9600        //波特率
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;           //数据长8位
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                        //1位停止位
        USART_InitStructure.USART_Parity = USART_Parity_No;                   //无效验
        USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None; //失能硬件流
        USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;                 //开启发送和接受模式
        USART_Init(USART2, &USART_InitStructure);           /* 初始化USART2 */
//        USART_Cmd(USART2,ENABLE);       
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);  //使能或者失能指定的USART中断 接收中断
        USART_ClearFlag(USART2,USART_FLAG_TC);         //清除USARTx的待处理标志位


        /* 设置NVIC参数 */
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;            //打开USART2的全局中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;         //抢占优先级为0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                  //响应优先级为1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                  //使能
        NVIC_Init(&NVIC_InitStructure);                       
}

使用特权

评论回复
30
hanzhen654|  楼主 | 2017-10-31 15:42 | 只看该作者
串口2中断函数
void USART2_IRQHandler(void)       
{
        static u8 k;
        USART_ClearFlag(USART2,USART_FLAG_TC);
        if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)//检查指定的USART中断发生与否       
        {
                k=USART_ReceiveData(USART2);
                USART_SendData(USART2,k);
                while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);       
        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则