赞助论坛
  • 2474阅读
  • 0回复

请师傅帮忙看看这个程序不能调整日期的原因 [复制链接]

楼层直达

级别: 超级会员
发帖
1930
精华
0
金币
4214
威望
23
贡献
21
好评
38
注册
2011-05-21
楼主    yangzs88 发表于: 2016-05-03 18:14:21 
[size=font-size: 13.5pt,13.5pt][backcolor=#ffffff][font=simsun, serif]单片机是89C52RC,显示是1602的LCD液晶屏,硬件接口:显示屏的D0--D7对应单片机的P0.0--P0.7,屏的E、RW、RS分别对应单片机P2.6、2.5、2.4。按键K1--K4对应单片机P2.0--2.3.调整时间没问题,就是调整不了日期。有劳大师帮忙看看,问题出在哪?[/font][/backcolor]
[backcolor=#ffffff][font=simsun, serif]程序如下(复制代码请注意!!!有可能会把论坛里的颜色代码,程序编译时没有错误和警告)[/font][/backcolor]

[color=#ff0000]#include <reg52.h>[/color]
[color=#ff0000]#define uchar unsigned char[/color]
[color=#ff0000]#define uint unsigned int[/color]
[color=#ff0000]uchar code  table[]=" 2016/05/03 THU";[/color]
[color=#ff0000]uchar code table1[]="TIME:00-00-00";[/color]
[color=#ff0000]sbit lcd_rs=P2^4;[/color]
[color=#ff0000]sbit lcd_rw=P2^5;[/color]
[color=#ff0000]sbit lcd_en=P2^6;[/color]
[color=#ff0000]sbit k1=P2^0;[/color]
[color=#ff0000]sbit k2=P2^1;[/color]
[color=#ff0000]sbit k3=P2^2;[/color]
[color=#ff0000]sbit k4=P2^3;[/color]
[color=#ff0000]uchar count,k1num;[/color]
[color=#ff0000]char shi,fen,miao;[/color]
[color=#ff0000]void delay(uchar z)[/color]
[color=#ff0000]{[/color]
[color=#ff0000] uint x,y;[/color]
[color=#ff0000] for(x=z;x>0;x--)[/color]
[color=#ff0000] for(y=110;y>0;y--);[/color]
[color=#ff0000]}[/color]
[color=#ff0000]void write_com(uchar com)[/color]
[color=#ff0000]{[/color]
[color=#ff0000] lcd_rs=0;[/color]
[color=#ff0000] lcd_en=0;[/color]
[color=#ff0000] lcd_rw=0;[/color]
[color=#ff0000] P0=com;[/color]
[color=#ff0000] delay(5);[/color]
[color=#ff0000] lcd_en=1;[/color]
[color=#ff0000] delay(5);[/color]
[color=#ff0000] lcd_en=0;[/color]
[color=#ff0000]}[/color]
[color=#ff0000]void write_data(uchar date)[/color]
[color=#ff0000]{[/color]
[color=#ff0000] lcd_rs=1;[/color]
[color=#ff0000] lcd_en=0;[/color]
[color=#ff0000] lcd_rw=0;[/color]
[color=#ff0000] P0=date;[/color]
[color=#ff0000] delay(5);[/color]
[color=#ff0000] lcd_en=1;[/color]
[color=#ff0000] delay(5);[/color]
[color=#ff0000] lcd_en=0; [/color]
[color=#ff0000]}[/color]
[color=#ff0000]void write_fsm(uchar add,uchar date)[/color]
[color=#ff0000]{ [/color]
[color=#ff0000] uchar shi,ge;[/color]
[color=#ff0000] shi=date/10;[/color]
[color=#ff0000] ge=date%10;[/color]
[color=#ff0000] write_com(0x80+0x40+add);[/color]
[color=#ff0000] write_data(0x30+shi);[/color]
[color=#ff0000] write_data(0x30+ge); [/color]
[color=#ff0000]}[/color]
[color=#ff0000]void jiaxian()[/color]
[color=#ff0000]{[/color]
[color=#ff0000]  if(k1num!=0)[/color]
[color=#ff0000]   { [/color]
[color=#ff0000]   if(k2==0)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    delay(5);[/color]
[color=#ff0000]    if(k2==0)[/color]
[color=#ff0000]    {[/color]
[color=#ff0000]     while(!k2);[/color]
[color=#ff0000]     if(k1num==1)[/color]
[color=#ff0000]     {[/color]
[color=#ff0000]      miao++;[/color]
[color=#ff0000]      if(miao==60)[/color]
[color=#ff0000]    [/color]
[color=#ff0000]       miao=0;[/color]
[color=#ff0000]       write_fsm(11,miao);[/color]
[color=#ff0000]       write_com(0x80+0x40+11);[/color]
[color=#ff0000]     [/color]
[color=#ff0000]     }[/color]
[color=#ff0000]           if(k1num==2)[/color]
[color=#ff0000]     {[/color]
[color=#ff0000]      fen++;[/color]
[color=#ff0000]      if(fen==60)[/color]
[color=#ff0000]       fen=0;[/color]
[color=#ff0000]       write_fsm(8,fen);[/color]
[color=#ff0000]       write_com(0x80+0x40+8);[/color]
[color=#ff0000]           }[/color]
[color=#ff0000]        if(k1num==3)[/color]
[color=#ff0000]        {[/color]
[color=#ff0000]        shi++;[/color]
[color=#ff0000]      if(shi==24)[/color]
[color=#ff0000]       shi=0;[/color]
[color=#ff0000]       write_fsm(5,shi);[/color]
[color=#ff0000]       write_com(0x80+0x40+5);[/color]
[color=#ff0000]   [/color]
[color=#ff0000]     }[/color]
[color=#ff0000]   }[/color]
[color=#ff0000]  }[/color]
[color=#ff0000] }[/color]
[color=#ff0000]}[/color]
[color=#ff0000]void jianxian()[/color]
[color=#ff0000]{[/color]
[color=#ff0000] if(k1num!=0)[/color]
[color=#ff0000] {[/color]
[color=#ff0000]  if(k3==0)[/color]
[color=#ff0000]  delay(5);[/color]
[color=#ff0000]  if(k3==0)[/color]
[color=#ff0000]  {[/color]
[color=#ff0000]   while(!k3);[/color]
[color=#ff0000]   if(k1num==1)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    miao--;[/color]
[color=#ff0000]    if(miao==-1)[/color]
[color=#ff0000]     miao=59;[/color]
[color=#ff0000]     write_fsm(11,miao);[/color]
[color=#ff0000]     write_com(0x80+0x40+11);[/color]
[color=#ff0000]   }[/color]
[color=#ff0000]   if(k1num==2)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    fen--;[/color]
[color=#ff0000]    if(fen==-1)[/color]
[color=#ff0000]     fen=59;[/color]
[color=#ff0000]     write_fsm(8,fen);[/color]
[color=#ff0000]     write_com(0x80+0x40+8);[/color]
[color=#ff0000]   }[/color]
[color=#ff0000]   if(k1num==3)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    shi--;[/color]
[color=#ff0000]    if(shi==-1)[/color]
[color=#ff0000]     shi=23;[/color]
[color=#ff0000]     write_fsm(5,shi);[/color]
[color=#ff0000]     write_com(0x80+0x40+5);[/color]
[color=#ff0000]   }[/color]
[color=#ff0000]  }[/color]
[color=#ff0000] }[/color]
[color=#ff0000]}[/color]
[color=#ff0000]void kbscan()[/color]
[color=#ff0000]{[/color]
[color=#ff0000] if(k1==0)[/color]
[color=#ff0000] {[/color]
[color=#ff0000]  delay(5);[/color]
[color=#ff0000]  if(k1==0)[/color]
[color=#ff0000]  { [/color]
[color=#ff0000]   while(!k1);[/color]
[color=#ff0000]   k1num++;[/color]
[color=#ff0000]   TR0=0;[/color]
[color=#ff0000]   if(k1num==1)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    write_com(0x80+0x40+11);[/color]
[color=#ff0000]    write_com(0x0f);  [/color]
[color=#ff0000]   }[/color]
[color=#ff0000]   if(k1num==2)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    write_com(0x80+0x40+8); [/color]
[color=#ff0000]   }[/color]
[color=#ff0000]   if(k1num==3)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    write_com(0x80+0x40+5);[/color]
[color=#ff0000]   }[/color]
[color=#ff0000]   if(k1num==4)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    k1num=0;[/color]
[color=#ff0000]    write_com(0x0c);[/color]
[color=#ff0000]    TR0=1; [/color]
[color=#ff0000]   }[/color]
[color=#ff0000]  }[/color]
[color=#ff0000] }[/color]
[color=#ff0000]  jiaxian();[/color]
[color=#ff0000]  jianxian();[/color]
[color=#ff0000]   [/color]
[color=#ff0000]}[/color]
[color=#ff0000]
[/color]
[color=#ff0000]void init()[/color]
[color=#ff0000]{[/color]
[color=#ff0000] uchar num;[/color]
[color=#ff0000] lcd_rw=0;[/color]
[color=#ff0000] lcd_en=0;[/color]
[color=#ff0000] shi=0;[/color]
[color=#ff0000] fen=0;[/color]
[color=#ff0000] miao=0;[/color]
[color=#ff0000] write_com(0x38);[/color]
[color=#ff0000] write_com(0x0c);[/color]
[color=#ff0000] write_com(0x06);[/color]
[color=#ff0000] write_com(0x01);[/color]
[color=#ff0000] write_com(0x80);[/color]
[color=#ff0000] for(num=0;num<15;num++)[/color]
[color=#ff0000] {[/color]
[color=#ff0000]  write_data(table[num]);[/color]
[color=#ff0000]  delay(5);[/color]
[color=#ff0000] }[/color]
[color=#ff0000] write_com(0x80+0x40);[/color]
[color=#ff0000] for(num=0;num<13;num++)[/color]
[color=#ff0000] { [/color]
[color=#ff0000]  write_data(table1[num]);[/color]
[color=#ff0000]  delay(5); [/color]
[color=#ff0000] }[/color]
[color=#ff0000] TMOD=0x01;[/color]
[color=#ff0000] TH0=(65536-50000)/256;[/color]
[color=#ff0000] TL0=(65536-50000)%256;[/color]
[color=#ff0000] EA=1;[/color]
[color=#ff0000] ET0=1;[/color]
[color=#ff0000] TR0=1; [/color]
[color=#ff0000]}[/color]
[color=#ff0000]void main()[/color]
[color=#ff0000]{[/color]
[color=#ff0000] init();[/color]
[color=#ff0000] while(1)[/color]
[color=#ff0000] { [/color]
[color=#ff0000]  kbscan();[/color]
[color=#ff0000]  if(count==18)[/color]
[color=#ff0000] { [/color]
[color=#ff0000]  count=0;[/color]
[color=#ff0000]  miao++;[/color]
[color=#ff0000]  if(miao==60)[/color]
[color=#ff0000]  {[/color]
[color=#ff0000]   miao=0;[/color]
[color=#ff0000]   fen++;[/color]
[color=#ff0000]   if(fen==60)[/color]
[color=#ff0000]   {[/color]
[color=#ff0000]    fen=0;[/color]
[color=#ff0000]    shi++;[/color]
[color=#ff0000]    if(shi==24)[/color]
[color=#ff0000]    {[/color]
[color=#ff0000]     shi=0;[/color]
[color=#ff0000]    }[/color]
[color=#ff0000]    write_fsm(5,shi);[/color]
[color=#ff0000]   }[/color]
[color=#ff0000]   write_fsm(8,fen);[/color]
[color=#ff0000]  }[/color]
[color=#ff0000]  write_fsm(11,miao);[/color]
[color=#ff0000] }[/color]
[color=#ff0000]  [/color]
[color=#ff0000] } [/color]
[color=#ff0000]}[/color]
[color=#ff0000]void time0() interrupt 1[/color]
[color=#ff0000]{[/color]
[color=#ff0000] TH0=(65536-50000)/256;[/color]
[color=#ff0000] TL0=(65536-50000)%256;[/color]
[color=#ff0000] count++;[/color]
[color=#ff0000] [/color]
[color=#ff0000]}[/color]