资源描述:
《数字钟程序设计答辩》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、班级姓名数字钟程序设计设计模块:数字钟主程序显示模块定时/计数器中断程序按键模块数码管显示液晶显示设计方案:1、本设计采用AT89C52单片机作为时钟控制芯片,利用单片机内部的定时、计数器T0实现时钟。2、用显示器(数码管、液晶)来进行时钟的显示。3、此外,还要实现对时间的调整功能,另外设四个独立的按键,当按下第一个按键时,使时钟停止,另外三个按键,则分别调整时、分、秒。再按下第一个按键时,时钟开始。1、主程序:1)调用显示函数和定时器/计数器初始化函数。2)重复调用数码管显示模块和按键处理模块,当有按键按下时,则转入相应的功能程序。main()//主函数{MYT0_uint();//调用中
2、断函数while(1){display2();//使数码管显示if(k==0)//如果开关k按下,则定时关闭TR0=0;if(k0==0)//如果开关k按下,弹起后秒+1,调秒{while(k0==0){display2();}if(k0==1){miao=miao+1;if(miao==60)miao=0;}}(时、分同样)if(k==1)//如果开关k弹起,则定时打开。{TR0=1;}显示设计:一、显示在数码管上二、显示在液晶上一、数码管显示1)ucharcodedisplay_P0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
3、};//数码管显示段码0~9ucharcodedisplay_P2[]={0x20,0x10,0x08,0x04,0x02,0x01};//数码管显示位码ucharfreq[]={0x00,0x00,0x00,0x00,0x00,0x00};//定义一个数组ucharshi,fen,miao;//定义字符型shi(时)fen(分)miao(秒)voiddisplay()//显示函数{inti;for(i=0;i<6;i++){P2=display_P2[i];P0=display_P0[freq[i]];if((i%2==0)&&(i!=0))d=0;delay(1);}}voiddispl
4、ay2()//时,分,秒的显示函数{freq[0]=miao%10;freq[1]=miao/10;freq[2]=fen%10;freq[3]=fen/10;freq[4]=shi%10;freq[5]=shi/10;display();}一、数码管显示2)display2();//使数码管显示二、液晶显示1)ucharfreq[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};ucharshi,fen,miao;//定义字符型shi(时)fen(分)miao(秒)sbitrs=P3^0;//液晶数据数据命令锁存端(H数据,L命令)sbitrw=P3
5、^1;//声明读写控制变量sbite=P3^2;write_com(uintcom){rs=0;delay(1);rw=0;delay(1);e=0;P2=com;e=1;delay(0);e=0;}write_dat(uintdat){rs=1;delay(1);rw=0;delay(1);e=0;P2=dat;e=1;delay(0);e=0;}LCD_int()//液晶显示初始化{write_com(0x01);//1设置:显示清0,数据指针清0write_com(0x38);//2设置显示模式为:16*2,显示,write_com(0x0c);//3设置:开显示,但光标不显示writ
6、e_com(0x06);//4设置:写一个字符后地址指针+1//write_com(0x0f);//5同2开显示,光标显示并闪烁。}voiddisplay2()//时,分,秒的显示函数{freq[7]=miao%10+'0';freq[6]=miao/10+'0';freq[5]=':';freq[4]=fen%10+'0';freq[3]=fen/10+'0';freq[2]=':';freq[1]=shi%10+'0';freq[0]=shi/10+'0';}二、液晶显示2)write_com(0x44
7、0x80);//写命令字,将数据指针定位到第一行第一字符处for(a=0;a<8;a
8、++)write_dat(freq[a]);三、定时器/计数器T0中断程序T0用于计时,选中工作方式一,重复定时,定时时间设计为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms技术,计20次则对秒单元加一。秒单元加到60则对分单元加以,同时秒单元清0;分单元加到60则对时单元加一,同时分单元清0;时单元加到24则对时单元清0。三、定时器/计数器T0中断程序voidMYT0_uint()//设