[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]