51单片机用液晶显示外部脉冲信号 计算光栅传感器的周期和转数 我用的定时器和计数器 定时每5s记录脉冲数

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code c[]="T= s n= ";//定义周期 转速
sbit lcden=P3^4;
sbit rs=P3^5;
sbit wr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit P11=P1^0;
//sbit T1=P3^3; //定时器
//sbit T0=P3^2;//光栅接口
unsigned char f,q,num;
void write_com(unsigned char com)//送指令
{
rs = 0;
wr = 0;
lcden = 0;
P0 = com;
lcden = 1;
lcden = 0;
}
void write_date(unsigned char date) //送数据
{
rs = 1;
wr = 0;
lcden = 0;
P0 = date;
lcden = 1;
lcden = 0;
}
void init()
{
uint i;
uint num=0;
uint f=0; //f为脉冲数
dula=0;
wela=0;
write_com(0x38);
write_com(0x08); //16*2液晶显示
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for( i=0;i<16;i++)
{
write_date( c[i]);
}
TMOD=0x10; //定时器1 工作方式1
TR0=1; //开计数器
EA=1;
ET1=1;
TH1=(65536-50000)/256; //定时50ms
TL1=(65536-50000)%256;
}
void write_sfm(unsigned char add,date)
{
unsigned char T,n;
T=5/q*50; //5s 除以脉冲乘光栅数
n=(uint)0.2/T/0.1*(2*3.1415926);
write_com(0x80+add);
write_date(0x30+T);
write_com(0x80+add+0x05);
write_date(0x30+n);
}
void main()
{
init();
while(1)
{
if(num==100)//当定时为5s时
{
num=0;
P11=~P11;
TR0=0;
q=f;
write_sfm(2,f);
TR0=1;
}
}
}

void time1() interrupt 3 using 1
{
f++;
TH1=(65536-50000)/256; //定时50ms
TL1=(65536-50000)%256;
num++;

}
程序液晶不显示求大神 很急。。。 虽然我不懂什么悬赏但是有分的花我都会给你的

第1个回答  2014-04-23
是不是你液晶部分的程序和硬件有问题?你加进去一段液晶显示指定字符(如“1234abcd”)的测试程序试试本回答被提问者采纳
第2个回答  2014-04-23
东风科技股份合格4672165767560675196