想用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总是输出固定的数据,不会因颜色发生变化
GY-33 颜色传感器模块有两种方式读取数据,即串口 UART或 IIC,您首先要保证通信端口选择正确,看你的程序应该用的是串口,串口的波特率有 9600bps 与 115200bps,看你配置是否正确,如果不能确定,可以直接将GY-33连到usb转串口(记得ttl电平啊)上,用串口助手看看数据是否有变化,确认模块输出没有问题后再排查程序问题,这样效率高。
我猜是串口中断里接收传感器数据吧?中断函数里的int cnt=0;你应该定义为static,否则每次中断进来,它都是0,导致数据只能存在数组第一个位置,要不你就做成全局的,要不就定义为静态的。而且还要有个机会把它重置,比如接收完成的时候,以便下一次接收。
还有串口中断里,为什么判断到RI标志了,还要延时100再读。
还有,要显示的话,应该是读到接收完成的标志之后再显示吧,你一直在用一个数组的数据刷新,没有判断到底有没有接收完成,即使接收正确,也可能是两组数据交错的。
仔细一看,好像各种问题还挺多的。比如RI标志,不管收到的是不是你想要的,最后都应该要清零啊。还有SCON,你去改它干什么。