久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11867|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

STM32評估板與迪文屏交互,沒幾行代碼就實現(xiàn)一些簡單功能,也沒那么難!

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:379412 發(fā)表于 2018-8-7 10:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用STM32評估板與迪文屏做交互,也沒那么難!沒幾行C代碼就可以實現(xiàn)一些簡單的功能。跟大家分享下,詳細視頻和說明請下載附件。
一、評估板使用說明
1、功能
  
序號
  
功能
描述
1
MCU
STM32F103RCT6
2
I/O
11路I/O


物理按鍵1:屏幕開關(guān) (KEY1)


物理按鍵2&3:溫度調(diào)節(jié)(+(KEY2)/-(KEY3))


物理按鍵4:音樂播放和停止(KEY4)


物理按鍵5&6(音量+(KEY5)/-(KEY6))




5路LED燈(5路)
3
LED
工作指示燈
4
按鍵
復(fù)位按鍵
5
電源
5V電源輸入

注:可實現(xiàn)的功能:
a.通過屏上的圖標(biāo)來控制5路LED燈的狀態(tài)(LED燈的開和關(guān)來表示狀態(tài)),上電5路LED熄滅狀態(tài)。
b. 通過評估板上的物理按鍵1,來控制亮屏和息屏,上電狀態(tài)為亮屏狀態(tài)。
c. 通過評估板上的物理按鍵2&3,來調(diào)節(jié)屏幕上的溫度指數(shù),上電初始值          25度,以1為步長遞增遞減,最小0,最大255。
d. 通過評估板上的物理按鍵4,來控制音樂的播放和停止,上電音樂不播放。
e. 通過評估板上的物理按鍵5&6來調(diào)節(jié)音量的大小,上電音量值50,以10為步長遞增遞減,最小0,最大250。

2、需使用的工具
a.硬件:正點原子Mini STM32開發(fā)板(MCU為STM32F103RCT6,串口TTL電平)+面包板手工焊接5路LED和6路按鍵擴展。
b. 軟件:STM32CubeMX+KEIL MDK5。
c.原理圖:詳見“硬件原理圖”文件夾。
d.程序:工程文件在DGUS II工程文件夾中,下載DWIN_SET導(dǎo)入屏中即可。 STM32程序在“MCU_STM32F103RCT6程序”文件夾。
評估板硬件和軟件部分詳細介紹

1、硬件原理圖:詳見“硬件原理圖”文件夾
(1)硬件接口定義:
  
功能
  
對應(yīng)STM32F103的IO

KEY1(屏幕亮度開關(guān))
PB10

KEY2(溫度+)
PB11

KEY3(溫度-)
PB12

KEY4(播放/停止)
PB13

KEY5(音量+)
PB14

KEY6(音量-)
PB15

LED1
PC10

LED2
PC3

LED3
PC2

LED4
PC0

LED5
PC13

TXD2(觸摸屏端子顯示)
PA10

RXD2(觸摸屏端子顯示)
PA9



(2)硬件原理圖:



1STM32F103原理圖


2LEDKEY原理圖
2、軟件程序
界面工程文件在“DGUS_II工程”文件夾中。STM32程序在“MCU_STM32F103RCT6程序”文件夾中。

(1)界面工程
LED1圖標(biāo):0X1000
LED1按鍵:0X1200
LED2圖標(biāo):0X1001
LED2按鍵:0X1201
LED3圖標(biāo):0X1002
LED3按鍵:0X1202
LED4圖標(biāo):0X1003
LED4按鍵:0X1203
LED5圖標(biāo):0X1004
LED5按鍵:0X1204
音量顯示框地址:0X1210
溫度顯示框地址:0X1110

