找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1648|回复: 0
打印 上一主题 下一主题
收起左侧

搬运车+GY-31传感器TCS23颜色参考单片机源码

[复制链接]
跳转到指定楼层
楼主
之前做比赛的时候通关网络搜集了一些 然后根据自己的车 做了部分修改 算是一个整合吧 基于51单片机

单片机源程序如下:
  1. #include<iom128v.h>
  2. #include<macros.h>
  3. #include<BIT.h>
  4. #include"LCD12864.c"
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. #pragma interrupt_handler timer0:iv_TIMER0_OVF
  8. #pragma interrupt_handler int0:iv_INT0
  9. #define PSB _PA3
  10. #define REST _PA4
  11. #define LED_B _PG1
  12. #define S2 _PE0
  13. #define S3 _PE1
  14. #define buzzer _PG0
  15. uchar table0[]="颜色识别";
  16. uchar table1[]="红色: ";
  17. uchar table2[]="绿色: ";
  18. uchar table3[]="蓝色: ";
  19. uint  red,gree,blue,time_count,int_count;
  20. uchar red_value,gree_value;
  21. void delay(uint tt)
  22. {
  23.     uchar j;
  24.         for(;tt>0;tt--)
  25.             for(j=100;j>0;j--);
  26. }
  27. void timer_Init()
  28. {
  29.     TCCR0=0x07;
  30.     TCNT0=0x64;
  31.   //  TIMSK|=BIT(0);
  32. }
  33. void interrupt0_Init()
  34. {
  35.    // EIMSK|=BIT(0);
  36.     EICRA=0x02;
  37.     DDR_PD0=0;
  38.   //  _PD0=1;
  39. }
  40. void PORT_INIT()
  41. {
  42.     DDR_PA0=1;
  43.         DDR_PA1=1;
  44.         DDR_PA2=1;
  45.         DDR_PA3=1;
  46.         DDR_PA4=1;
  47.         
  48.         DDRC=0xff;
  49.         
  50.         DDR_PE0=1;
  51.         DDR_PE1=1;
  52.         
  53.         DDR_PG0=1;
  54.         DDR_PG1=1;
  55.         
  56.         PSB=0;
  57.         REST=1;
  58.         LED_B=1;
  59. }
  60. void color_Recognition()
  61. {
  62.     S2=1;
  63.         S3=1;
  64.         EIMSK|=BIT(0);
  65.         TIMSK|=BIT(0);
  66. }
  67. void main()
  68. {
  69.         PORT_INIT();
  70.     timer_Init();
  71.         interrupt0_Init();
  72.         LCD_12864_Init();
  73.         SREG|=BIT(7);
  74. //        PutStr(0,2,table0);
  75.         PutStr(1,1,table1);
  76.         PutStr(2,1,table2);
  77.         PutStr(3,1,table3);
  78.         delay(5000);
  79.         buzzer=1;
  80.         delay(200);
  81.         buzzer=0;
  82.         color_Recognition();
  83.         while(1);
  84. }
  85. void timer0()
  86. {
  87.     uchar ge,shi,bai,qian;
  88.         float temp;
  89.     TIMSK&=~BIT(0);
  90.         time_count++;
  91.         TCNT0=0x64;
  92.         if(time_count==1)
  93.            {
  94.           bai=int_count/100;
  95.               shi=int_count%100/10;
  96.               ge=int_count%10;
  97.               Write_command_12864(0x95);
  98.               Write_data_12864(0x30+bai);
  99.               Write_data_12864(0x30+shi);
  100.               Write_data_12864(0x30+ge);
  101.               red=int_count;
  102.                   S2=1;
  103.                   S3=1;
  104.            }
  105.          if(time_count==2)
  106.            {
  107.               bai=int_count/100;
  108.               shi=int_count%100/10;
  109.               ge=int_count%10;
  110.                   Write_command_12864(0x8d);
  111.               Write_data_12864(0x30+bai);
  112.               Write_data_12864(0x30+shi);
  113.               Write_data_12864(0x30+ge);
  114.                   gree=int_count;
  115.                   S2=0;
  116.                   S3=1;   
  117.            }
  118.          if(time_count==3)
  119.            {
  120.               bai=int_count/100;
  121.               shi=int_count%100/10;
  122.               ge=int_count%10;         
  123.                   Write_command_12864(0x9d);
  124.               Write_data_12864(0x30+bai);
  125.               Write_data_12864(0x30+shi);
  126.               Write_data_12864(0x30+ge);
  127.                   blue=int_count;
  128.                   S2=0;
  129.                   S3=0;      
  130.            }
  131.          if(time_count==40)
  132.            {
  133.               time_count=0;        
  134.                   temp=(float)red/blue;
  135.                   red_value=temp*1000;
  136.                   temp=(float)gree/blue;
  137.                   gree_value=temp*1000;
  138.                   
  139.                   qian=red_value/1000;
  140.                   bai=red_value%1000/100;
  141.                   shi=red_value%100/10;
  142.                   ge=red_value%10;
  143.                   Write_command_12864(0x81);  
  144.                   Write_data_12864(0x30+qian);
  145.                   Write_data_12864(0x30+bai);
  146.                   Write_data_12864(0x30+shi);
  147.                   Write_data_12864(0x30+ge);
  148.                   
  149.                   qian=gree_value/1000;
  150.                   bai=gree_value%1000/100;
  151.                   shi=gree_value%100/10;
  152.                   ge=gree_value%10;
  153.                   Write_command_12864(0x85);  
  154.                   Write_data_12864(0x30+qian);
  155.                   Write_data_12864(0x30+bai);
  156.                   Write_data_12864(0x30+shi);
  157.                   Write_data_12864(0x30+ge);
  158.            }
  159.          int_count=0;
  160.          TIMSK|=BIT(0);
  161. }
  162. void int0()
  163. {
  164.      int_count++;
  165. }
复制代码

所有资料51hei提供下载:
GY-31颜色模块发送资料.7z (4 MB, 下载次数: 14)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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