您好,欢迎访问三七文档
单片机原理及应用课程设计课题名称:LED电子钟设计专业:班级:学号:姓名:指导教师:年月日目录1.摘要2.设计要求及设计思想2.1.功能需求2.2.设计功能2.3.设计思想3.硬件设计及描述3.1.系统总体线路图3.2.各部分硬件描述3.2.1.AT89C51芯片3.2.2.2×5矩阵键盘3.2.3.共阳极七段数码管4.软件设计流程及描述4.1.程序流程图4.2函数模版及功能5.功能实现及截图6.源程序7.实验总结1.摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。而51单片机是各单片机中最为典型和最有代表性的一种近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机系统中,它往往作为一个核心部件在使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。通过单片机课程设计,我们可以更全面的了解单片机,把书本和实际联系起来,进一步掌握单片机结构和工作原理,通过实际程序设计与调试,逐步掌握模块化程序设计方法和调试技术。在这一过程中,为我们今后的学习打下一定的基础。2.设计要求2.1.功能需求用AT89S51单片机及接口电路设计一个时钟。基本功能:用6个LED数码管分别显示小时、分钟和秒钟。时间初值设置由0~9十个数字键以及四个功能键完成。四个功能键分别是复位(清零)键、小时、分钟和秒钟。时间基准由单片机内的定时器实现。2.2.设计功能1.键盘按键设置初始时间2.三个功能键控制秒,分,小时的显示及调整3.一个功能键控制时间开始2.3.设计思想1.首先设计一个2×5矩阵键盘由0~9构成,由P1端构造。2.在P3端设计4个功能键3.P1和P2端连接七段共阳数码管。3.硬件设计及描述3.1.系统总体线路图3.2.各部分硬件描述3.2.1.AT89C51芯片在这个系统中,AT89C51作为主芯片,其P3^0,P3^1,P3^2,P3^3口分别控制四个独立按键,分别实现对电子时钟的功能控制、对各个位进行相应的增加和减小,共阳七段数码管通过P0口控制其相应显示的值,P2口控制8个数码管显示,P1口连接矩阵键盘。3.2.2.2×5矩阵键盘.行列式键盘用I/O口线组成行列结构,按键设置在交叉点上,在按键数目较多时运用这种连接方式,可节省I/O口连线。行列式键盘的标识最常用的两种方法:行扫描法和线反转法。3.2.3.七段共阳数码管共阳七段数码管通过80C51的P0口控制其相应显示的值,P2口控制那个数码管显示。用除10取余和取整分别给时-分-秒赋值。显示字符012345678共阳数码管C0HF9HA4HB0H99H92H82HF8H80H显示字符9ABCDEFP-共阳数码管90H88H83HC6HA1H86H8EH8CHBFH4.软件设计流程及描述4.1.程序流程图4.2.函数模版及功能(1)voiddelay(unsignedint);延时程序voiddelay(unsignedintz){unsignedintx;for(x=z;x0;x--);}(2)ucharscan();行列扫描确定按键位置;ucharscan(){uchara,b,c,i;P1=0xe0;a=P1;delay(5);P1=0x1f;b=P1;子程序开始延时一秒秒位=60?分位加1分位=60?时位加1时位=24?YYY时位清零开始等待功能键按下运行主程序键盘扫描初值录入与显示时钟跳变结束开始NNNc=a+b;for(i=0;i10;i++)if(c==keytable[i])returni;return10;}(3)voiddisplay();时钟计数,每历时一秒,时间跳变加一秒;voiddisplay(){if(num==20){num=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;min=0;sec=0;}}}}secge=sec%10;secshi=sec/10;minge=min%10;minshi=min/10;hourge=hour%10;hourshi=hour/10;P2=0x01;P0=table[secge];delay(5);P2=0x02;P0=table[secshi];delay(5);P2=0x04;P0=0xbf;delay(5);P2=0x08;P0=table[minge];delay(5);P2=0x10;P0=table[minshi];delay(5);P2=0x20;P0=0xbf;delay(5);P2=0x40;P0=table[hourge];delay(5);P2=0x80;P0=table[hourshi];delay(5);}(4)voidkeyscan();对运行中的时钟进行时间调整;voidkeyscan(){if(ksec==0){delay(10);if(ksec==0){sec++;if(sec=60)sec=0;}while(ksec==0)display();}if(kmin==0){delay(10);if(kmin==0){min++;if(min=60)min=0;}while(kmin==0)display();}if(khour==0){delay(10);if(khour==0){hour++;if(hour=24)hour=0;}while(khour==0)display();}}(5)main();主函数,写入三功能,初始、设定时间、计时;main(){P0=0xbf;while(1){while(ksec==0){scan();p=scan();j++;while(j==1){scan();p=scan();while(p==10){scan();p=scan();}P2=0x02;P0=table[p];secshi=p;j++;}scan();p=scan();while(p!=10){scan();p=scan();}while(j==2){scan();p=scan();while(p==10){scan();p=scan();}P2=0X01;P0=table[p];secge=p;j=0;}ksec;}while(kmin==0){scan();p=scan();j++;while(j==1){scan();p=scan();while(p==10){scan();p=scan();}P2=0x10;P0=table[p];minshi=p;j++;}scan();p=scan();while(p!=10){scan();p=scan();}while(j==2){scan();p=scan();while(p==10){scan();p=scan();}P2=0X08;P0=table[p];minge=p;j=0;}kmin;}while(khour==0){scan();p=scan();j++;while(j==1){scan();p=scan();while(p==10){scan();p=scan();}P2=0x80;P0=table[p];hourshi=p;j++;}scan();p=scan();while(p!=10){scan();p=scan();}while(j==2){scan();p=scan();while(p==10){scan();p=scan();}P2=0X40;P0=table[p];hourge=p;j=0;}khour;}if(kzero==0){break;}}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;sec=10*secshi+secge;min=10*minshi+minge;hour=10*hourshi+hourge;while(1){display();keyscan();}}5.功能实现及截图初始状态,等待按键小时十位设置(24小时制)小时个位设置分与秒的设置于小时的设置同理;时间设置为:23:21:56时间初始值设定运行一会后时间显示功能键小时加一分钟和秒钟的功能键加一同理;6.源程序#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbitksec=P3^0;sbitkmin=P3^1;sbitkhour=P3^2;sbitkzero=P3^3;unsignedcharsecshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;unsignedintnum=0,sec=0,min=0,hour=0;j=0;p=0;unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};unsignedcodekeytable[]={0xde,0xdd,0xdb,0xd7,0xcf,0xbe,0xbd,0xbb,0xb7,0xaf};voiddelay(unsignedint);voiddisplay();voidkeyscan();voidkeyscan();ucharscan();voiddelay(unsignedintz){unsignedintx;for(x=z;x0;x--);}voidkeyscan(){if(ksec==0){delay(10);if(ksec==0){sec++;if(sec=60)sec=0;}while(ksec==0)display();}if(kmin==0){delay(10);if(kmin==0){min++;if(min=60)min=0;}while(kmin==0)display();}if(khour==0){delay(10);if(khour==0){hour++;if(hour=24)hour=0;}while(khour==0)display();}}ucharscan(){uchara,b,c,i;P1=0xe0;a=P1;delay(5);P1=0x1f;b=P1;c=a+b;for(i=0;i10;i++)if(c==keytable[i])returni;return10;}voidtime0()interrupt1{num++;TH0=(65536-50000)/256;TL0=(65536-50000)%256;}voiddisplay(){if(num==20){num=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;min=0;sec=0;}}}}secge=sec%10;secshi=sec/10;minge=min%10;minshi=min/10;hourge=hour%10;hourshi=hour/10;P2=0x01;P0=table[secge];delay(5);P2=0x02;P0=table[secshi];delay(5);P2=0x04;P0=0xbf;delay(5);P2=0x08;P0=table[minge];delay(5);P2=0x10;P0=table[minshi];delay(5);P2=0x20;P0=0xbf;delay(5);P2=0x40;P0=table[hourge];delay(5);P2=0x80;P0=table[hourshi];delay(5);}main(){P0=0xbf;while(1){while(ksec==0){scan();p=scan();j++;//p=scan();
本文标题:LED电子钟设计
链接地址:https://www.777doc.com/doc-5176936 .html