(2)MCU程序
1).main():硬件初始化,觸摸屏初始化,按鍵掃描,接收觸摸屏數(shù)據(jù)處理
int main(void)
{
uint8_t i;
HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  while (1)
  {      
         HAL_UART_Receive_IT(&huart1,&usart1_data,1);
         if(UP_POWER_FLAG== 0)//上電初始化觸摸屏
         {
              UP_POWER_FLAG= 1;
              HMI_SEND_BUF[0]= TEMP;
              PLC_Data_Wr2HMI(0X1110,0,1);
              delay_ms(100);
              HMI_SEND_BUF[0]= VOLUME;
              PLC_Data_Wr2HMI(0X1210,0,1);//òôá¿ÏÔê¾
              delay_ms(100);
              WRITE_HMI(0X00A1,VOLUME,0x00,0,0,2);//ĬèÏòôá¿50
              delay_ms(100);
              for(i=0;i<5;i++)
              {
                   HMI_SEND_BUF= 0;
              }
              for(i=0;i<20;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              HMI_HANDLEFLAG= 0;
         }
         if(PLAY ==1)//監(jiān)測是否播放完音樂
         {
              READ_HMI(0x00a1,1);
              delay_ms(100);
              if(HMI_HANDLEFLAG)
              {
                   if(usart1_rxBuf[8]== 0)
                   {
                       PLAY= 0;
                       for(i=0;i<50;i++)
                       {
                            usart1_rxBuf= 0x00;
                       }
                       usart1_counter= 0;
                   }
              }
         }
         SCAN_KEY(0);//按鍵掃描
         if(HMI_HANDLEFLAG)//接收觸摸屏數(shù)據(jù)處理
         {
              HMI_HANDLEFLAG= 0;
              CLOSE_OPEN_IO(0x01);
              CLOSE_OPEN_IO(0x02);
              CLOSE_OPEN_IO(0x03);
              CLOSE_OPEN_IO(0x04);
              CLOSE_OPEN_IO(0x05);
              for(i=0;i<50;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              usart1_counter= 0;
         }            
}   
2). PLC_Data_Wr2HMI ():數(shù)據(jù)寫入觸摸屏變量寄存器
void PLC_Data_Wr2HMI(uint16_t HMI_start_addr,uint16_tPLC_return_data_start_addr,uint8_t len)
{
     uint8_t i;
     usart1_txBuf[0]=0x5a;
     usart1_txBuf[1]=0xa5;
     usart1_txBuf[2]=len*2+3;
     usart1_txBuf[3]=0x82;
     usart1_txBuf[4]=((uint8_t)(HMI_start_addr>>8))&0XFF;
     usart1_txBuf[5]=(uint8_t)(HMI_start_addr&0XFF);
     for(i=0;i<len;i++)
     {
         usart1_txBuf[i*2+6]=((HMI_SEND_BUF[i+PLC_return_data_start_addr]>>8)&0xff);
         usart1_txBuf[i*2+7]=(HMI_SEND_BUF[i+PLC_return_data_start_addr]&0xff);
     }
     HAL_UART_Transmit(&huart1,usart1_txBuf, len*2+6, 10);//串口發(fā)送
}
3). WRITE_HMI ():數(shù)據(jù)寫入觸摸屏寄存器
void WRITE_HMI(uint16_t addr,uint8_t data1,uint8_t data2,uint8_tdata3,uint8_t data4,uint8_t len)
{
         usart1_txBuf[0]=0x5a;
         usart1_txBuf[1]=0xa5;
         usart1_txBuf[2]=len*2+3;
         usart1_txBuf[3]=0x82;
         usart1_txBuf[4]=(uint8_t)((addr>>8)&0xff);
         usart1_txBuf[5]=(uint8_t)(addr&0xff);
         usart1_txBuf[6]=data1;
         usart1_txBuf[7]=data2;
         usart1_txBuf[8]=data3;
         usart1_txBuf[9]=data4;
         HAL_UART_Transmit(&huart1,usart1_txBuf, len*2+6 , 20);
}
4). READ_HMI ():讀觸摸屏寄存器數(shù)據(jù)
void READ_HMI(uint16_t addr,uint8_t num)
{
         usart1_txBuf[0]=0x5a;
         usart1_txBuf[1]=0xa5;
         usart1_txBuf[2]=0x04;
         usart1_txBuf[3]=0x83;
         usart1_txBuf[4]=(uint8_t)((addr>>8)&0xff);
         usart1_txBuf[5]=(uint8_t)(addr&0xff);
         usart1_txBuf[6]=num;

         HAL_UART_Transmit(&huart1,usart1_txBuf, 7 , 20);
}
5).CLOSE_OPEN_IO():開關(guān)LED
void CLOSE_OPEN_IO(uint8_t hmi_key_value)
{
     uint8_t i;
     if(usart1_rxBuf[7] ==0x00&&usart1_rxBuf[8] == hmi_key_value)//LED1
     {
         if(LED_FLAG[hmi_key_value-1]== 0)
         {
           if(hmi_key_value == 0x01)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10, GPIO_PIN_RESET);//開LED1
              }
              if(hmi_key_value== 0x02)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3, GPIO_PIN_RESET); //開LED2
              }
              if(hmi_key_value== 0x03)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2, GPIO_PIN_RESET); //開LED3
              }
              if(hmi_key_value== 0x04)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0, GPIO_PIN_RESET); //開LED4
              }
              if(hmi_key_value== 0x05)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13, GPIO_PIN_RESET); //開LED5
              }
              LED_FLAG[hmi_key_value-1]= 1;
         }
         elseif(LED_FLAG[hmi_key_value-1] == 1)
         {
           if(hmi_key_value == 0x01)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10, GPIO_PIN_SET);//關(guān)LED1
              }
              if(hmi_key_value== 0x02)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3, GPIO_PIN_SET); //關(guān)LED2
              }
              if(hmi_key_value== 0x03)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2, GPIO_PIN_SET); //關(guān)LED3
              }
              if(hmi_key_value== 0x04)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0, GPIO_PIN_SET); //關(guān)LED4
              }
              if(hmi_key_value== 0x05)
              {   
                   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13, GPIO_PIN_SET); //關(guān)LED5
              }
              LED_FLAG[hmi_key_value-1]= 0;
         }
         for(i=0;i<9;i++)
         {
              usart1_rxBuf= 0xff;
         }
         for(i=0;i<5;i++)
         {
              HMI_SEND_BUF= LED_FLAG;
         }
         PLC_Data_Wr2HMI(0X1000,0,5);//發(fā)送LED狀態(tài)到觸摸屏,改變LED顯示圖標(biāo);
         delay_ms(50);
     }
}
6). CLOSE_OPEN_IO ():開關(guān)LED
void SCAN_KEY(uint8_t io_key_value)  
{
     uint8_t i;
         if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_10)==GPIO_PIN_RESET)//KEY1按下
         {
              delay_ms(150);//去抖
              if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_10)==GPIO_PIN_RESET)
              {
                   if(HMI_FLAG[0]== 0)
                   {
                       WRITE_HMI(0X82,0x00,0x00,0,0,1);//熄滅屏幕
                       HMI_FLAG[0]= 1;
                   }elseif(HMI_FLAG[0] == 1)
                   {
                       WRITE_HMI(0X82,0X64,0x00,0,0,1);//點亮屏幕
                       HMI_FLAG[0]= 0;
                   }
              }
              for(i=0;i<50;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              usart1_counter= 0;
         }
         if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11)==GPIO_PIN_RESET)//KEY2按下
         {
              delay_ms(150);//去抖
              if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11)==GPIO_PIN_RESET)
              {
                   TEMP +=1;
                   HMI_SEND_BUF[0]= TEMP;
                   PLC_Data_Wr2HMI(0X1110,0,1);//溫度+
              }
              for(i=0;i<50;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              usart1_counter= 0;
         }
         if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==GPIO_PIN_RESET)//KEY3按下
         {
              delay_ms(150);//去抖
              if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==GPIO_PIN_RESET)
              {
                   TEMP -=1;
                   HMI_SEND_BUF[0]= TEMP;
                   PLC_Data_Wr2HMI(0X1110,0,1);//溫度-
              }
              for(i=0;i<50;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              usart1_counter= 0;
         }
         if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13)==GPIO_PIN_RESET)//KEY4按下
         {
              delay_ms(150);//去抖
              if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13)==GPIO_PIN_RESET)
              {
                   if(PLAY== 0)
                   {            
                       WRITE_HMI(0X00A0,0X00,0x0E,0,0,1);
                       PLAY=1;//播放
                   }elseif(PLAY == 1)
                   {                           
                       WRITE_HMI(0X00A0,0X00,0x00,0,0,1);
                       PLAY=0;//停止
                   }
              }
              for(i=0;i<50;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              usart1_counter= 0;
          }
         if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14)==GPIO_PIN_RESET)//KEY5按
         {
              delay_ms(150);//去抖
              if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14)==GPIO_PIN_RESET)
              {
                   if(VOLUME<250)
                   {
                       VOLUME+= 10;
                       WRITE_HMI(0X00A1,VOLUME,0x00,0,0,2);//音量+
                       delay_ms(50);
                       HMI_SEND_BUF[0]= VOLUME;
                       PLC_Data_Wr2HMI(0X1210,0,1);//寫當(dāng)前音量到觸摸屏
                       delay_ms(50);
                   }
              }
              for(i=0;i<50;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              usart1_counter= 0;
         }
         if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==GPIO_PIN_RESET)//KEY6按下
         {
              delay_ms(150);//去抖
              if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==GPIO_PIN_RESET)
              {
                   if(VOLUME>= 10)
                   {
                       VOLUME-= 10;
                       WRITE_HMI(0X00A1,VOLUME,0x00,0,0,2);//音量-
                       delay_ms(50);
                       HMI_SEND_BUF[0]= VOLUME;
                       PLC_Data_Wr2HMI(0X1210,0,1);//寫當(dāng)前音量到觸摸屏
                       delay_ms(50);
                   }            
              }
              for(i=0;i<50;i++)
              {
                   usart1_rxBuf= 0x00;
              }
              usart1_counter= 0;
         }

}


