设为首页 收藏本站
开启辅助访问 切换到宽版

  找回密码
  立即注册

QQ登录

只需一步,快速开始

快捷导航
  • 论坛
  • 问答区
  • 单片机教程
  • 单片机DIY
  • 电子DIY
  • 帮助

热门: 51单片机 | 24小时必答区 | 单片机教程 | 单片机DIY制作 | STM32 | Cortex M3 | 模数电子 | 电子DIY制作 | 音响/功放 | 拆机乐园 | Arduino | 嵌入式OS | 程序设计

搜索
» 论坛 电子技术分类讨论区 智能小车/机器人 mega16智能循迹小车制作资料 含PCB avr源码 成品图片
返回列表 发新帖
查看: 4282|回复: 0
打印 上一主题 下一主题
收起左侧

mega16智能循迹小车制作资料 含PCB avr源码 成品图片

[复制链接]
跳转到指定楼层
楼主
ID:140725 发表于 2017-3-5 23:36 | 只看该作者 | 只看大图 回帖奖励 | 倒序浏览 | 阅读模式

给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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩

相关帖子

  • • 做了个替BF7612CM的测试
  • • stm32f103c8+DS18b20+OLED散热系统源程序,温度阈值
  • • 寻找一种开关,可以判断人体存在时间
  • • 基于51单片机的智能加湿器(DHT11源程序)
  • • VK1629A,B,C,D版本/1640/1650/1668/6932/16K33 LED面板显示驱动芯片pdf资料手册下载
  • • 单片机的交通灯设计 自己动手DIY 电路原理图+程序仿真
  • • 简单寻迹程序
  • • 基于51单片机的智能晾衣架设计资料(论文+源码+仿真)
  • • esp下载软件FLASH_DOWNLOAD_TOOLS_V3.6.2.2
  • • [资料分享] 人人都可以DIY的Arduino UNO智能灯(四)
回复

使用道具 举报

返回列表 发新帖
高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 小黑屋| 51黑电子论坛 | 51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表

玻璃钢生产厂家东莞商业广场玻璃钢卡通雕塑价格商场美陈装饰设计公司北京秋季商场美陈销售厂家湖南多彩玻璃钢雕塑价位园林玻璃钢雕塑厂商出售深圳小区玻璃钢雕塑一般多少钱玻璃钢人物雕塑销售厂市政玻璃钢雕塑厂家服务介绍商场美陈公司排名商丘太湖石玻璃钢景观雕塑信阳泡沫玻璃钢雕塑文山玻璃钢雕塑定做白山卡通人像玻璃钢雕塑郴州玻璃钢雕塑制作厂家平顶山玻璃钢广场雕塑曲阳玻璃钢雕塑鹤杭州景观玻璃钢雕塑销售厂家北京商场美陈安装深圳漫威玻璃钢雕塑有限公司蓝色海盗玻璃钢雕塑绍兴玻璃钢雕塑电话天津天桥梁玻璃钢花盆兰州玻璃钢历史雕塑厂家恐龙玻璃钢雕塑图湖南玻璃钢景观雕塑制造吴川玻璃钢座椅雕塑商场的美陈在什么部门梅花鹿玻璃钢雕塑图片菏泽玻璃钢泡沫雕塑公司玻璃钢雕塑酒瓶香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化