资源描述:
《单片机实训报告模板.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、项目一万年历班级:学号:姓名:一、任务目的通过对万年历的设计和制作,应用了单片机的数码管、键盘接口技术,以及定时/计数器、中断等程序设计技术,进一步训练了单片机并行I/O端口的应用能力、循环程序设计、键盘查询程序设计和调试能力,让同学们初步了解了作为单片机的重要输入设备——键盘接口技术和程序设计方法。二、设计要求用单片机设计一个在数码管能同时显示年月日时分秒,具体要求:根据提供的单片机,设计出万年历的硬件电路,编写软件,用Proteus进行仿真实验,然后进行实物的软硬件调试,并撰写符合要求的实训报告。三、系统硬件电路设计可分为最小系统、数码管显示、按键
2、三个单元电路,要求画出各部分电路图,写出工作原理。最小系统:数码管显示:按键:四、软件设计主流程图:流程图:软件设计有三部分:计时(区分大小月与平月)、显示、校时(使用按键)。#includeunsignedcharmsec,sec,min,hou,day=20,mon=3,ci;/*定义msec为50ms计数变量,sec为秒变量,min为分变量,hou为时变量,day为天变量,mon为月变量,ci为循环次数*/intyear=2013;/*定义year为年变量,定义起始年为2013年*/sbitP30=P3^0;/*通过sbit定义
3、可位寻址变量*/sbitP32=P3^2;sbitP33=P3^3;sbitP34=P3^4;voiddelay(unsignedchari)/*延时函数,当i=1时,延时255微秒*/{unsignedcharj,k;for(k=0;k
4、;msec++;//中断次数增1if(msec==20)//中断次数为20次么?{msec=0;//是,1s计时到,50ms计数变量清零sec++;//秒变量加1if(sec==60)//到60s么?{sec=0;//是,1分计时到,秒变量清零min++;//分变量加1if(min==60)//到60分么?{min=0;//是,1小时计时到,分变量清零hou++;//时变量加1if(hou==24)//到24时么?{hou=0;//是,1天计时到,时变量清零day++;//天变量加1if(mon==1
5、
6、mon==3
7、
8、mon==5
9、
10、mon==7
11、
12、
13、mon==8
14、
15、mon==10
16、
17、mon==12)//月是为1,3,5,7,8,10,12么?{if(day==32){day=1;mon++;}}//是,天到32么?是,天变量复位为1,月变量加1elseif(mon==2)//月是为2么?{if(day==29){day=1;mon++;}}//是,天到29么?是,天变量复位为1,月变量加1else//月是为4,6,9,11么?{if(day==31){day=1;mon++;}}//是,天到31么?是,天变量复位为1,月变量加1if(mon==13)//月到13么?{mon=1;//是,1年计时到
18、,月变量复位到1year++;}}}}}}//年变量加1voidmain()//主函数{unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义数字0~9字型显示码,数码管共阴TMOD=0x01;//定时器0工作方式1TR0=1;//启动定时器TH0=0x3c;//50ms定时初值TL0=0xb0;EA=1;//开总中断ET0=1;//定时器0中断while(1){if(P30==1)//P3.0=1么?(开关是开启的么?){for(ci=1;ci<=10;ci
19、++)//for循环,ci的初值为1,判断ci<=10,若小于等于10循环,ci+1,若大于10跳出循环{P2=0x00;P0=led[sec%10];delay(2);//选中P2为0x00时控制的数码管,显示秒个位P2=0x01;P0=led[sec/10];delay(2);//选中P2为0x01时控制的数码管,显示秒十位P2=0x02;P0=led[min%10];delay(2);//选中P2为0x02时控制的数码管,显示分个位P2=0x03;P0=led[min/10];delay(2);//选中P2为0x03时控制的数码管,显示分十位P2
20、=0x04;P0=led[hou%10];delay(2);//选中P2为0x04时控制的数码