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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4586|回復: 1
打印 上一主題 下一主題
收起左側

STM32F103驅動CCD實現黑白線識別源程序

[復制鏈接]
跳轉到指定樓層
樓主
STM32F103驅動CCD實現黑白線識別,通過上位機顯示灰度值及圖像,二值化處理后完成黑白線識別。
內含TSL1401 CCD資料,上位機軟件,STM32F103源碼


關鍵詞:線性CCD 灰度識別 循跡 圖像處理
注意事項:使用線性CCD對曝光時間的控制顯得尤為重要。

單片機源程序如下:
  1. #include "ccd.h"
  2. #include "adc.h"       
  3. #include "usart.h"
  4. #include "string.h"
  5. u8 ccd_adc[128]={0};
  6. u8 SciBuf[200];  //存儲上傳到上位機的信息
  7. int TIME_us=10; //曝光時間
  8. void Ccd_Init(void)
  9. {
  10. GPIO_InitTypeDef  GPIO_InitStructure;
  11.        
  12. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PA端口時鐘
  13.        
  14. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                 //PA.2 端口配置
  15. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  16. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  17. GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOA.2
  18. GPIO_SetBits(GPIOA,GPIO_Pin_2);                                                 //PA.2 輸出高

  19. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                             //PA.7 端口配置, 推挽輸出
  20. GPIO_Init(GPIOA, &GPIO_InitStructure);                                           //推挽輸出 ,IO口速度為50MHz
  21. GPIO_SetBits(GPIOA,GPIO_Pin_7);                                                  //PA.7        輸出高
  22.        
  23. }


  24. /******************************************************************************
  25. ***
  26. * FUNCTION NAME: void Dly_us(int a) *
  27. * CREATE DATE : 20170707 *
  28. * CREATED BY : XJU *
  29. * FUNCTION : 延時函數,控制曝光時間 *
  30. * MODIFY DATE : NONE *
  31. * INPUT : int *
  32. * OUTPUT : NONE *
  33. * RETURN : NONE *
  34. *******************************************************************************
  35. **/
  36. void Dly_us(int a)
  37. {
  38.    int ii;   
  39.    for(ii=0;ii<a;ii++);      
  40. }

  41. /******************************************************************************
  42. ***
  43. * FUNCTION NAME: RD_TSL(void) *
  44. * CREATE DATE : 20170707 *
  45. * CREATED BY : XJU *
  46. * FUNCTION : 按照時序依次讀取CCD輸出的模擬電壓值 *
  47. * MODIFY DATE : NONE *
  48. * INPUT : void *
  49. * OUTPUT : NONE *
  50. * RETURN : NONE *
  51. *******************************************************************************
  52. **/
  53.   void RD_TSL(void)
  54.         {
  55.                 u8 i=0,tslp=0;
  56.                 TSL_CLK=1;     //CLK引腳設為高電平         
  57.                 TSL_SI=0;
  58.                 Dly_us(TIME_us);
  59.                                
  60.                 TSL_SI=1;
  61.                 TSL_CLK=0;
  62.                 Dly_us(TIME_us);
  63.                                
  64.                 TSL_CLK=1;
  65.                 TSL_SI=0;
  66.                 Dly_us(TIME_us);
  67.                 for(i=0;i<128;i++)
  68.                 {
  69.                         TSL_CLK=0;
  70.                         Dly_us(TIME_us);  //調節曝光時間
  71.                         ccd_adc[tslp]=(u8)((float)Get_Adc(ADC_Channel_1)/4096*255);  //將讀取到的電壓值存入數組中
  72.                         ++tslp;
  73.                         TSL_CLK=1;
  74.                         Dly_us(TIME_us);
  75.                 }  
  76.         }

  77. /******************************************************************************
  78. ***
  79. * FUNCTION NAME: void slove_data(void) *
  80. * CREATE DATE : 20170707 *
  81. * CREATED BY : XJU *
  82. * FUNCTION : 將從CCD中讀取到的信息按照上位機要求的通信協議存入到數組中以待發送 *
  83. * MODIFY DATE : NONE *
  84. * INPUT : void *
  85. * OUTPUT : NONE *
  86. * RETURN : NONE *
  87. *******************************************************************************
  88. **/
  89.          void slove_data(void)
  90.          {
  91.                 int i;
  92.                 RD_TSL();
  93.     SciBuf[0] = 0;
  94.           SciBuf[1] = 132;
  95.     SciBuf[2] = 0;
  96.     SciBuf[3] = 0;
  97.           SciBuf[4] = 0;
  98.     SciBuf[5] = 0;
  99.                 for(i=0;i<128;i++)
  100.                         SciBuf[6+i] = ccd_adc[i];
  101.          }
  102. /******************************************************************************
  103. ***
  104. * FUNCTION NAME: void sendToPc(void) *
  105. * CREATE DATE : 20170707 *
  106. * CREATED BY : XJU *
  107. * FUNCTION : 將待發送的信息通過串口發送至上位機*
  108. * MODIFY DATE : NONE *
  109. * INPUT : void *
  110. * OUTPUT : NONE *
  111. * RETURN : NONE *
  112. *******************************************************************************
  113. **/                   
  114.          void sendToPc(void)
  115.          {
  116.                  int i;
  117.                  slove_data();
  118.                  printf("*");
  119.                  printf("LD");
  120.                  for(i=2;i<134;i++)
  121.                  {
  122.                                 printf("%c",binToHex_high(SciBuf[i])); //以字符形式發送高4位對應的16進制
  123.                                 printf("%c",binToHex_low(SciBuf[i]));  //以字符形式發送低?位對應的16進制
  124.                  }
  125.                  printf("00");   //通信協議要求
  126.                  printf("#");    //通信協議要求
  127.          }
  128.          
  129. /******************************************************************************
  130. ***
  131. * FUNCTION NAME: binToHex_low(u8 num) *
  132. * CREATE DATE : 20170707 *
  133. * CREATED BY : XJU *
  134. * FUNCTION : 將二進制低8位轉換16進制*
  135. * MODIFY DATE : NONE *
  136. * INPUT : u8 *
  137. * OUTPUT : NONE *
  138. * RETURN : char *
  139. *******************************************************************************
  140. **/                   
  141. char binToHex_low(u8 num)
  142. {u8 low_four;
  143.          low_four=num&0x0f;
  144.          if(low_four==0)
  145.                  return('0');
  146.          else if(low_four==1)
  147.                   return('1');
  148.          else if(low_four==2)
  149.                   return('2');
  150.          else if(low_four==3)
  151.                   return('3');
  152.          else if(low_four==4)
  153.                   return('4');
  154.          else if(low_four==5)
  155.                   return('5');
  156.          else if(low_four==6)
  157.                   return('6');
  158.          else if(low_four==7)
  159.                   return('7');
  160.          else if(low_four==8)
  161.                   return('8');
  162.          else if(low_four==9)
  163.                   return('9');
  164.          else if(low_four==10)
  165.                   return('A');
  166.          else if(low_four==11)
  167.                   return('B');
  168.          else if(low_four==12)
  169.                   return('C');
  170.          else if(low_four==13)
  171.                   return('D');
  172.          else if(low_four==14)
  173.                   return('E');
  174.          else if(low_four==15)
  175.                   return('F');
  176. }

  177. /******************************************************************************
  178. ***
  179. * FUNCTION NAME: binToHex_low(u8 num) *
  180. * CREATE DATE : 20170707 *
  181. * CREATED BY : XJU *
  182. * FUNCTION : 將二進制高8位轉換16進制*
  183. * MODIFY DATE : NONE *
  184. * INPUT : u8 *
  185. * OUTPUT : NONE *
  186. * RETURN : char *
  187. *******************************************************************************
  188. **/                                                  
  189. char binToHex_high(u8 num)
  190. {
  191.                 u8 high_four;
  192.                 high_four=(num>>4)&0x0f;
  193.                 if(high_four==0)
  194.                         return('0');
  195.                                 else if(high_four==1)
  196.                                         return('1');
  197.                                         else if(high_four==2)
  198.                                                         return('2');
  199.                                                         else if(high_four==3)
  200.                                                                 return('3');
  201.                                                                 else if(high_four==4)
  202.                                                                 return('4');
  203.                                                                         else if(high_four==5)
  204.                                                                         return('5');
  205.                                                                                 else if(high_four==6)
  206.                                                                                         return('6');
  207.                                                                                         else if(high_four==7)
  208.                                                                                         return('7');
  209.                                                                                                 else if(high_four==8)
  210.                                                                                                 return('8');
  211.                                                                                                         else if(high_four==9)
  212.                                                                                                                 return('9');
  213.                                                                                                                 else if(high_four==10)
  214.                                                                                                                         return('A');
  215.                                                                                                                         else if(high_four==11)
  216.                                                                                                                                 return('B');
  217.                                                                                                                                 else if(high_four==12)
  218.                                                                                                                                         return('C');
  219.                                                                                                                                         else if(high_four==13)
  220.                                                                                                                                                 return('D');
  221.                                                                                                                                                 else if(high_four==14)
  222.                                                                                                                                                         return('E');
  223.                                                                                                                                                         else if(high_four==15)
  224.                                                                                                                                                                 return('F');
  225.                 }

  226.                                                                  
  227.          
  228.        
