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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

mega16智能循跡小車制作資料 含PCB avr源碼 成品圖片

[復制鏈接]
跳轉到指定樓層
樓主

給51黑電子論壇的朋友們分享一個用mega16單片機做的智能循跡小車制作資料,下面是做成后的圖片,經過測試一切ok。

這個循跡小車各個電路模塊:


mega16單片機智能循跡小車的pcb文件




mega16單片機智能循跡小車制作資料下載:
智能循跡小車全部資料.rar (2.23 MB, 下載次數: 48)


下面是部分源碼預覽:

  1. /******************************************************************************
  2. 名稱 :尋跡控制
  3. cpu  : mega16
  4. 晶振 :內部8M
  5. 作者 :漂洋過海
  6. ******************************************************************************/

  7. #include <iom16v.h>
  8. #include <macros.h>
  9. #define uchar unsigned char
  10. #define uint  unsigned int

  11. /******************************************************************************/
  12. /********************************宏定義***************************************/
  13. /******************************************************************************/
  14. #define H595DDR_OUT    DDRC |=BIT(0)|BIT(1)|BIT(2)|BIT(3)|BIT(4)|BIT(5)|BIT(6)
  15. #define H595CTL       PORTC    //高低高平
  16. #define H595_SER_H    H595CTL |= BIT(PC6) //數據              
  17. #define H595_SER_L    H595CTL &= ~BIT(PC6)                                          
  18. #define H595_RCK_H    H595CTL |= BIT(PC5) //副寄存器時鐘                        
  19. #define H595_RCK_L    H595CTL &= ~BIT(PC5)
  20. #define H595_SCK_H    H595CTL |= BIT(PC4) //主時鐘                        
  21. #define H595_SCK_L    H595CTL &= ~BIT(PC4)

  22. #define H595DDR_OUT1    DDRD |=BIT(0)|BIT(1)|BIT(2)
  23. #define H595CTL1       PORTD    //高低高平
  24. #define H595_SER1_H    H595CTL1 |= BIT(PD0) //數據              
  25. #define H595_SER1_L    H595CTL1 &= ~BIT(PD0)                                          
  26. #define H595_RCK1_H    H595CTL1 |= BIT(PD1) //副寄存器時鐘                        
  27. #define H595_RCK1_L    H595CTL1 &= ~BIT(PD1)
  28. #define H595_SCK1_H    H595CTL1 |= BIT(PD2) //主時鐘                        
  29. #define H595_SCK1_L    H595CTL1 &= ~BIT(PD2)


  30. #define SEG_1_H       H595CTL |= BIT(PC0)//數碼管四個位選端
  31. #define SEG_1_L       H595CTL &= ~BIT(PC0)
  32. #define SEG_2_H       H595CTL |= BIT(PC1)
  33. #define SEG_2_L       H595CTL &= ~BIT(PC1)
  34. #define SEG_3_H       H595CTL |= BIT(PC2)
  35. #define SEG_3_L       H595CTL &= ~BIT(PC2)
  36. #define SEG_4_H       H595CTL |= BIT(PC3)
  37. #define SEG_4_L       H595CTL &= ~BIT(PC3)

  38. #define BACK1_ON           PORTB |= BIT(PD3)     //前后//轉向檔瓶刂?               
  39. #define BACK1_OFF          PORTB &= ~BIT(PD3)
  40. #define BACK2_ON           PORTB |= BIT(PD4)                          
  41. #define BACK2_OFF          PORTB &= ~BIT(PD4)
  42. /******************************************************************************/
  43. /**********************************end*****************************************/
  44. /******************************************************************************/


  45. uint count,ppp,count1,voltage;
  46. uchar angle_flag1,angle_flag2=0;
  47. uchar anglel,angleh;
  48. uint i=0;
  49. uchar sudu=0x40;
  50. uchar AD_num1,AD_num=0;
  51. static uchar black_flag;
  52. static uchar online;
  53. uint AD_get[8]={0,0,0,0,0,0,0,0};
  54. uint AD_min[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
  55. uint AD_max[8]={0,0,0,0,0,0,0,0};
  56. uint AD_read[8]={0,0,0,0,0,0,0,0};
  57. static uchar weiseg[4] = {0xfe,0xfd,0xfb,0xf7};
  58. static uchar state[]={4,12,8,10,26,58,18,48,32,33,1,65,64,128};
  59. static uchar shushow[11]={   
  60.                            0xFA,/*0*/
  61.                            0x60,/*1*/
  62.                            0xDC,/*2*/
  63.                            0xF4,/*3*/
  64.                            0x66,/*4*/
  65.                            0xB6,/*5*/
  66.                            0xBE,/*6*/
  67.                            0xE0,/*7*/
  68.                            0xFE,/*8*/
  69.                            0xF6,/*9*/
  70.                            0x00

  71.                           };
  72. static uchar taple[] = {
  73.                           0xff,
  74.                                                   0xe7,
  75.                                                   0xc3,
  76.                                                   0x81,
  77.                                                   0x00,
  78.                                                   0x18,
  79.                                                   0x3c,
  80.                                                   0x7e,
  81.                                                   0xff,
  82.                                                   0xaa,
  83.                                                   0x55
  84.                                            };
  85. static uint  smg[11]  = {
  86.                           1,
  87.                           12,
  88.                                                   123,
  89.                                                   1234,
  90.                                                   2345,
  91.                                                   3456,
  92.                                                   4567,
  93.                                                   5678,
  94.                                                   6789,
  95.                                                   9123,
  96.                                                   3210        
  97.                                             };
  98. void AD_control();
  99. void angle_control();
  100. void set_angle(uchar agh,uchar agl);
  101. void display(uint shuzhi);
  102. void delay1(int k) ;
  103. void set595(uchar s2);
  104. void led_line(uchar s2);
  105. /*******************************************************************************/
  106. //////////////////////////////中斷初始化函數/////////////////////////////////////
  107. /*******************************************************************************/        
  108. /******************************************************************************

  109.                            端口初始化函數

  110. ******************************************************************************/                                
  111. void port_init(void)
  112. {
  113.     DDRA  = 0x00;
  114.     PORTB = 0x00;
  115.     DDRB  = 0xff;
  116.     PORTC = 0x0F;
  117.     DDRC  = 0x7F;
  118.     PORTD = 0x00;
  119.     DDRD  = 0xff;
  120.     H595DDR_OUT ;
  121.     H595DDR_OUT1;
  122. }
  123. /******************************************************************************

  124.                              AD初始化函數

  125. ******************************************************************************/
  126. void adc_init(void)
  127. {
  128. ADCSRA        = 0x00;        //禁止AD轉換
  129. ADMUX        = 0x60;
  130. SFIOR |= 0x00;
  131. ACSR        = 0x80; //禁止模擬比較器
  132. ADCSRA        = 0xEE;
  133. }


  134. /**********************定時T1初始化******************************

  135.   模式:8位相位修正PWM模式
  136.   舵角控制: OCR1AL=0XCA時,左最大,0XD0時,中間位置,0XD7時右轉最大
  137.   系統時鐘:內部8MHZ,經256分頻得61.275HZPWM頻率
  138.   
  139. ****************************************************************/

  140. //定時T1初始化
  141. void timer1_init(void)
  142. {
  143. TCCR1B = 0x00;//停止定時器
  144. TIMSK |= 0x18;//中斷允許
  145. TCNT1H = 0x00;
  146. TCNT1L = 0x00;//初始值
  147. OCR1AH = 0x00;
  148. OCR1AL = 0xC9;//匹配A值(C8-D0-DA)
  149. OCR1BH = 0x00;
  150. OCR1BL = 0x09;//匹配B值
  151. TCCR1A = 0xf1;
  152. // TCCR1B = 0x04;//啟動定時器
  153. TCCR1B = 0x04;//啟動定時器
  154. }

  155. /******************************************************************************

  156.                              串口初始化函數

  157. ******************************************************************************/
  158. void uart0_init(void)
  159. {
  160. UCSRB = 0x00; //disable while setting baud rate
  161. UCSRA = 0x00;
  162. UCSRC = BIT(URSEL) | 0x06;
  163. UBRRL = 0x67;
  164. UBRRH = 0x00;//set baud rate hi
  165. UCSRB = 0x98;
  166. }
  167. /**********************************END****************************************/



  168. /*****************************************************************************/
  169. ///////////////////////////////中斷處理函數////////////////////////////////////
  170. /*****************************************************************************/



  171. void uart0_tx_isr( char x)
  172. {
  173.   while(!(UCSRA&0x20));
  174.   UDR=x;
  175. }
  176. unsigned int adc_calc(void)
  177. {
  178. //計算實際電壓
  179. unsigned long value=0;
  180. value = ADCL>>6;                 //首先讀低位
  181. value|=(int)ADCH << 2; //然后讀高位
  182. voltage = value;
  183. return voltage;
  184. }
  185. /*************************************************
  186.        中斷接受,同時發送接受到的內容
  187. **************************************************/
  188. #pragma interrupt_handler uart0_rx_isr:12
  189. void uart0_rx_isr(void)
  190. {
  191.   unsigned char x;
  192.   CLI();
  193.   x=UDR;
  194.   uart0_tx_isr(x);
  195.   SEI();
  196. }

  197. #pragma interrupt_handler adc_isr:15
  198. void adc_isr(void)//轉換完成后中斷處理
  199. {
  200.    uchar back_flag;
  201.    AD_num++;
  202.    ADMUX++;
  203.    if(AD_num>7)
  204.     {
  205.       AD_num = 0;
  206.           ADMUX        = 0x60;
  207.     }
  208.    voltage=adc_calc();
  209.    AD_get[AD_num1]=voltage;

  210. /*********************************AD轉換值處理*****************************************/

  211. /*  AD_min[AD_num1]=(AD_get[AD_num1]<AD_min[AD_num1]) ? AD_min[AD_num1]:AD_get[AD_num1];
  212.    AD_max[AD_num1]=(AD_get[AD_num1]>AD_max[AD_num1]) ? AD_max[AD_num1]:AD_get[AD_num1];
  213.    AD_read[AD_num1]= (AD_min[AD_num1]+ AD_max[AD_num1])*3/4 ;
  214.    if(AD_get[AD_num1]>AD_read[AD_num1])
  215.     {
  216.          back_flag|=BIT(i);
  217.      black_flag=back_flag;  
  218.         } */
  219. /********************************此部分有待證實*****************************************/
  220.    AD_num1++;
  221.    if(AD_num1>7)
  222.    AD_num1=0;
  223. }
  224. /**************************************************/
  225. /////////////////定時器T1匹配中斷A服務程序/////////
  226. /**************************************************/
  227. #pragma interrupt_handler timer1_compa_isr:7
  228. void timer1_compa_isr(void)
  229. {
  230. CLI();
  231. if(angle_flag1==1)
  232.   {
  233.     angle_flag1=0;
  234.     OCR1AH = angleh;
  235.     OCR1AL = anglel;
  236.   }
  237.   SEI();
  238. }
  239. //定時器T1匹配中斷B服務程序
  240. #pragma interrupt_handler timer1_compb_isr:8
  241. void timer1_compb_isr(void)
  242. {
  243. CLI();
  244. if(angle_flag2==1)
  245.   {
  246.     angle_flag2=0;
  247.     OCR1BH = 0x00;
  248.     OCR1BL = sudu;
  249.   }
  250.   SEI();
  251. }


  252. /******************************************************************************/
  253. ///////////////////////////time delay funtion///////////////////////////////////
  254. /******************************************************************************/


  255. void delay1(int k)   //延時
  256. {
  257.      int i;           
  258.      for(i=0;i<k;i++);
  259. }
  260.          


  261. /******************************************************************************/
  262. /*****************************595掃描流水燈函數********************************/
  263. /******************************************************************************/         
  264. void set595(uchar s2)
  265.   {
  266.         uchar mid,j = 0;
  267.         CLI();
  268.         for (j=0;j<8;j++)
  269.     {
  270.           mid=s2&0x01;   
  271.           H595_SCK_L ;
  272.           if (mid == 0)
  273.               H595_SER_L ;
  274.           else
  275.               H595_SER_H;
  276.               NOP();
  277.               H595_SCK_H;
  278.           NOP();
  279.               s2=s2>>1;
  280.          }
  281.          H595_RCK_L ;
  282.      NOP();
  283.          H595_RCK_H;
  284.          SEI();
  285.         
  286.   }
  287.         
  288. void led_line(uchar s2)
  289.   {
  290.          uchar mid,j=0;
  291.          CLI();
  292.          for (j=0;j<8;j++)
  293.      {
  294.            mid=s2&0x01;   
  295.            H595_SCK1_L ;
  296.            if (mid==0)
  297.              H595_SER1_L ;
  298.            else
  299.              H595_SER1_H;
  300.              NOP();
  301.              H595_SCK1_H;
  302.              NOP();
  303.              s2=s2>>1;
  304.          }
  305.          H595_RCK1_L ;
  306.      NOP();
  307.          H595_RCK1_H;
  308.          SEI();
  309.    }
  310.         

  311.         
  312. void display(uint shuzhi)
  313. {
  314.    uchar ge,shi,bai,qian;
  315.    if(shuzhi > 999)
  316.      {
  317.        ge=shuzhi%10;
  318.        shi=shuzhi%100/10;
  319.        bai=shuzhi%1000/100;
  320.        qian=shuzhi/1000;
  321.      }
  322.    else  if(shuzhi>99)
  323.     {
  324.        ge=shuzhi%10;
  325.        shi=shuzhi%100/10;
  326.        bai=shuzhi/100;
  327.        qian=10;
  328.         }
  329.    else if(shuzhi>9)
  330.     {
  331.        ge   = shuzhi%10;
  332.        shi  = shuzhi/10;
  333.        bai  = 10;
  334.        qian = 10;
  335.     }
  336.    else
  337.         {
  338.             ge   = shuzhi;
  339.         shi  = 10;
  340.         bai  = 10;
  341.         qian = 10;
  342.         }  
  343.    set595(shushow[ge]);
  344.    SEG_4_L;
  345.    delay1(200);
  346.    SEG_4_H;

  347.    set595(shushow[shi]);
  348.    SEG_3_L;
  349.    delay1(200);
  350.    SEG_3_H;
  351.    
  352.    set595(shushow[bai]);
  353.    SEG_2_L;
  354.    delay1(200);
  355.    SEG_2_H;
  356.    
  357.    set595(shushow[qian]);
  358.    SEG_1_L;
  359.    delay1(200);
  360.    SEG_1_H;
  361.   }
  362.   
  363. /******************************************************************************/
  364. /**********************************END*****************************************/
  365. /******************************************************************************/





  366. /********************************角度,速度實時處理函數************************/
  367. void set_angle(uchar agh,uchar agl)
  368.   {
  369.      angle_flag1=1;
  370.          angleh=agh;
  371.          anglel=agl;
  372.          
  373.   }
  374.   void set_sudu(uchar sd)
  375.   {
  376.     angle_flag2=1;
  377.         sudu=sd;
  378.   }
  379. /************************************end***************************************/




  380. /*********************坡道處理函數,有待實踐證實********************************/
  381.   void set_podao()
  382.   {
  383.     uint ii,iii;
  384.         if(i<100)//上坡
  385.     AD_control();
  386.           else
  387.     if(i>100)//下坡趨勢//傍晚100快速50
  388.          {
  389.            for(ii=0;ii<6000;ii++ )


  390. …………篇幅太大余下代碼請下載附件…………

復制代碼







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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美福利| 国产精品自产av一区二区三区 | 国产精品揄拍一区二区久久国内亚洲精 | 污视频在线免费观看 | 久久久蜜臀国产一区二区 | 日韩电影免费在线观看中文字幕 | 日韩手机在线视频 | 午夜码电影| 久久精品免费观看 | 99视频免费播放 | 久久久久久国产精品 | 97超碰在线免费 | 中文字幕在线观看一区二区 | 亚洲一区二区三区在线观看免费 | 亚洲色视频 | 粉嫩国产精品一区二区在线观看 | 日本亚洲精品 | 艹逼网| 综合久久久| 91在线成人| 欧美亚洲国语精品一区二区 | 香蕉视频91 | 欧美日韩亚洲国产 | 久久99精品久久久久久国产越南 | 久久久人成影片免费观看 | 国产精品爱久久久久久久 | 国产在线视频一区 | 99这里只有精品视频 | 亚洲欧美中文日韩在线 | 欧美成人精品在线 | 国产视频一视频二 | 国产女人与拘做受免费视频 | 五月天国产在线 | 亚洲精品电影网在线观看 | 中文字幕亚洲欧美 | 日韩在线观看一区二区三区 | 亚洲日本激情 | 中文字幕一区二区三区四区不卡 | 精品视频一区在线 | 亚洲欧美另类在线观看 | 亚洲美女一区 |