7). delay_ms ():延時函數(shù),不精確慎用
void delay_ms(uint16_t nms)
{
     uint16_t i,j;
     for(i=0;i<nms;i++)
     {
         for(j=0;j<10000;j++)
         {
              ;
         }
     }
}
8). USART1_IRQHandler ():數(shù)據(jù)接收中斷
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart1);
     if(usart1_rxBuf[0] ==0x5a&&usart1_rxBuf[1] == 0xa5&&usart1_rxBuf[2])
     {
         if(usart1_counter>= 3&&usart1_counter<(usart1_rxBuf[2]+3))
         {
              usart1_rxBuf[usart1_counter]= usart1_data;
              usart1_counter++;
         }
         if(usart1_counter>= 3&&usart1_counter>=(usart1_rxBuf[2]+3))
         {
              HMI_HANDLEFLAG= 1;//接收完成標(biāo)志
         }
     }
     if(usart1_counter <3)
     {   
         usart1_rxBuf[usart1_counter]= usart1_data;   
         usart1_counter++;
     }
     if(HMI_HANDLEFLAG)
     {
         usart1_counter =0;
     }
     HAL_UART_Receive_IT(&huart1,&usart1_data,1);//開接收中斷
}



全部資料51hei下載地址:
STM32的評估板與DGUSII屏交互C代碼程序.rar (15.82 MB, 下載次數(shù): 201)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:387717 發(fā)表于 2018-8-19 15:41 | 只看該作者
您好,能給我郵箱發(fā)一份嗎,302889679@qq.com
回復(fù)

