找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有没有大佬帮忙看看这个单片机程序我写的是用tcs230然后用数码管显示

[复制链接]
跳转到指定楼层
楼主
ID:1121149 发表于 2024-5-17 13:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在为了测试我上面的tcs传感器的程序简便使用数码管检验我的颜色传感器是否可以识别,我结果无论是什么颜色都显示1,但是我的数码管直接不亮,有大佬可以帮我看一下是单片机程序的问题还是我传感器的问题?

#include <reg52.h>
#include<math.h>       //Keil library  
#include<stdio.h>      //Keil library        
#include<INTRINS.H>
#define uchar unsigned char

sbit S2 = P0^0;
sbit S3 = P0^1;
sbit OUT = P0^2;
sbit S0 = P0^3;
sbit S1 = P0^4;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
int white_balance_red,white_balance_green,white_balance_blue;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
                        0xf8,0x80,0x90};

void delay(unsigned int t) {
    unsigned int i, j;
    for (i = 0; i < t; i++)
        for (j = 0; j < 125; j++);
}


unsigned int read_pulse() {
          return 100;
}


void perform_white_balance() {

    S2 = 0;
    S3 = 0;
    delay(100);
    white_balance_red = read_pulse();
    S2 = 1;
    S3 = 1;
    delay(100);
    white_balance_green = read_pulse();
    S2 = 0;
    S3 = 1;
    delay(100);
    white_balance_blue = read_pulse();
}
unsigned char recognize_color() {
    unsigned int red_pulse, green_pulse, blue_pulse;
    red_pulse = read_pulse();
    green_pulse = read_pulse();
    blue_pulse = read_pulse();
    red_pulse -= white_balance_red;
    green_pulse -= white_balance_green;
    blue_pulse -= white_balance_blue;
    if (red_pulse > 200 && green_pulse > 200 && blue_pulse > 200) {
        return 'W';
    } else if (red_pulse > green_pulse && red_pulse > blue_pulse) {
        return 'R';
    } else if (green_pulse > red_pulse && green_pulse > blue_pulse) {
        return 'G';
    } else if (blue_pulse > red_pulse && blue_pulse > green_pulse) {
        return 'B';
    } else if (red_pulse > 150 && green_pulse > 100 && blue_pulse < 100) {
        return 'Y';
    } else if (red_pulse < 50 && green_pulse < 50 && blue_pulse < 50) {
        return 'K';
    } else {
        return 'U';
    }
}



void main() {
    unsigned char color;
    perform_white_balance();
    while (1) {   
        color = recognize_color_with_white_balance();
        switch (color) {
            case 'W':   
                                                                  P0=table[0];
                                                                  P2_0 = 0;
                                                                  delay(5);
                                                                  P2_0 = 1;
                break;
            case 'R':   P0=table[0];
                        P2_0 = 0;
                        delay(5);
                        P2_0 = 1;
                break;
            case 'G':   P0=table[0];
                                                                                                P2_0 = 0;
                                                                                                delay(5);
                                                                                                P2_0 = 1;
                break;
            case 'B':   P0=table[0];
                                                                                                P2_0 = 0;
                                                                                                delay(5);
                                                                                                P2_0 = 1;
               break;
            case 'Y':   P0=table[0];
                                                                                                P2_0 = 0;
                                                                                                delay(5);
                                                                                                P2_0 = 1;

                                OLED_Clear();
                break;
            case 'K':   P0=table[0];
   P2_0 = 0;
   delay(5);
   P2_0 = 1;

                break;
        }
    }
}



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

使用道具 举报

沙发
ID:879809 发表于 2024-5-17 14:30 | 只看该作者
white_balance_red这几个变量名字太长了吧,标准c语言支持31字符长度变量,这么写没问题。但是C51他不标准啊!查下最多支持几个字符?
回复

使用道具 举报

板凳
ID:384109 发表于 2024-5-17 15:33 | 只看该作者
编译没报错吗
回复

使用道具 举报

地板
ID:161164 发表于 2024-5-17 17:57 | 只看该作者
你这代码只会显示0,绝不会显示1
看不到哪里有读取tcs230的代码
回复

使用道具 举报

5#
ID:1121149 发表于 2024-5-17 19:08 | 只看该作者
发表于 2024-5-17 14:30
white_balance_red这几个变量名字太长了吧,标准c语言支持31字符长度变量,这么写没问题。但是C51他不标准 ...

他可以支持255个但是前32个有效,但是我在keil上可以编译但烧入到单片机上我的颜色传感器没反应
回复

使用道具 举报

6#
ID:1121149 发表于 2024-5-17 19:29 | 只看该作者
发表于 2024-5-17 14:30
white_balance_red这几个变量名字太长了吧,标准c语言支持31字符长度变量,这么写没问题。但是C51他不标准 ...

我现在把变量名改短了但是我的数码管还是不会显示
回复

使用道具 举报

7#
ID:1121149 发表于 2024-5-17 21:14 | 只看该作者
lkc8210 发表于 2024-5-17 17:57
你这代码只会显示0,绝不会显示1
看不到哪里有读取tcs230的代码

打错了是0,我的目的就是为了检验我的tcs230能不能用
回复

使用道具 举报

8#
ID:1121149 发表于 2024-5-17 21:22 | 只看该作者

没有报错就是用不了
回复

使用道具 举报

9#
ID:1121149 发表于 2024-5-17 21:57 | 只看该作者
lkc8210 发表于 2024-5-17 17:57
你这代码只会显示0,绝不会显示1
看不到哪里有读取tcs230的代码

怎么提取呀我不太会
回复

使用道具 举报

10#
ID:384109 发表于 2024-5-17 22:15 | 只看该作者
recognize_color_with_white_balance();这个代码在哪里
回复

使用道具 举报

11#
ID:1121149 发表于 2024-5-17 23:30 | 只看该作者
人中狼 发表于 2024-5-17 22:15
recognize_color_with_white_balance();这个代码在哪里

好像没有那是用recognize_color就好了嘛
回复

使用道具 举报

12#
ID:384109 发表于 2024-5-18 19:03 | 只看该作者
forky 发表于 2024-5-17 23:30
好像没有那是用recognize_color就好了嘛

while (1) {   
        color = recognize_color_with_white_balance();
        switch (color) {
感觉你的问题很随意,答复的也很随意
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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