我想计算tcs3200输出的脉冲个数 但1602么有显示 求解... 选择的是红色滤波器

#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint a;
uchar num;
bit skt=0;
sbit s2=P1^0; //TCS3200 S2
sbit s3=P1^1; //TCS3200 S3
sbit out=P3^2;
sbit lcdrs=P0^7;
sbit lcdrw=P0^6;
sbit lcden=P0^5;

void delayns(int a)
{
uint i;
for(i=0;i<=a;i++)
{
_nop_();
}
}

void delay(int z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

bit lcd_bz()
{
bit result;
lcdrs=0;
lcdrw=1;
lcden=1;
delayns(4);
result=(bit)(P2&0x80);
lcden=0;
return result;
}

void write_ZHIL(uchar com)
{
while(lcd_bz());
lcden=0;
lcdrs=0;
lcdrw=0;
delayns(2);
P2=com;
delayns(4);
lcden=1;
delayns(4);
lcden=0;

}
void write_SHUJ(uchar date)
{
while(lcd_bz());
lcdrs=1;
lcdrw=0;
lcden=0;
delayns(2);
P2=date;
delayns(4);
lcden=1;
delayns(4);
lcden=0;

}
void init()
{
delay(15);
write_ZHIL(0x38);
delay(5);
write_ZHIL(0x38);
delay(5);
write_ZHIL(0x38);
while(lcd_bz());
write_ZHIL(0x38);
while(lcd_bz());
write_ZHIL(0x0c);
while(lcd_bz());
write_ZHIL(0x06);
while(lcd_bz());
write_ZHIL(0x01);
out=1;
s2=s3=0;
TMOD=0x01;
EA=1;
EX0=1;
IT0=1;
TR0=1;
PX0=1;
TH0=(65536-9174)/256;
TL0=(65536-9174)%256;

}

void main()
{
init();

while(skt==0);
while(lcd_bz());
write_ZHIL(0x80);
while(lcd_bz());
write_SHUJ(a);
while(1);
}
void xxzc() interrupt 0
{
a++;
}

void xxzxzczc() interrupt 1
{
EX0=0;
TR0=0;
skt=1;
}

LCD要显示,不能直接送数据a,要送ASCI码,如1 是0x31,,2 是0x32
大于10的数可分离出个位十位和百位分别送
如假设a不大于999,可这样分离
b1=a/100%10;//百位
b2=a/10%10;//十位
b3=a%10;//个位
送lcd时分别送
b1+0x30 b2+0x30 b3+0x30追问

那现在这个对吗?  我把tcs3200放到正对白纸位置为什么没有数值呢?

追答

tcs3200没用过,,连0都 不显示吗,先关掉中断,让液晶屏显示一个字符看是否成功,然后再说计数的问题

温馨提示:答案为网友推荐,仅供参考