《LED电子钟设计(共17页).doc》由会员分享,可在线阅读,更多相关《LED电子钟设计(共17页).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上单片机原理及应用课程设计课题名称: LED电子钟设计 专 业: 班 级: 学 号: 姓 名: 指导教师: 年 月 日目录1.摘要2.设计要求及设计思想 2.1.功能需求 2.2.设计功能 2.3.设计思想3.硬件设计及描述 3.1.系统总体线路图 3.2.各部分硬件描述 3.2.1. AT89C51芯片 3.2.2. 25矩阵键盘 3.2.3.共阳极七段数码管4.软件设计流程及描述 4.1.程序流程图 4.2函数模版及功能5. 功能实现及截图6. 源程序7. 实验总结 1. 摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、
2、发展很快。而51单片机是各单片机中最为典型和最有代表性的一种近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机系统中,它往往作为一个核心部件在使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。通过单片机课程设计,我们可以更全面的了解单片机,把书本和实际联系起来,进一步掌握单片机结构和工作原理,通过实际程序设计与调试,逐步掌握模块化程序设计方法和调试技术。在这一过程中,为我们今后的学习打下一定的基础。2. 设计要求2.1.功能需求 用AT89S51单片机及接口电路设计一个时钟。 基本功能: 用6个LED数码管
3、分别显示小时、分钟和秒钟。时间初值设置由09十个数字键以及四个功能键完成。四个功能键分别是复位(清零)键、小时、分钟和秒钟。时间基准由单片机内的定时器实现。2.2.设计功能 1.键盘按键设置初始时间 2.三个功能键控制秒,分,小时的显示及调整 3.一个功能键控制时间开始2.3.设计思想 1.首先设计一个25矩阵键盘由09构成,由P1端构造。 2.在P3端设计4个功能键 3.P1和P2端连接七段共阳数码管。3.硬件设计及描述3.1.系统总体线路图3.2.各部分硬件描述3.2.1. AT89C51芯片 在这个系统中,AT89C51作为主芯片,其P30,P31,P32,P33口分别控制四个独立按键,
4、分别实现对电子时钟的功能控制、对各个位进行相应的增加和减小,共阳七段数码管通过P0口控制其相应显示的值,P2口控制8个数码管显示,P1口连接矩阵键盘。3.2.2. 25矩阵键盘.行列式键盘用I/O口线组成行列结构,按键设置在交叉点上,在按键数目较多时运用这种连接方式,可节省I/O口连线。行列式键盘的标识最常用的两种方法:行扫描法和线反转法。3.2.3.七段共阳数码管 共阳七段数码管通过80C51的P0口控制其相应显示的值,P2口控制那个数码管显示。用除10取余和取整分别给时-分-秒赋值。显示字符 0 1 2 3 4 5 6 7 8共阳数码管 C0H F9H A4H B0H 99H 92H 82
5、H F8H 80H显示字符 9 A B C D E F P -共阳数码管 90H 88H 83H C6H A1H 86H 8EH 8CH BFH4.软件设计流程及描述4.1.程序流程图YY秒位=60?延时一秒时位=24?时位加1分位=60?分位加1开始子程序开始 NN开始N键盘扫描等待功能键按下初值录入与显示时钟跳变Y运行主程序结束时位清零4.2.函数模版及功能(1) void delay(unsigned int); 延时程序 void delay(unsigned int z) unsigned int x; for(x=z;x0;x-) ; (2) uchar scan(); 行列扫描确
6、定按键位置; uchar scan() uchar a,b,c,i; P1=0xe0; a=P1; delay(5); P1=0x1f; b=P1; c=a+b; for(i=0;i=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
7、)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=tablep;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=tablep;secge=p;j=0;k
8、sec;while(kmin=0) scan();p=scan();j+;while(j=1)scan();p=scan();while(p=10)scan();p=scan();P2=0x10;P0=tablep;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=tablep;minge=p;j=0; kmin; while(khour=0) scan();p=scan();j+;while(j=1)s
9、can();p=scan();while(p=10)scan();p=scan();P2=0x80;P0=tablep;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=tablep;hourge=p;j=0; khour; if(kzero=0) break; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0
10、=1; sec=10*secshi+secge; min=10*minshi+minge;hour=10*hourshi+hourge; while(1) display(); keyscan(); 5. 功能实现及截图 初始状态,等待按键 小时十位设置(24小时制) 小时个位设置分与秒的设置于小时的设置同理;时间设置为:23:21:56 时间初始值设定 运行一会后时间显示 功能键小时加一分钟和秒钟的功能键加一同理;6. 源程序#include #define uchar unsigned char #define uint unsigned int sbit ksec=P30; sbit k
11、min=P31; sbit khour=P32; sbit kzero=P33; unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0; unsigned int num=0,sec=0,min=0,hour=0; j=0; p=0; unsigned char code table=0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0xbf; unsigned code keytable=0xde,0xdd,0xdb,0xd7,0xcf,0xbe,0xbd,0
12、xbb,0xb7,0xaf; void delay(unsigned int); void display(); void keyscan(); void keyscan(); uchar scan(); void delay(unsigned int z) unsigned int x; for(x=z;x0;x-) ; void keyscan() 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+; i
13、f(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(); uchar scan() uchar a,b,c,i;P1=0xe0;a=P1;delay(5);P1=0x1f;b=P1;c=a+b;for(i=0;i10;i+)if(c=keytablei)return i ;return 10; void time0() interrupt 1 num+; TH0=(65536-50000)/25
14、6; TL0=(65536-50000)%256; void display() 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=tablesecge; delay(5); P2=0x02; P0=tablesecshi; del
15、ay(5); P2=0x04; P0=0xbf; delay(5); P2=0x08; P0=tableminge; delay(5); P2=0x10; P0=tableminshi; delay(5); P2=0x20; P0=0xbf; delay(5); P2=0x40; P0=tablehourge; delay(5); P2=0x80; P0=tablehourshi; delay(5); main() P0=0xbf;while(1)while(ksec=0) scan();p=scan();j+; /p=scan();while(p=10)scan();p=scan(); 等待
16、键按下(也想了一段时间) while(j=1)scan();p=scan();while(p=10)scan();p=scan();P2=0x02;P0=tablep;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=tablep;secge=p;j=0; ksec; while(kmin=0) scan(); p=scan
17、(); j+; while(j=1)scan();p=scan();while(p=10)scan();p=scan();P2=0x10;P0=tablep;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=tablep;minge=p;j=0; kmin; while(khour=0) scan(); p=scan(); j+; while(j=1)scan();p=scan();while(p=
18、10)scan();p=scan();P2=0x80;P0=tablep;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=tablep;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
19、; min=10*minshi+minge;hour=10*hourshi+hourge;while(1)display();keyscan(); 7. 实验总结 通过这次时钟的设计,让我对简单应用程序的编程有了深刻的了解和学习,对AT89S51单片机的学习更深刻、更有效,对其结构及其各个接口进行了再一次的学习和认知,尤其是串行口的利用,更是在本次实验中获得了提高。以前的书本学习一直都是在纸上谈兵,通过这次自己做时钟,我对单片机才有了真正意义上的认识,对它能够更好的进行编程。说到编程,这次的实验对我的编程能力有了很大的提高。当然,我也遇到了很多困难,比如25矩阵键盘的设计,代码表设计出现问题。比如,初始时间的设置,通过键盘控制显示,键盘按键与时间的显示不对应,有时按了键却没有显示等问题。通过查询资料,以及旧知识的重新认知与巩固,终于实现了各项功能。对于这些电路还是应该投入到实际操作中,去发现,去尝试,这样才能得到更多的知识与更好的经历。 在这次设计过程中,体现出自己进行单片机设计调试的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。通过对程序的不断完善,硬件的不断改变,从而不断提高自己对程序的理解能力,编程的能力,并且不断的提高了自己对单片机的了解,对单片机的应用等。专心-专注-专业
限制150内