51单片机 89c52rc

想用51单片机做一个颜色识别,输出数据 设备为89c52rc 和某宝买的GY-33 颜色传感器模块

#include 
#include "LCD1602.H"
#include "Delay.h"
#include "UART.h"
unsigned int number[10];       //¶¨ÒåÒ»¸ö½ÓÊÕÊý¾ÝµÄÊý×é
void main()
{
    UART();
    LCD_Init();
    while(1)                    //½«Êý×éÖеÄÊý¾ÝÓÃLCDÏÔʾ³öÀ´
    {
        Delay(100);
        LCD_ShowHexNum(1,2,number[0],2);
        Delay(100);
        LCD_ShowHexNum(1,5,number[1],2);
        Delay(100);
        LCD_ShowHexNum(1,8,number[2],2);
        Delay(100);
        LCD_ShowHexNum(1,11,number[3],2);
        Delay(100);
        LCD_ShowHexNum(1,14,number[4],2);
        Delay(100);
        LCD_ShowHexNum(2,2,number[5],2);
        Delay(100);
        LCD_ShowHexNum(2,5,number[6],2);
        Delay(100);
        LCD_ShowHexNum(2,8,number[7],2);
        Delay(100);
        LCD_ShowHexNum(2,11,number[8],2);
        Delay(100);
        LCD_ShowHexNum(2,14,number[9],2);
    }
}
void UART_rotine() interrupt 4  //ÖжϽÓÊÕÊý¾Ý
{
    int num_1=0;
    int cnt=0;
    if(RI==1)
    {
        Delay(100);
        num_1=SBUF;
        if(num_1=0x5A)      //¼ì²âÍ·Êý¾ÝΪ5Aʱ¿ªÊ¼½ÓÊÕÊý¾Ý
        {
            number[cnt++]=num_1;            //°´ÕÕ˳Ðò´æµ½Êý×éÖÐ
            if(cnt>=10)               //´æµ½10¸ö ¹Ø±Õ½ÓÊÕ
            SCON=0x40;
            RI=0;
        }
    }
}

运行结果及报错内容

运行后LCD总是输出固定的数据,不会因颜色发生变化

img

img


两者显示并不一致
帮忙看看代码有错吗。以上都是看教程自学,才疏学浅勿笑勿笑

GY-33 颜色传感器模块有两种方式读取数据,即串口 UART或 IIC,您首先要保证通信端口选择正确,看你的程序应该用的是串口,串口的波特率有 9600bps 与 115200bps,看你配置是否正确,如果不能确定,可以直接将GY-33连到usb转串口(记得ttl电平啊)上,用串口助手看看数据是否有变化,确认模块输出没有问题后再排查程序问题,这样效率高。

我猜是串口中断里接收传感器数据吧?中断函数里的int cnt=0;你应该定义为static,否则每次中断进来,它都是0,导致数据只能存在数组第一个位置,要不你就做成全局的,要不就定义为静态的。而且还要有个机会把它重置,比如接收完成的时候,以便下一次接收。
还有串口中断里,为什么判断到RI标志了,还要延时100再读。
还有,要显示的话,应该是读到接收完成的标志之后再显示吧,你一直在用一个数组的数据刷新,没有判断到底有没有接收完成,即使接收正确,也可能是两组数据交错的。
仔细一看,好像各种问题还挺多的。比如RI标志,不管收到的是不是你想要的,最后都应该要清零啊。还有SCON,你去改它干什么。