使用道具 舉報

板凳
ID:105221 發(fā)表于 2018-9-4 16:58 | 只看該作者
不錯,學(xué)習(xí)下!
回復(fù)

使用道具 舉報

地板
ID:163795 發(fā)表于 2018-11-3 16:08 | 只看該作者
我也試試
回復(fù)

使用道具 舉報

5#
ID:163795 發(fā)表于 2018-11-4 14:32 | 只看該作者
學(xué)習(xí)了,贊贊贊
回復(fù)

使用道具 舉報

6#
ID:258676 發(fā)表于 2019-2-1 09:12 | 只看該作者
學(xué)習(xí)了 !!!
回復(fù)

使用道具 舉報

7#
ID:497860 發(fā)表于 2019-3-26 09:21 | 只看該作者
終于在這個論壇找到點好東西,讓我對這個論壇的直觀感受無限提升,謝謝你的分享!
回復(fù)

使用道具 舉報

8#
ID:516782 發(fā)表于 2019-4-28 20:37 | 只看該作者
現(xiàn)在想找點免費的干貨也不容易了,謝謝分享!
回復(fù)

使用道具 舉報

9#
ID:74044 發(fā)表于 2019-5-8 15:53 | 只看該作者
謝謝分享!!!
回復(fù)

使用道具 舉報

10#
ID:74044 發(fā)表于 2019-5-8 15:53 | 只看該作者
謝謝分享!!!
回復(fù)

使用道具 舉報

11#
ID:544352 發(fā)表于 2019-6-15 19:39 來自手機 | 只看該作者
本帖最后由 jzdcff 于 2019-6-17 17:40 編輯

多謝分享,入門很合適,再次感謝
回復(fù)

使用道具 舉報

12#
ID:150763 發(fā)表于 2019-11-18 09:40 | 只看該作者
謝謝你的分享
回復(fù)

使用道具 舉報

13#
ID:822447 發(fā)表于 2020-11-25 19:44 | 只看該作者
學(xué)習(xí)一下,樓主給力!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲久草 | 色吧色综合 | 国产精品免费在线 | 国产精品日韩在线观看 | 久久久久久中文字幕 | 久久爱一区 | 久久国产传媒 | 久久这里只有精品首页 | 久久一区二区三区电影 | 久久亚洲精品国产精品紫薇 | 亚洲人精品 | 精品日韩一区二区 | 国产免费福利小视频 | 视频在线一区二区 | av中文在线 | 欧美日韩在线一区二区 | 国产三区视频在线观看 | 日韩在线免费播放 | 成人国产精品久久久 | 成人精品在线观看 | 香蕉视频一区二区 | 国产成人99久久亚洲综合精品 | 国产精品国色综合久久 | 日韩在线精品视频 | 亚洲人成在线播放 | 亚洲一区二区三区观看 | 亚洲欧美日韩激情 | 国产精品高潮呻吟久久av黑人 | 精产国产伦理一二三区 | 日韩视频在线观看一区二区 | 色婷婷综合久久久中字幕精品久久 | 久久精品中文字幕 | 久草青青草 | 国产精品国产a级 | 午夜久久久久 | 先锋资源网站 | 成人免费网站视频 | 欧美成人a∨高清免费观看 色999日韩 | www国产成人 | 国产伦精品一区二区三区视频金莲 | jizz在线免费观看 |