找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2310|回复: 3
打印 上一主题 下一主题
收起左侧

求教,这种错误怎么修改?附源程序及错误截图。

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define WriteDeviceAddress 0xa0
#define ReadDeviceAddress 0xa1
uchar e=0,sec=1,select;
uchar at_add=0;
unsigned int sec_page;
uchar idata x_rdat[40];
bit w=0;
uchar at_i=0;
uchar idata t[10]={0,0,0,0,0,0,0,0};
uchar alarm[8]={0,0,0,0,0,0,0,0},alarm_td,alarm_flag,alarm_stop=0,x_j,alarm_i;
uchar idata x_tdat[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned int r_dat;
unsigned char time, show_time;
unsigned char temp,sel_flag,show_flag;
unsigned char fs_td,td;
sbit dog=P2^0;
sbit alarm_led=P2^1;
sbit e_485 = P2^4;
sbit KEY_1 = P1^6;
sbit KEY_2 = P1^7;
sbit KEY_3 = P1^5;
sbit KEY_4 = P1^4;
sbit ep_sck=P2^2;
sbit ep_si=P2^3;
sbit ep_so=P3^5;
sbit ep_cs=P3^4;
void xinput(unsigned char v)
{ unsigned char data v1;
for(v1=0;v1<8;v1++)
{ ep_sck=0;
  ep_si=v&0x80;
  ep_si=1;
  v=v<<1;}
  ep_si=1;
}
unsigned char xout()
{ unsigned char data v1,x,y;
for(v1=0;v1<8;v1++)
{
ep_sck=1;
y=ep_so;
x=x|y;
ep_sck=0;}
return x;}
void wip_poll()
{ unsigned char data v;
do
{ ep_cs=1; ep_cs=0; xinput(0x05); v=xout(); ep_cs=1; v=v&0x01;}
while(v==1);}
void wren()
{ep_cs=1; ep_cs=0; xinput(0x06); ep_cs=1;}
void wrdi()
{ep_cs=1; ep_cs=0; xinput(0x04); ep_cs=1;}
void wrsr(unsigned char x)
{wren();
ep_cs=1;
ep_cs=0;
xinput(0x01);
xinput(x);
ep_cs=1;
wip_poll();}
unsigned char rdsr()
{ unsigned char data x;
ep_cs=1;
ep_cs=0;
xinput(0x05);
x=xout();
ep_cs=1;
return x; }
void byte_write(unsigned char wrdat,unsigned int wradd)
{
unsigned char data x;
wren();
ep_cs=1;
ep_cs=0;
if(wradd<256)
xinput(0x02);
else
xinput(0x0a);
x=wradd%256;
xinput(x);
xinput(wrdat);
ep_cs=1;
wip_poll();
wrdi();}
unsigned char byte_read(unsigned int rdadd)
{
unsigned char data x;
ep_cs=1;
ep_cs=0;
if(rdadd<256)
xinput(0x03);
else
xinput(0x0b);
x=rdadd%256;
xinput(x);
x=xout();
ep_cs=1;
return(x); }
void word_write(unsigned int wrdat1,unsigned int wradd1)
{ unsigned char data x;
wren();
ep_cs=1;
ep_cs=0;
if(wradd1<256)
xinput(0x02);
else
xinput(0x0a);
x=wradd1%256;
xinput(x);
x=wrdat1>>8;
xinput(x);
x=wrdat1%256;
xinput(x);
ep_cs=1;
wip_poll();
wrdi();}
unsigned int word_read(unsigned int rdadd1)
{ unsigned char data x;
unsigned int data rddat1;
ep_cs=1;
ep_cs=0;
if(rdadd1<256)
xinput(0x03);
else
xinput(0x0b);
rddat1=rdadd1%256;
xinput(rddat1);
x=xout();
rddat1=100*x;
x=xout();
rddat1=rddat1+x;
ep_cs=1;
return(rddat1);}
//LCD12864//
sbit cs=P1^0 ;
sbit sid=P1^1 ;
sbit clk=P1^2;
sbit ret=P1^3;
unsigned char mo,dd;
void Delay_Xus(unsigned char x)
{ while(--x); }
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{ for(i=0;i<120;i++);}}
void SendByte(unsigned char Dbyte)
{ unsigned char i;
for(i=0;i<8;i++)
{ clk = 0;
Dbyte=Dbyte<<1;
sid=CY;
clk=1;
clk=0; }}
unsigned char ReceiveByte(void)
{ unsigned char i,temp1,temp2;
temp1=temp2=0 ;
for(i=0;i<8;i++)
{ temp1=temp1<<1;
clk=0 ;
clk=1 ;
clk=0 ;
if(sid)
temp1++;}
for(i=0;i<8;i++)
{ temp2=temp2<<1 ;
clk=0;
clk=1;
clk=0;
if(sid)
temp2++;}
return ((0xf0&temp1)+(0x0f&temp2));
}
void CheckBusy( void )
{ do SendByte(0xfc);
  while(0x80&ReceiveByte());
}
void WriteCommand( unsigned char Cbyte )
{ cs = 1;
  CheckBusy();
  SendByte(0xf8);
  SendByte(0xf0&Cbyte);
  SendByte(0xf0&Cbyte<<4);
  cs=0;
}
void WriteData( unsigned char Dbyte )
{ cs=1;
  CheckBusy();
  SendByte(0xfa);
  SendBbyte(0xf0&Dbyte);
  SendByte(0xf0&Dbyte<<4);
  cs=0;
}
unsigned char ReadData()
{ unsigned char tmp;
  cs = 1;
  CheckBusy();
  SendBusy(0xfe);
  return ReceiveByte();
  do SendByte(0xfe);
  while(tmp=ReceiveByte())!=0x00;
  return tmp;
  cs=0;
}
void lcd_cls()
{ WriteCommand(0x01);}
void address_reset()
{ WriteCommand(0x02);}
void enter_mode_set(bit i_d,bit s)
{ unsigned char cmd=0x04;
  if (i_d) cmd|=0x02;
  if (s) cmd|=0x01;
  WriteCommand(cmd);
}           
void display_state(bit d,bit c,bit b)
{ unsigned char cmd=0x08;
  if (d) cmd|=0x04;
  if (c) cmd|=0x02;
  if (b) cmd|=0x01;
  WriteCommand(cmd);
}
void cursor_display(bit s_c,bit r_l)
{
  unsigned char cmd =0x10;
  if (s_c) cmd|=0x08;
  if (r_l) cmd|=0x04;
  WriteCommand(cmd);
}
void lcd_mode(bit dl,bit re,bit g)
{ unsigned char cmd =0x20;
  if (dl) cmd|=0x10;
  if (g) cmd|=0x02;
  WriteCommand(cmd);
  if (re) cmd|=0x04;
  WriteCommand(cmd);
}
void DDRAM_address(unsigned char x,unsigned char y)
{
  unsigned char temp=y-1;
  if (y==2) temp=2;
  if (y==3) temp=1;
  WriteCommand(0x80+temp*8+x-1);
}
void await_orders()
{ lcd_cls();
  WriteCommand(0x0q);
}
void coding_display(const char *s)
{ while(*s)
{ WriteData(*s++);}
}
void show_num(unsigned int num)
{ unsigned char d[5];
  d0[0]=num/10000+0x30;
  d0[1]=num%10000/1000+0x30;
  d0[2]=num%1000/100+0x30;
  d0[3]=num%100/10+0x30;
  d0[4]=num%10+0x30;
  if(d[0]!=0x30)
   { coding_display(d);}
   else if(d[1]!=0x30)
     { coding_displayd(d+1);}
  else if(d[2]!=0x30)
    { coding_display(d+2);}
    else if(d[3]!=0x30)
      { coding_display(d+3);}
   else { coding_display(d+4);}
}   
void lcd_init()
{ ret=0;
  ret=1;
  lcd_mode(1,0,0);
  display_state(1,0,0);
  lcd_cls();
  enter_mode_set(1,0);
}
sbit T_CLK=P2^5;
sbit T_IO=P2^6;
sbit T_RST=P2^7;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
typedef struct SYSTEMTIME
{ uchar Second;
  uchar Minute;
  uchar Hour;
  uchar Week;
  uchar Day;
  uchar Month;
  uchar Year;
  uchar DateString[9];
  uchar TimeString[9];
}
SYSTEMTIME;
void WriteB(uchar ucDa)
{ uchar i;
  ACC=ucDa;
  for(i=8;i>0;i--)
{ T_IO=ACC0;
   T_CLK=1;
   T_CLK=0;
   ACC=ACC>>1;
}
}
uchar ReadB(void)
{ uchar i;
  for(i=8;i>0;i--)
{ ACC=ACC>>1;
   ACC7=T_IO;
   T_CLK=1;
   T_CLK=0;
}
return(ACC);
}
void W_1302(uchar ucAddr,uchar ucDa)
{ T_RST=0;
  T_CLK=0;
  T_RST=1;
  WriteB(ucAddr);
  WriteB(ucDa);
  T_CLK=1;
  T_RST=0;
}
uchar R_1302(uchar ucAddr)
{ uchar ucDa;
  T_RST=0;
  T_CLK=0;
  T_RST=1;
  WriteB(ucAddr);
  ucDa=ReadB();
  T_CLK=1;
  T_RST=0;
  return(ucDa);
}
void set_1302()
{ uchar ucAddr=0x80;
  W_1302(0x8e,0x00);
  W_1302(0x80,0x00);
  W_1302(0x82,0x00);
  W_1302(0x84,0x00);
  W_1302(0x86,0x00);
  W_1302(0x88,0x00);
  W_1302(0x8a,0x00);
  W_1302(0x8c,0x00);
}
void get_1302(SYSTEMTIME *Time)
{ uchar Readtime;
  Readtime = R_1302(0x81);
  Time->Second = ((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  Readtime = R_1302(0x83);
  Time->Minute = ((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  Readtime = R_1302(0x85);
  Time->Hour = ((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  Readtime = R_1302(0x87);
  Time->Day = ((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  dd=((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  Readtime = R_1302(0x8b);
  Time->Week = ((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  Readtime = R_1302(0x89);
  Time->Month = ((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  mo=((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  Readtime = R_1302(0x8d);
  Time->Year = ((Readtime&0x70)>>4)*10 + (Readtime&0x0f);
  Time->DateString[0] = Time->Year/10 + '0';
  Time->DateString[1] = Time->Year%10 + '0'; Time->DateString[2] = '-'; Time->DateString[3] = Time->Month/10 + '0'; Time->DateString[4] = Time->Month%10 + '0'; Time->DateString[5] = '-'; Time->DateString[6] = Time->Day/10 + '0'; Time->DateString[7] = Time->Day%10 + '0'; Time->DateString[8] = '\0'; //将十进制数转换为液晶显示的数值 Time->TimeString[0] = Time->Hour/10 + '0';
  Time->TimeString[1] = Time->Hour%10 + '0';
  Time->TimeString[2] = ':';
  Time->TimeString[3] =Time->Minute/10 + '0';
  Time->TimeString[4] = Time->Minute%10+ '0';
  Time->TimeString[5] = ':';
  Time->TimeString[6] = Time->Second/10 + '0';
  Time->TimeString[7] = Time->Second%10+ '0';
  Time->TimeString[8] = '\0';
  Time->TimeString[0] = Time->Hour/10+'0';
  Time->TimeString[1] = Time->Hour%10+'0';
  Time->TimeString[2] = ':';
  Time->TimeString[3] = Time->Minute/10+'0';
  Time->TimeString[4] = Time->Minute%10+'0';
  Time->TimeString[5] = ':';
  Time->TimeString[6] = Time->Second/10+'0';
  Time->TimeString[7] = Time->Second%10+'0';
  Time->TimeString[8] = '\0';
  sec=Time->Second%10;
}
void set_page(unsigned char sel)
{ unsigned char max,mini;
  WriteCommand(0x90);
  show_flag=0;
  if(sel==0) {coding_display("循环工作");max=1; mini=0;sel_flag=sel;}
  if(sel==1) {coding_display("选择工作");max=8; mini=0;sel_flag=sel;}
  if(sel==2) {coding_display("报警通道");max=7; mini=0;sel_flag=sel;}
  if(sel==3) {coding_display("电压设定");max=200; mini=0;sel_flag=sel;}
  if(sel==4) {coding_display("历史通道");max=8; mini=0;sel_flag=sel;}的数据
  if(sel==5) {coding_display("历史7-13");sel_flag=sel;}
  if(sel==6) {coding_display("历史13-18");sel_flag=sel;}
  if(sel==7) {coding_display("历史18-20");sel_flag=sel;}
  WriteCommand(0x95);  
  coding_display(" ");
  if(KEY_2 == 0)
{ temp++;}
if(KEY_4 == 0)
{ temp--;}
if(temp>max)
temp=mini;
if(temp<mini)
temp=max;
if(sel==2){alarm_td=temp;}
if(sel==3){alarm[alarm_td]=temp;}
byte_write(x_j,0x01C2+alarm_td);
}
void up_data()
{ if(sel_flag==3)
{ WriteCommand(0x95);
   show_num(temp/100);
   coding_display(".");
   show_num(temp/10%10);
   temp--;
   show_num(temp%10);
}
else
{ WriteCommand(0x95);
   show_num(temp);
   coding_display(" ");
}
}
void up_page()
{ SYSTEMTIME Realtime;
  get_1302(&Realtime);
  DDRAM_address(1,2);
  coding_display(" 八路采集系统 ");
  DDRAM_address(1,3);
  coding_display("Time:");
  coding_display(Realtime.TimeString);
  DDRAM_address(1,4);
  coding_display("Date:");
  coding_display(Realtime.DateString);
  WriteCommand(0x83);
  coding_display(" ");
  WriteCommand(0x80);
  coding_display("[Dis] ");
  WriteCommand(0x85);
  coding_display(" [Set]");
}
void up_show()
{ if(sel_flag==0)
{
  if(temp==1)
  {
    WriteCommand(0x82);
    coding_display("循环采样");
    WriteCommand(0x90);
    show_num(td);
    coding_display(": ");
    coding_display(".");
    show_num(x_tdat[2*td]%10);
    show_num(x_tdat[2*td+1]/10);
    show_num(x_tdat[2*td+1]%10);;
    coding_display(" v T=");
    show_num(t[td]);
    coding_display(" ");
td=td+1;
    if(td>7) {td=0;}
   }
}
if(sel_flag==1)
{ WriteCommand(0x82);
  coding_display("选择采样");
  WriteCommand(0x90);
  show_num(temp);
  coding_display(": ");
  show_num(x_tdat[2*temp]/10);
  coding_display(".");
  show_num(x_tdat[2*temp]%10);
  show_num(x_tdat[2*temp+1]/10);
  show_num(x_tdat[2*temp+1]%10);
  coding_display(" v T=");
  show_num(t[temp]);
  coding_display(" ");}
if(sel_flag==2)
{ WriteCommand(0x82);
  coding_display("报警通道");
  WriteCommand(0x90);
  coding_display("通道: ");
  show_num(alarm_td);
  alarm_led=1;
}
if(sel_flag==4)
{ uchar j;
  WriteCommand(0x82);
  coding_display("回放历史 ");
  show_num(temp);
  WriteCommand(0x90);
  for(j=x_j;j>0;j--)
{ x_rdat[2*(x_j-j)]=byte_read(2*temp+16*j);
   x_rdat[2*(x_j-j)+1]=byte_read(2*temp+16*j+1); }
  for(j=19;j>x_j;j--)
{ x_rdat[2*(20-j+x_j)]=byte_read(2*temp+16*j); x_rdat[2*(20-j+x_j)]=byte_read(2*temp+16*j+1); }
  for(j=1;j<3;j++)
{ show_num(x_rdat[j*2]/10);
   coding_display(".");
   show_num(x_rdat[j*2]%10);
   show_num(x_rdat[j*2+1]/10);
   show_num(x_rdat[j*2+1]%10);
   coding_display(" v ");
}
WriteCommand(0x88);
for(j=3;j<5;j++)
{ show_num(x_rdat[j*2]/10);
  coding_display(".");
  show_num(x_rdat[j*2]%10);
  show_num(x_rdat[j*2+1]/10);
  show_num(x_rdat[j*2+1]%10);
  coding_display(" v ");
}
WriteCommand(0x98);
for(j=5;j<7;j++)
{ show_num(x_rdat[j*2]/10);
  coding_display(".");
  show_num(x_rdat[j*2]%10);
  show_num(x_rdat[j*2+1]/10);
  show_num(x_rdat[j*2+1]%10); coding_display(" v ");
}}
if(sel_flag==5)
{ unsigned char j;
  WriteCommand(0x90);
  for(j=7;j<9;j++)
  {show_num(x_rdat[j*2]/10);
   coding_display(".");
   show_num(x_rdat[j*2]%10);
   show_num(x_rdat[j*2+1]/10);
   show_num(x_rdat[j*2+1]%10);
   coding_display(" v ");
  }
WriteCommand(0x88);
for(j=9;j<11;j++)
{
  show_num(x_rdat[j*2]/10);
  coding_display(".");
  show_num(x_rdat[j*2]%10);
  show_num(x_rdat[j*2+1]/10);
  show_num(x_rdat[j*2+1]%10);
  coding_display(" v ");
}
WriteCommand(0x98);
for(j=11;j<13;j++)
{
  show_num(x_rdat[j*2]/10);
  coding_display(".");
  show_num(x_rdat[j*2]%10);
  show_num(x_rdat[j*2+1]/10);
  show_num(x_rdat[j*2+1]%10); coding_display(" v ");
}
}
if(sel_flag==6)
{ unsigned char j;
  WriteCommand(0x90);
  for(j=13;j<15;j++)
{
  show_num(x_rdat[j*2]/10);
  coding_display(".");
  show_num(x_rdat[j*2]%10);
  show_num(x_rdat[j*2+1]/10);
  show_num(x_rdat[j*2+1]%10); coding_display(" v ");
}
WriteCommand(0x88);
for(j=15;j<17;j++)
{
  show_num(x_rdat[j*2]/10);
  coding_display(".");
  show_num(x_rdat[j*2]%10);
  show_num(x_rdat[j*2+1]/10);
  show_num(x_rdat[j*2+1]%10);
  coding_display(" v ");
}
WriteCommand(0x98);
for(j=17;j<19;j++)
{
  show_num(x_rdat[j*2]/10);
  coding_display(".");
  show_num(x_rdat[j*2]%10);
  show_num(x_rdat[j*2+1]/10);
  show_num(x_rdat[j*2+1]%10); coding_display(" v ");
}
}
}
void key()
{
if (KEY_3==0)
  {delayms(20);
  if(KEY_3==0&&w==1)
   {lcd_cls();
    e++;
    if (e >7){e = 0;}   
    set_page(e); }
if(KEY_3==0&&w==0)
{lcd_cls();
  w=1;
  WriteCommand(0x80);
  coding_display("Esc");
  WriteCommand(0x86);
  coding_display("Next");
  WriteCommand(0x98);
  coding_display("[+] ");
  WriteCommand(0x9e);
  coding_display(" [-]");
  set_page(e);
}
while(KEY_3==0);
delayms(20);
}
if(KEY_1==0)
{
delayms(50);
if(KEY_1==0&&w==1)
{ w=0;
   e=0;
   while(KEY_1==0);开
   delayms(50);
}
if(KEY_1==0&&w==0)
{
lcd_cls();
w=1;
WriteCommand(0x80);
show_flag=1;
coding_display("Esc");
while(KEY_1 == 0);
delayms(20);
}}
if (KEY_2==0&&w==1)
{ delayms(20);
  if (KEY_2==0&&w==1)
  { set_page(e);
up_data();}
   while(KEY_2==0);
   delayms(20);
}
if (KEY_4==0&&w==1)
{ delayma(20);
  if (KEY_4==0&&w==1)
{ set_page(e);
   up_data();
}
while(KEY_4==0);
delayms(20);
}}
unsigned char comm(unsigned char data add,unsigned char data command)
{ unsigned char idata r_buff[5]={0,0,0,0,0};
  unsigned char data j,err=0;
  e_485=1;
  SBUF=add;while(TI==0);TI=0;
  SBUF=command;while(TI==0);TI=0;
  SBUF=add+command;while(TI==0);TI=0;
  RI=0;
  e_485=0;
for(j=0;j<5;j++)
{ r_dat=0;
  RI=0;
while((RI==0)&&(r_dat<400))
{r_dat++;}
if(RI==1)
{ r_buff[j]=SBUF;RI=0;}
else
{err=1;break;}
}  
if((err==0)&&(r_buff[4]==r_buff[3]+r_buff[2]+r_buff[1]+r_buff[0])&&(r_buff[0]==add))
{ r_dat=0xFF;}
else
{ r_dat=0x00;}
x_tdat[2*add]=r_buff[1];
x_tdat[2*add+1]=r_buff[2];
t[add]=r_buff[3];
if(((r_buff[1]*10+r_buff[2]/10)>alarm[add])&&(alarm[add]!=0))
{
alarm_flag=1;
alarm_td=add;}
return r_dat;
}
void fs() interrupt 1
{
TR0=0;
TH0 = 0x3c;
TL0 = 0xb0;
time=time+1;
show_time=show_time+1;
if(time==2)
{
time=0;
comm(fs_td,0x00);
fs_td=fs_td+1;
}
sec=sec+1;
sec_page=sec_page+1;
if(fs_td>7){fs_td=0;} TR0=1;
}
void diaodian() interrupt 0
{ byte_write(x_j,0x0190);}
void watchdog()
{ dog=0;
  _nop();
  _nop_();
  _nop_();
  dog=1;
}
main()
{
TMOD = 0x21;
TH1 = 0xFD;
TL1 = 0xFD;
TH0 = 0x28;
TL0 = 0x00;
SCON = 0x50;
ET0=1;
select=1;
e_485=0;
EX0=1;
TR1 = 1;
TR0 = 1;
EA=1;
set_1302();
lcd_init();
x_j=byte_read(0x0190);
for(alarm_i=0;alarm_i<8;alarm_i++)
{ alarm[alarm_i]=byte_read(0x01C2+alarm_i);}
while(1)
{ watchdog();
  if (w==0)
  show_flag=0;
}
key();
watchdog();
if((show_flag==1)&&(show_time>15))
{ EA=0;
  up_show();
  EA=1;
  show_time=0;
}
watchdog();
if(sec%150==0)
{
unsigned char i;
sec=0;
for(i=0;i<16;i++)
{
byte_write(x_tdat,16*x_j+i);
}
x_j=x_j+1;
if(x_j>19){x_j=0;}
}
if(alarm_flag==1)
{
alarm_led=~alarm_led;
alarm_flag=0;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:85702 发表于 2015-7-26 11:46 | 只看该作者
194这  SendBbyte,楼主这写多了个b.仔细看下。
回复

使用道具 举报

板凳
ID:86863 发表于 2015-7-26 12:40 | 只看该作者
函数名写错了
回复

使用道具 举报

地板
ID:86731 发表于 2015-7-26 12:52 | 只看该作者
七彩缤纷 发表于 2015-7-26 11:46
194这  SendBbyte,楼主这写多了个b.仔细看下。

哦,还真多了,谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表