

电路图如上所示,使用的是stc15f2k60s2的芯片,GY-906 mlx90614ESF BAA的温度传感器,用的是lcd12864的显示屏,想要做一个温度测量的装置,现在可以正常烧录,但是屏幕一直都是显示的一个个小方格中间有一条黑线其他的啥都没有显示,求大佬帮忙看看
#include "stc15f2k60s2.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define Nack_counter 10
uchar flag1;
sbit RS=P2^5;
sbit RW=P4^2;
sbit LCDE=P2^7;
sbit SCL=P4^1;
sbit SDA=P3^7;
sbit LED10=P2^4;
sbit LED11=P2^3;
sbit LED12=P2^2;
sbit LED13=P2^1;
sbit LED14=P2^0;
sbit LED15=P2^6;
sbit LED16=P4^4;
sbit LED17=P4^5;
bdata uchar flag;
sbit bit_out=flag^7;
sbit bit_in=flag^0;
uchar DataH,DataL,Pecreg;
void start_bit();
void stop_bit();
uchar rx_byte(void);
void send_bit(void);
void tx_byte(uchar dat_byte);
void receive_bit(void);
void delay(uint N);
uint memread(void);
void init1602(void);
void chk_busy_flg(void);
void dis_cmd_wrt(uchar cmd);
void dis_dat_wrt(uchar dat);
void display(uint Tem);
void LED_Warning(int number);
void init_LED();
uint Tem;
void LCD12864_Write_Com(uchar com)
{
LCDE = 0;
RW = 0;
RS = 0;
delay(10);
DataL = com;
delay(10);
LCDE = 1;
delay(200);
}
void LCD12864_Write_Data(uchar dat)
{
LCDE = 0;
RW = 0;
RS = 1;
delay(10);
DataL = dat;
delay(10);
LCDE = 1;
delay(200);
}
void LCD12864_Clear_Screen(uchar value)
{
uchar i,j;
LCD12864_Write_Com(0x34);
LCD12864_Write_Com(0x36);
for(i=0;i<64;i++){
if(i<32){
LCD12864_Write_Com(0x80+i);
LCD12864_Write_Com(0x80);
}else {
LCD12864_Write_Com(0x80+(i-32));
LCD12864_Write_Com(0x88);
}
for(j=0;j<16;j++)
LCD12864_Write_Data(value);
}
}
uchar addresses[] = {0x80,0x90,0x88,0x98};
void LCD12864_Display_Char(uchar x,uchar y,uchar dat)
{
LCD12864_Write_Com(0x30);
LCD12864_Write_Com(0x06);
LCD12864_Write_Com(addresses[x-1]+(y-1));
LCD12864_Write_Data(dat);
}
void LCD12864_Display_Chars(uchar x,uchar y,uchar *dat)
{
LCD12864_Write_Com(0x30);
LCD12864_Write_Com(0x06);
LCD12864_Write_Com(addresses[x-1]+(y-1));
while(*dat != '\0'){
LCD12864_Write_Data(*dat);
dat++;
}
}
void main()
{
uchar *datas ="LCD????";
uint tem_warning=3700;
init1602();
init_LED();
LCD12864_Clear_Screen(0x00);
SCL=1;
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
delay(1000);
SCL=1;
while(1)
{
delay(1000);
Tem=memread();
display(Tem);
LCD12864_Display_Char(1,2,'A');
LCD12864_Display_Chars(2,1,datas);
}
}
void display(uint Tem)
{
uint T,a,b;
T=Tem*2;
dis_cmd_wrt(0x01);
if(T>=27315)
{
T=T-27315;
a=T/100;
b=T-a*100;
if(a>=100)
{
dis_dat_wrt(0x30+a/100);
a=a%100;
dis_dat_wrt(0x30+a/10);
a=a%10;
dis_dat_wrt(0x30+a);
}
else if(a>=10)
{
dis_dat_wrt(0x30+a/10);
a=a%10;
dis_dat_wrt(0x30+a);
}
else
{
dis_dat_wrt(0x30+a);
}
dis_dat_wrt(0x2e);
if(b>=10)
{
dis_dat_wrt(0x30+b/10);
b=b%10;
dis_dat_wrt(0x30+b);
}
else
{
dis_dat_wrt(0x30);
dis_dat_wrt(0x30+b);
}
}
else
{
T=27315-T;
a=T/100;
b=T-a*100;
dis_dat_wrt(0x2d);
if(a>=10)
{
dis_dat_wrt(0x30+a/10);
a=a%10;
dis_dat_wrt(0x30+a);
}
else
{
dis_dat_wrt(0x30+a);
}
dis_dat_wrt(0x2e);
if(b>=10)
{
dis_dat_wrt(0x30+b/10);
b=b%10;
dis_dat_wrt(0x30+b);
}
else
{
dis_dat_wrt(0x30);
dis_dat_wrt(0x30+b);
}
}
dis_dat_wrt(0xDF);
dis_dat_wrt(0x43);
}
void start_bit(void)
{
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void stop_bit(void)
{
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
}
void tx_byte(uchar dat_byte)
{
char i,n,dat;
n=Nack_counter;
TX_again:
dat=dat_byte;
for(i=0;i<8;i++)
{
if(dat&0x80)
bit_out=1;
else
bit_out=0;
send_bit();
dat=dat<<1;
}
receive_bit();
if(bit_in==1)
{
stop_bit();
if(n!=0)
{n--;goto Repeat;}
else
goto exit;
}
else
goto exit;
Repeat:
start_bit();
goto TX_again;
exit:
;
}
void send_bit(void)
{
if(bit_out==0)
SDA=0;
else
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
uchar rx_byte(void)
{
uchar i,dat;
dat=0;
for(i=0;i<8;i++)
{
dat=dat<<1;
receive_bit();
if(bit_in==1)
dat=dat+1;
}
send_bit();
return dat;
}
void receive_bit(void)
{
SDA=1;
bit_in=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
bit_in=SDA;
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(uint N)
{
uint i;
for(i=0;i<N;i++)
_nop_();
}
uint memread(void)
{
start_bit();
tx_byte(0x00);
tx_byte(0x07);
start_bit();
tx_byte(0x01);
bit_out=0;
DataL=rx_byte();
bit_out=0;
DataH=rx_byte();
bit_out=1;
Pecreg=rx_byte();
stop_bit();
return(DataH*256+DataL);
}
void init1602(void)
{
dis_cmd_wrt(0x30);
dis_cmd_wrt(0x08);
dis_cmd_wrt(0x01);
dis_cmd_wrt(0x06);
dis_cmd_wrt(0x0c);
}
void chk_busy_flg(void)
{
flag1=0x80;
while(flag1&0x80)
{
P0=0xff;
RS=0;
RW=1;
LCDE=1;
flag1=P0;
LCDE=0;
}
}
void dis_cmd_wrt(uchar cmd)
{
chk_busy_flg();
P0=cmd;
RS=0;
RW=0;
LCDE=1;
LCDE=0;
}
void dis_dat_wrt(uchar dat)
{
chk_busy_flg();
if(flag1==16)
{
P0=0XC0;
RS=0;
RW=0;
LCDE=1;
LCDE=0;
}
P0=dat;
RS=1;
RW=0;
LCDE=1;
LCDE=0;
}
void LED_Warning(int number)
{
int i;
for(i=0;i<number;i++)
{
int medium=LED10;
LED10=LED11;
LED11=LED12;
LED12=LED13;
LED13=LED14;
LED14=LED15;
LED15=LED16;
LED16=LED17;
LED17=medium;
if(i%6==0)
dis_cmd_wrt(0x01);
delay(10000);
}
display(Tem);
}
void init_LED()
{
LED10=~LED10;
LED11=~LED11;
LED12=~LED12;
LED13=~LED13;
}
代码如上面所示,是copy的丶Tonytony大佬和rivate_void_main大佬的,然后自己改了改但是好像没啥用处,求求路过的大佬们帮忙看看,谢谢了。