资源描述
For personal use only in study and research; not for commercial use 芄基于 51 单片机 24 小时可调时钟 1602 液晶显示程序 膂 #in clude 薆 #defi ne uchar un sig ned char 蚆 #defi ne uint un sig ned int 蒂 sbit key1=P1A0; 薁 sbit key2=P1Al; 芆 sbit key3=P1A2; 蒃 sbit key4=P1A3; 薁 sbit key5=P1A4; 羁 sbit key6=P1A5; 肆sbit rs=P0A0; 液晶的第 4 端 RS 由开关独立 s2卩3人5 控制高电平写数据,低电平写命 令。 薅sbit lecdn=P0A1; 使能端需控制 LECDN,卩3人6 控制。根据硬件电路而定 袃 uchar miao ,fen ,shi, num; 蒀 uchar miao1,miao2,shi1,shi2,fe n1,fe n2; 螇 uchar table=0123456789; 蚆 void delay( uint x) 肂 薅 uint i,j; 芃 for(i=x; i0;i-) 腿 for(j=10;j0;j-); 膀 肅 void write_com(uchar com )/ 写指令 肄 賺 P2=com; 芈 RW=0;写指令位定义一个 io 口控制 ? 螈lecd n=0; /起初为低电平 时序图 螄 rs=0; II 写指令 rs 为低 节 delay(IO); II 简短延时 莇 lecd n=1; II 给以高脉冲 腿 delay(5); 蒄 lecd n=0; 肀 蝿 void write_data(uchar shu ) II 写数据 薇 芅 P2=shu; 将数据送给控制数据位的 io 口 賺 RW=0;写指令位定义一个 io 口控制 ? lecd n=0;蒈 rs=1; /写数据 rs 为低 区别 蒇 delay(10); 蚅 lecd n=1; 蚂 delay(5); 袈 lecd n=0; 膈 蒂 void in it() 初始化 螁 芇 write_com(0 x38); 显示模式设置 蚄 delay(20); 蒃 write_com(0 x0f); /显示开关,和光标设置,开关必开,光标不开 0 x0f 衿 delay(20); 螇 write_com(0 x06); /写完一个数据, 数据地址指针自动往后移动一位 蒅 delay(20); 薅 write_com(0 x01); /清屏指令,按下复位键上次的结果变清掉。 oxOc,开并闪烁 蒀 void tiaoshi() 膅 莂 if(ke y仁=0) 莀 衿 delay(100); if(key1=0) 莄 TRO=O; if(miao!=59) miao+; else miao=0; delay(IOOOO); if(key1=1) TR0=1; if(key2=0) delay(IOO); if(key2=0) TR0=0; if(miao!=0) miao-; else miao=59; delay(IOOOO); 蒆 if(key1=1) 肄 TR0=1; 羀 蚆 袅 if(key3=0) 薀 肁 delay(IOO); 聿 if(key3=0) 芄 莀 if(fen !=59) 衿 fen+; 腿 else 蚄 fen=O; 肁 袀 螇 if(key4=0) 薅 芃 delay(IOO); 蒃 if(key4=0) 膀 肄 if(fen !=O) 肃 fen-; 芀 else 芈 fen=59; 螈 螄 节 if(key5=0) 薀 腿 delay(IOO); 蒄 if(key5=0) 聿 蝿 if(shi!=23) 薆 shi+; 芄 else 賺 shi=0; 袇 羆 羅 if(key6=0) 膂 腿 delay(IOO); 蒅 if(key6=0) 螅 罿 if(shi!=0) 莈 shi-; 薆 ini t(); /缺少此初始化屏幕出现乱码 薈 羂 void shuzi() 袈 薅 miao仁miao/10; 蚃 miao2=miao%10; 蒈 shi仁 shi/10; 蚅 shi2=shi%10; 蚃 fen 1=fe n/10; 膃 fen 2=fe n%10; 腿 蚇 void main() 肅 薂 EA-1; 总中断一定是允许的。 罿 ET0=1; 打开定时器中断 0 螈 TMOD-OxOl; /设置工作模式方式一 膄 TH0-(65526-50000)/256; /给定时器装初值,高八位取整,低八位取余。 羁 TL0- (65526-50000)%256; 蒅 shi=23; 肁 蚀 袄 else 虿 TR0-1; 启动定时器 薆 shuzi(); 数字函数应该放在大循环里,否则会出现数字全 0 蒁 while(1) 莀 薇 shuzi(); 蚄 write_com(0 x82); 肄 delay(100); 膀 write_data(tableshi1); 蚈 delay(100); 螃 write_com(0 x83); 薄 delay(100); 袀 write_data(tableshi2); 蒆 delay(100); 肅 write_com(0 x85); 羃 delay(20); 蚁 write_data(tablefe n1); 薇 delay(20); 芄 write_com(0 x86); 莂 delay(20); 莁 write_data(tablefe n2); 薈 delay(50); 薆 write_com(0 x88);薆 ini t(); /缺少此初始化屏幕出现乱码 袂 delay(IOO); 膂 write_data(tablemiao1); 莆 delay(100); 蚄 write_com(0 x89); -+- 芁 delay(100); 薈 write_data(tablemiao2); 蒇 delay(50); 袃 write_com(0 x84); 蚀 delay(20); 螁 write_data(-); 羁 delay(20); 蚇 write_com(0 x87); 祎 delay(20); 薁 write_data(-); 螈 delay(50); 螆 tiaoshi(); 调时函数如果与在前面会会产生数子挺好久才显示出来! 芅 芁 螀 void timeO() in terrupt 1 膈 蚅 TH0=(65526-50000)/256; 肂 TL0=(65526-50000)%256;袁 nu m+; / 此中断 50 毫秒,num+的目的使其达到二十次。 if(num=20) num=0; if(miao=59) miao=0; if(fen=59) fen=0; if(shi=23) shi=0; else shi+; else fen+; else miao+; 仅供个人用于学习、研究;不得用于商业用途 For personal use only in study and research; not for commercial use. Nur f u r den pers?nlichen f u r Studien, Forschung, zu kommerziellen Zwecken verwendet werden. Pour l e tude et la recherche uniquement a des fins personnelles; pas a des fins commerciales. TO员BKO gA.nrogeHKO TOpMenob3ymrnflCH6yHeHuac egoB u HHuefigoHM _ 以下无正文 _ UCnO 员 B30BaTbCE B KOMMepqeckux ue 贝 EX.
展开阅读全文