復制代碼
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "adc.h"
  5. #include "ccd.h"
  6. /******************************************************************************
  7. ***
  8. * PROJECT CODE : 線性CCD測試 *
  9. * CREATE DATE : 20170706 *
  10. * CREATED BY : XJU *
  11. * FUNCTION : 實現線性CCD同上位機通信 *
  12. * MODIFY DATE : NONE *
  13. * DOCUMENT : NONE *
  14. * OTHERS : 具體硬件連接說明在該工程根目錄"readme.txt"中 *
  15. *******************************************************************************
  16. **/
  17. int main(void)
  18. {         
  19.                 delay_init();                     //延時函數初始化       
  20.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設置中斷優先級分組2
  21.                 uart_init(9600);         //串口初始化為9600
  22.                 Adc_Init();  //ADC初始化
  23.                 Ccd_Init();   //CCD初始化
  24.                 TIME_us=1;    //設置曝光時間
  25.                 while(1)
  26.                 {  
  27.                         sendToPc();   //發送信息至上位機
  28.                 }
  29.         }

復制代碼


所有資料51hei提供下載:
線性CCD.7z (9.83 MB, 下載次數: 62)
STM32F103驅動TSL1401線性CCD模塊.7z (6.25 MB, 下載次數: 60)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1136191 發表于 2024-11-13 20:35 | 只看該作者
很好的代碼實用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 我想看国产一级毛片 | 日韩中文字幕一区二区 | 九九热精品视频在线观看 | 精品av| 国产一区二区久久久 | 福利av在线| 欧美特级黄色 | 亚洲精品一 | 亚洲成人免费视频在线观看 | 日韩一区二区三区视频 | 亚洲日本成人 | 日韩毛片在线观看 | 中文在线www| 国产精品久久久久免费 | 久久精品一级 | 伊人狼人影院 | 欧美日韩在线观看一区二区三区 | 日韩在线91 | 国产精品电影在线观看 | 免费爱爱视频 | 成人精品鲁一区一区二区 | 99免费视频| 成人h动漫亚洲一区二区 | 欧美群妇大交群中文字幕 | 午夜久久久久久久久久一区二区 | 亚洲a视频 | 欧美日韩久久精品 | 欧美激情国产日韩精品一区18 | 日日干夜夜操天天操 | 久久人人爽人人爽人人片av免费 | 91天堂| 精品少妇一区二区三区在线播放 | 成人激情免费视频 | 一级在线观看 | 极品在线 | 久久亚洲91 | 新疆少妇videos高潮 | jlzzjlzz欧美大全 | 午夜精品久久久久久久久久久久久 | 免费污视频 | 精品久久久久久亚洲综合网 |