用1602模拟电子钟功能
来源:互联网 发布时间:2018-12-12 分享至微信


实现一个简单的电子钟功能,按S1键可选择调整时、分、秒,s2上调,s3下调




未实现调整日期功能





2


3 /*


4 li 8/17/2010


5 */


6 #include


7 #define uint unsigned int


8 #define uchar unsigned char


9 sbit lcden=P3^4;


10 sbit lcdrs=P3^5;


11 sbit dula=P2^6;


12 sbit wela=P2^7;


13


14 sbit s1=P3^0;


15 sbit s2=P3^1;


16 sbit s3=P3^2;


17 sbit vss=P3^7;


18 uchar timeNum,i,Number,keyNum; //timeNum定时器计数,i For循环计数 Number时间临时变量 keyNum显示指针位置


19 char shi,fen,miao;


20 uchar code date[]="2010-08-17";


21 uchar code time[]="00:00:00";


22 //初始化


23 void init()


24 {


25 TMOD=0x01;


26 TH0=0xEE;


27 TL0=0x00;


28 ET0=1;


29 EA=1;


30 TR0=1;


31 dula=0;


32 wela=0;


33 }


34


35 //定时器


36 void timer() interrupt 1


37 {


38 TH0=0xEE;


39 TL0=0x00;


40 timeNum++;


41 }


42


43 //简单延时


44 void delay(uchar x)


45 {


46 uchar i;


47 while (x--)


48 for (i=0;i<110;i++);


49 }


50


51 //写命令


52 void write_com(uchar com)


53 {


54 lcdrs=0;


55 P0=com;


56 delay(1);


57 lcden=1;


58 lcden=0;


59 }


60


61 //写数据


62 void write_data(uchar date)


63 {


64 lcdrs=1;


65 P0=date;


66 delay(1);


67 lcden=1;


68 lcden=0;


69 }


70


71 //拆分十位和各位并显示


72 void sfm(uchar add,uchar Num)


73 {


74 uchar shi,ge;


75 shi=Num/10;


76 ge=Num%10;


77 write_com(0x80+0x40+add);


78 write_data(0x30+shi);


79 write_data(0x30+ge);


80 }


81


82 //1602初始化显示


83 void display()


84 {


85 write_com(0x38);


86 write_com(0x0C);


87 write_com(0x06);


88 write_com(0x01);


89 write_com(0x80);


90 for (i=0;i<10;i++)


91 {


92 write_data(date[i]);


93 }


94 write_com(0x80+0x40);


95 for (i=0;i<8;i++)


96 {


97 write_data(time[i]);


98 }


99 }


100


101 //扫描键盘


102 void keysacn()


103 {


104 vss=0;


105 if (s1==0)


106 {


107 delay(5);


108 if (s1==0)


109 {


110 keyNum++;


111 while (!s1);


112 write_com(0x0F);


113 TR0=0;


114 }


115 switch (keyNum)


116 {


117 case 1:


118 write_com(0x80+0x40+7);


119 break;


120 case 2:


121 write_com(0x80+0x40+4);


122 break;


123 case 3:


124 write_com(0x80+0x40+1);


125 break;


126 case 4:


127 keyNum=0;


128 write_com(0x0C);


129 TR0=1;


130 break;


131 }


132 }


133 if(keyNum!=0)


134 {


135 if(s2==0)


136 {


137 delay(5);


138 if (s2==0)


139 {


140 while(!s2);


141 switch (keyNum)


142 {


143 case 1:


144 miao++;


145 if(miao==60)


146 miao=0;


147 sfm(6,miao);


148 write_com(0x80+0x40+7);


149 break;


150 case 2:


151 fen++;


152 if(fen==60)


153 fen=0;


154 sfm(3,fen);


155 write_com(0x80+0x40+4);


156 break;


157 case 3:


158 shi++;


159 if(shi==24)


160 shi=0;


161 sfm(0,shi);


162 write_com(0x80+0x40+1);


163 break;


164 }


165 }


166 }


167 if(s3==0)


168 {


169 delay(5);


170 if (s3==0)


171 {


172 while(!s3);


173 switch (keyNum)


174 {


175 case 1:


176 miao--;


177 if(miao==-1)


178 miao=59;


179 sfm(6,miao);


180 write_com(0x80+0x40+7);


181 break;


182 case 2:


183 fen--;


184 if(fen==-1)


185 fen=59;


186 sfm(3,fen);


187 write_com(0x80+0x40+4);


188 break;


189 case 3:


190 shi--;


191 if(shi==-1)


192 shi=23;


193 sfm(0,shi);


194 write_com(0x80+0x40+1);


195 break;


196 }


197 }


198 }


199 }


200 }


201 void main()


202 {


203 init();


204 display();


205 while (1)


206 {


207 if (timeNum==200)


208 {


209 timeNum=0;


210 miao++;


211 if (miao==60)


212 {


213 miao=0;


214 fen++;


215 if (fen==60)


216 {


217 fen=0;


218 shi++;


219 if (shi==24)


220


[ 新闻来源:互联网,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论

暂无评论哦,快来评论一下吧!