|
|
【答案】应助回帖
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uint getdata=0;//这里定义的uint,但是函数形参是uchar ,不匹配;
sbit EOC=P2^4;
sbit OE=P2^5;
sbit CLK=P2^6;
sbit ADDA=P1^0;
sbit ADDB=P1^1;
sbit ADDC=P1^2;
sbit RS=P2^2;
sbit RW=P2^1;
sbit E=P2^0;
sbit red=P1^3;
sbit green=P1^4;
void delay(uint z);
void init();
void LCD_init();
void LCD_writedata(uchar getdata);
void LCD_writecom(uchar com);
write_sfm(add,getdata);//函数声明需要指定形参类型,不能直接给实参,改为write_sfm(uchar add,uchar getdata)
uchar table[]=" The ppm is ";
uchar getdate,add;//getdate没用,你是不是想声明getdata?
/*****????****/
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=z;j>0;j--);
}
/****?????****/
void init()
{ TMOD=0x02;
TH0=216;
TL0=216;
EA=1;
ET0=1;
TR0=1;
ST=0;
OE=0;
}
void LCD_init()
{
uchar a;
WR=0;
LCD_writecom(0x38);
LCD_writecom(0x0c);
LCD_writecom(0x06);
LCD_writecom(0x01);
LCD_writecom(0x80);
delay(5);
for(a=0;a<11;a++)
{
LCD_writedata(table[a]);
delay(5);
}
delay(5);
}
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
}
void LCD_writecom(uchar com)
{
RS=0;
RW=0;
P0=com;
E=0;
delay(1);
E=1;
delay(1);
E=0;
}
void LCD_writedata(uchar temp)
{ RW=0;
RS=1;
P0=temp;
E=0;
delay(5);
E=1;
delay(5);
E=0;
}
//这个函数肯定是不能正常工作的,你又是迭代又是递归,你是想显示一个数吧?要么用迭代,要么递归,推荐迭代
write_sfm(uchar add,uchar getdata)
{ uchar getdata1,getdata2;
ui shu[];//ui?uint吧?还有,必须指定数组大小
uint i;
getdata1=getdata*256/51;getdata1和getdata2都声明为uchar,小心溢出
getdata2=getdata*256/51;
if(getdata2>10000)
{red=1;
green=0;
}
else
{
red=0;
green=1;
}
if(getdata!=0)
{
shu[]=getdata1%10;//这里需要指定下标 shu[?]
getdata1=getdata1/10;
add++;
write_sfm(add,getdata1);
}
LCD_writecom(0xc0+add);
for(i=5;i>=0;i--)
{
LCD_writedata(0x30+shu);这里应该是shu
}
delay(100);
}
main()
{
init();
LCD_init();
while(1)
{
ST=0;ST=1;ST=0;
while(EOC==0);
OE=1;
getdata=P3;
add=4;
write_sfm(add,getdata);
OE=0;
}
} |
|