电子钟的设计 C语言编程

合集下载

电子时钟c语言课程设计

电子时钟c语言课程设计

电子时钟c语言课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中结构体、指针、函数等基本概念;2. 学生能运用C语言编程实现电子时钟的功能,包括时、分、秒的显示与更新;3. 学生了解电子时钟的原理,明确时间与计算机系统时间的关系。

技能目标:1. 学生能运用所学知识,设计并编写出具有实际功能的电子时钟程序;2. 学生通过课程学习,掌握编程调试技巧,提高解决问题的能力;3. 学生能够进行团队协作,共同分析问题、设计解决方案并完成项目。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发探索精神,增强学习动力;2. 学生通过课程学习,认识到编程在实际生活中的应用,提高学习的实用性;3. 学生在团队协作中,学会沟通与交流,培养合作精神和团队意识。

课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握C语言编程的基本技能,培养实际编程能力。

学生特点:学生已经掌握了C语言的基本语法,具有一定的编程基础,但对实际项目的开发流程和团队协作经验不足。

教学要求:教师需引导学生将所学理论知识应用于实际项目,注重培养学生的动手能力、解决问题的能力和团队协作能力。

在教学过程中,将目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. C语言基础回顾:结构体、指针、函数的定义与使用;2. 电子时钟原理介绍:时间概念、计算机系统时间处理;3. 编程环境准备:配置开发环境、编译与调试;4. 项目需求分析:明确电子时钟的功能需求、界面设计;5. 编程实现:- 设计结构体存储时间数据;- 编写函数实现时、分、秒的更新;- 实现界面显示与交互;- 处理异常情况与边界条件;6. 项目测试与优化:测试电子时钟程序、优化代码性能;7. 团队协作与交流:分组进行项目开发、组内讨论与分享;8. 课堂总结与反馈:总结项目开发过程、收集学生反馈。

教材关联章节:C语言基础、结构体与指针、函数、项目实践。

教学内容安排与进度:1. 基础知识回顾(1课时);2. 电子时钟原理介绍(1课时);3. 编程环境准备与项目需求分析(1课时);4. 编程实现(4课时);5. 项目测试与优化(2课时);6. 团队协作与交流(2课时);7. 课堂总结与反馈(1课时)。

电子钟设计c语言设计

电子钟设计c语言设计

电子钟设计c语言设计电子钟是一种使用数字或者模拟显示时间的时钟。

它通常使用数字显示屏或者液晶屏来显示时间。

电子钟的优势在于与传统机械钟相比,它更加准确、可靠、精准和方便。

通过使用c语言来设计电子钟可以使它更加智能化和强大。

我们知道,c语言是一种通用的高级编程语言,它非常适合用于系统编程和应用程序开发。

电子钟的设计需要运用c语言的数据结构、算法、指针和其他通用编程技术。

设计一个可靠的电子钟需要考虑到准确显示时间、时区调整、闹钟功能、定时器和更多的功能。

在设计电子钟时,我们首先需要考虑到选择合适的开发平台和硬件选型。

例如,我们可以使用Arduino或者Raspberry Pi 等开发板来设计电子钟。

这些开发板既能提供强大的计算能力,又可以提供足够的GPIO引脚和通信接口。

同时,我们还需要选择合适的时钟模块,例如DS1307、DS3231和DS1302等。

接下来,我们可以考虑设计程序框架。

设计程序框架需要考虑到用户需求,从而使程序有条不紊地进行。

我们可以设计菜单选项来满足用户需求,例如时钟显示、日期显示、温度显示等等。

此外,还可以考虑添加一些有趣的功能,例如给予经度和纬度计算日出日落时间以及天气预报等。

电子钟的时间显示通常使用RTC模块与单片机进行通信。

RTC模块可以提供秒、分、时、日、月、年等时间数据。

我们需要从RTC模块读取这些数据,并将它们转换成格式化的字符串进行显示。

我们还需要考虑到时区的调整,以便在不同时区下准确显示时间。

闹钟功能是电子钟的一个重要特性。

我们可以设计界面来设置闹钟时间和日期。

当闹钟响起时,电子钟可以触发警报并发出声音或声音和振动提醒。

我们还可以增加关闭闹钟的选项,以便用户可以在闹钟响起时快速关闭它。

另一个特色功能是定时器,它可以用来进行倒计时或计时操作。

我们可以使用按钮或者旋转编码器来设置定时器时间。

定时器可以在倒计时或计时完成时发出警报来通知用户,以便执行相应的操作。

最后,我们需要考虑到电子钟的可扩展性和灵活性。

C语言课程设计 时钟代码

C语言课程设计 时钟代码

/*电子时钟源代码*/#include<graphics.h>#include<stdio.h>#include<math.h>#include<dos.h>#define PI 3.1415926 /*定义常量*/#define UP 0x4800 /*上移↑键:修改时间*/#define DOWN 0x5000 /*下移↓键:修改时间*/#define ESC 0x11b /*ESC键:退出系统*/#define TAB 0xf09 /*TAB键:移动光标*//*函数声明*/int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/int timeupchange(int); /*处理上移按键*/int timedownchange(int); /*处理下移按键*/int digithour(double); /*将double型的小时数转换成int型*/int digitmin(double); /*将double型的分钟数转换成int型*/int digitsec(double); /*将double型的秒钟数转换成int型*/void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/void drawcursor(int); /*绘制一个光标*/ void clearcursor(int);/*消除前一个光标*/void clockhandle(); /*时钟处理*/ double h,m,s; /*全局变量:小时,分,秒*/double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/struct time t[1];/*定义一个time结构类型的数组*/main(){int driver, mode=0,i,j;driver=DETECT; /*自动检测显示设备*/initgraph(&driver, &mode, "");/*初始化图形系统*/setlinestyle(0,0,3); /*设置当前画线宽度和类型:设置三点宽实线*/ setbkcolor(0);/*用调色板设置当前背景颜色*/setcolor(9); /*设置当前画线颜色*/ line(82,430,558,430);line(70,62,70,418);line(82,50,558,50);line(570,62,570,418);line(70,62,570,62);line(76,56,297,56);line(340,56,564,56); /*画主体框架的边直线*//*arc(int x, int y, int stangle, int endangle, int radius)*/arc(82,62,90,180,12);arc(558,62,0,90,12);setlinestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(558,418,270,360,12); /*画主体框架的边角弧线*/setcolor(15);outtextxy(300,53,"CLOCK"); /*显示标题*/setcolor(7);rectangle(342,72,560,360); /*画一个矩形,作为时钟的框架*/setwritemode(0); /*规定画线的方式。

电子时钟计时器的设计(c语言版_调试完美通过_可直接使用)(附原理图源程序以及完整的文档)

电子时钟计时器的设计(c语言版_调试完美通过_可直接使用)(附原理图源程序以及完整的文档)

湖南人文科技学院课程设计报告课程名称:单片机原理及应用课程设计设计题目:电子时钟的设计系别:通信与控制工程系专业:通信工程班级:09级通信二班学生姓名: 袁琦黄文付学号: 09416230 09416227起止日期: 2011年12月20日~2011年12月30日指导教师:王善伟姚毅谢四莲教研室主任:刘建闽.指导教师评语:指导教师签名:年月日成绩评定项目权重成绩袁琦黄文付1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:.摘要时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事物入手,通过对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领域的探索。

本文利用单片机实现数字时钟计时功能的主要内容。

它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上。

本次设计采用独立式按键进行时间调整,其中STC89C52是核心元件,同时采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。

与传统机械表相比,它具有走时精确,显示直观等特点。

它的计时周期为24小时,显满刻度为“23时59分59秒”,另外利用DS1302具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。

该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。

关键词:STC89C52 ;LED数码管;8255芯片;DS1302芯片;目录设计要求 (1)1.方案论证与对比 (1)1.1方案一 (1)1.2方案二 (2)1.3方案对比 (3)2.系统硬件电路的设计 (3)2.1单片机的选择及引脚功能介绍 (3)2.2 8255A芯片的结构及引脚功能介绍 (5)2.3 DS1302芯片的结构及引脚功能介绍 (8)2.4显示电路设计 (9)2.5电源电路设计 (10)2.6键盘动态扫描电路设计 (10)3.控制系统的软件设计 (12)3.1主程序流程图 (12)3.2显示子程序 (13)3.3闹钟时间设定功能程序 (14)3.4键盘扫描程序 (15)4.系统功能调试与整体指标 (16)4.1硬件调试与分析 (16)4.2软件调试与分析 (16)4.3性能分析 (16)5.详细仪器清单 (17)6.总结与思考及致谢 (18)参考文献 (19)附录一:程序(方案一) (21)附录二:程序(方案二) (36)电子时钟的设计设计要求利用单片机作为控制核心,完成一个时钟计时器。

C语言实现电子时钟程序

C语言实现电子时钟程序

C语⾔实现电⼦时钟程序本⽂实例为⼤家分享了C语⾔实现电⼦时钟程序的具体代码,供⼤家参考,具体内容如下Qt ⾥⾯运⾏#include<windows.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>typedef struct{int x;int y;}Point;time_t now;struct tm *pt, t1, t2;int printpoint(Point p){Point p1;p1.x = p.x + 2; p1.y = p.y + 4;gotoxy(p1.x, p1.y); printf("%c%c", 2, 2);gotoxy(p1.x, p1.y + 1); printf("%c%c", 2, 2);p1.y += 4;gotoxy(p1.x, p1.y); printf("%c%c", 2, 2);gotoxy(p1.x, p1.y + 1); printf("%c%c", 2, 2);return 0;}int print0(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);elseprintf("%c%4s%c", 2, " ", 2);}return 0;}int print1(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);printf("%5s%c", " ", 2);}return 0;}int print2(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else if (i>0 && i<6)printf("%5s%c", " ", 2);elseprintf("%c", 2);}return 0;}int print3(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);elseprintf("%5s%c", " ", 2);}return 0;}int print4(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i<6) printf("%c%4s%c", 2, " ", 2);else if (i == 6)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else printf("%5s%c", " ", 2);}return 0;}int print5(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else if (i>0 && i<6)printf("%c", 2);elseprintf("%5s%c", " ", 2);}return 0;}int print6(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else if (i>0 && i<6)printf("%c", 2);elseprintf("%c%4s%c", 2, " ", 2);}return 0;}int print7(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0) printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2); else printf("%5s%c", " ", 2);}return 0;}int print8(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2);else printf("%c%4s%c", 2, " ", 2);}return 0;}int print9(Point p){int i = 0;for (; i<13; i++){gotoxy(p.x + 1, p.y + i);if (i == 0 || i == 6 || i == 12)printf("%c%c%c%c%c%c", 2, 2, 2, 2, 2, 2); else if (i>0 && i<6)printf("%c%4s%c", 2, " ", 2);elseprintf("%5s%c", " ", 2);}return 0;}int clear(Point p){int i = 0;for (; i<13; i++)gotoxy(p.x, p.y + i); printf("%16s", " ");return 0;}int printtime(Point p, int n){int a, b;Point pp;a = n / 10,b = n % 10;pp.x = p.x + 8, pp.y = p.y;switch (a){case 0: print0(p); break;case 1: print1(p); break;case 2: print2(p); break;case 3: print3(p); break;case 4: print4(p); break;case 5: print5(p); break;}switch (b){case 0: print0(pp); break;case 1: print1(pp); break;case 2: print2(pp); break;case 3: print3(pp); break;case 4: print4(pp); break;case 5: print5(pp); break;case 6: print6(pp); break;case 7: print7(pp); break;case 8: print8(pp); break;case 9: print9(pp); break;}return 0;}int main(){Point phour, pmin, psec, point1, point2;phour.x = 9, pmin.x = 32, psec.x = 55;phour.y = pmin.y = psec.y = 7;point1.x = 25, point2.x = 49;point1.y = point2.y = 7;clrscr();textbackground(YELLOW); /* 设置背景颜⾊*/ textcolor(RED); /* 设置数字显⽰颜⾊*/now = time(0);pt = localtime(&now);t1 = *pt;printtime(phour, t1.tm_hour);printpoint(point1);printtime(pmin, t1.tm_min);printpoint(point2);printtime(psec, t1.tm_sec);while (1){now = time(0);pt = localtime(&now);t2 = *pt;if (t2.tm_sec != t1.tm_sec){t1 = t2;clrscr();printtime(phour, t1.tm_hour);printpoint(point1);printtime(pmin, t1.tm_min);printpoint(point2);printtime(psec, t1.tm_sec);}if (bioskey(1) == 0) continue;else exit(0);}return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

AT89C52电子时钟c设计

AT89C52电子时钟c设计
timecount2++;
}
else
{
timecount=0;
second++;
}
}
////////////////////////////显示日期////////////////////////////////////
p0=outfunction(month%10);
delay(5);
p0=0x00;
p2=cout2[6];
p0=outfunction(date/10);
delay(5);
p0=0x00;
p2=cout2[7];
p0=outfunction(date%10);
delay(5);
p0=0x00;
recount();//换算时分秒
}
}
///////////////////////////////时间设置////////////////////////////////////
void int1() interrupt 2 using 1
p2=cout2[1];
p0=outfunction((year%1000)/100);
delay(5);
p0=0x00;
p2=cout2[2];
p0=outfunction((year%100)/10);
delay(5);
p0=0x00;
p0=outfunction(minute%10);
delay(5);
p0=0x00;
p2=cout2[5];
p0=cout1[10];
delay(7);

世上最简单的遥控(数码管显示)电子钟(C语言编写)

世上最简单的遥控(数码管显示)电子钟(C语言编写)

世上最简单的遥控(数码管显示)电子钟(C语言编写)/*此程序为红外遥控电子钟,晶振为12M,MCU 型号为51 系列,电路很简单四位共阳数码管,红外接收管sm0038 接在P3.2*/#include #define uchar unsigned char#define uint unsigned int#define c(x) (x*120000/120000)sbit IR=P3 ; sbit ge=P2;//数码管四位选控制端sbit shi=P2 ;sbit bai=P2;sbit qian=P2;char miao,fen=59,shij=23;//时分秒3 个变量uchar num,ding; //两定时器计数变量uint temp;//遥控解码变量uchar i;uchar j;bit flag;//控制小数点亮与灭变量bit power;//控制数码管亮与灭变量bit flash;//进入时间调整标志位变量uchar IRBUF[4]; //用于保存解码结果uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};uint Low(){TL0=0;TH0=0;TR0=1;while(!IR&&(TH0&0x80)==0);TR0=0;returnTH0*256+TL0;}//=============================================================uintHigh(){TL0=0;TH0=0;TR0=1;while(IR&&(TH0&0x80)==0);TR0=0;returnTH0*256+TL0;}void xian(uchar shik,uchar fen){P0=table[shik/10];if(power==0)qian=0;elseqian=1;//delay(2);qian=1;if(flag==0)P0=table[shik%10]&0x7f;elseP0=table[shik%10]|0x80;if (power==0)bai=0;elsebai=1;//delay(2);bai=1;P0=table[fen/10];if(power==0)shi=0;els eshi=1;//delay(2);shi=1;P0=table[fen%10];if(power==0)ge=0;elsege=1;//delay(2);ge =1;}void yin(){while(1){ restart: while(IR) {xian(shij,fen); if(flash==1) { if(ding>5) { ding=0; power=~power; //xian(shij,fen); } } }。

电子时钟C代码

电子时钟C代码

#include<iostream.h>#include<iomanip.h>#include<time.h>class CDateTime{private:int year;int month;int days;int hour;int minute;int second;int wday; //星期private:int YearToDays(int y); int DatesToDays();int MonthToWeek();int YearMonthToDay( int y,int m);public:CDateTime(int y=0,int m=0,int d=0,int h=0,int mt=0,int s=0) {year=y;month=m;days=d;hour=h;minute=mt;second=s;wday=DatesToWeek();}~CDateTime(){}void Now();int DatesToWeek();CDateTime LastMonth();CDateTime NextMonth();void LastTime();void InputYearMonth();void PrintMonth();void InputDates();int Week(){return wday;}CDateTime operator+(const int &n);CDateTime operator-(const int &n);int operator-( CDateTime &dt);friend ostream & operator<< ( ostream & out, const CDateTime &c);};void CDateTime::Now(){time_t te;tm *tp;time(&te);tp=localtime(&te);year=tp->tm_year+1900;month=tp->tm_mon+1;days=tp->tm_mday;hour=tp->tm_hour;minute=tp->tm_min;second=tp->tm_sec;wday=tp->tm_wday;}CDateTime CDateTime:: operator-(const int &n) {int m=n;int mday;CDateTime dt(*this);mday=YearMonthToDay(dt.year,dt.month);while(dt.days+m >mday){dt.month--;if(dt.month>1){dt.year-=1;dt.month=12;m-=mday;mday=YearMonthToDay(dt.year,dt.month); }dt.days+=m;return dt;}CDateTime CDateTime::operator+(const int &n) {int m=n;int mday;CDateTime dt(*this);mday=YearMonthToDay(dt.year,dt.month);while(dt.days+m > mday){dt.month++;if(dt.month>12){dt.year+=1;dt.month=1;m-=mday;mday=YearMonthToDay(dt.year,dt.month); }dt.days+=m;return dt;}int CDateTime::operator-( CDateTime &dt) {int y=dt.year;int m=dt.month;int t1 = dt.DatesToDays ();int t2 = DatesToDays();return (t2 - t1);}int CDateTime::YearToDays(int y){int d=0;int i=(y-1900)*365;while(y>1900)if((y-1)% 4 ==0 && (y-1) % 100 != 0 || (y-1) % 400 == 0)++d;--y;}return(d+i);}int CDateTime::YearMonthToDay(int y,int m ){int mday=0;switch(m){case 1: case 3: case 5: case 7: case 8: case 10: case 12: mday=31;break;case 2:if(y % 4 ==0 && y % 100 != 0 || y % 400 == 0)mday=29;elsemday=28;break;case 4: case 6: case 9: case 11:mday=30;break;default:mday=0;}return mday;}int CDateTime::DatesToDays( ){int total = 0;while( month >1){total += YearMonthToDay(year ,month-1); --month;}int num = YearToDays( year);return (total +num +days);}int CDateTime::DatesToWeek()int w = DatesToDays();return (w%7);}CDateTime CDateTime:: NextMonth( ) {Date tmp( *this);if(month ==12){tmp.month = 1;++tmp.year ;}else++tmp.month;return tmp;}CDateTime CDateTime::LastMonth( ) {CDateTime tmp( *this);if(month ==1)tmp.month = 12;--tmp.year ;}else--tmp.month;return tmp;}void CDateTime::LastTime(){}void CDateTime::InputDates(){cout<<"输入年:"<<endl;cin>>year;while( year <= 1900 || year >=2099) {cout<<"重新输入年:"<<endl;cin>>year;}cout<<"输入月:"<<endl;cin>>month;while( month <= 0 || month >12){cout<<"重新输入月:"<<endl;cin>>month;}cout<<"输入天"<<endl;cin>>days;}void CDateTime::InputYearMonth() {cout<<"输入年:"<<endl;cin>>year;while( year <= 1900 || year >=2099) {cout<<"重新输入年:"<<endl;cin>>year;}cout<<"输入月:"<<endl;cin>>month;while( month <= 0 || month >12){cout<<"重新输入月:"<<endl;cin>>month;}}int CDateTime::MonthToWeek( ){int t = DatesToDays( );return (t-days)%7;}void CDateTime::PrintMonth( ){int y=year;int m=month;cout<<"------------------------------"<<endl;cout<<"******************************"<<endl;cout<<" "<<"日"<<" "<<"一"<<" "<<"二"<<" "<<"三"<<" "<<"四"<<" "<<"五"<<" "<<"六"<<endl;int w = MonthToWeek( );if( w !=6)for( int i =0;i<=w;i++)cout<<" ";int k = YearMonthToDay(y,m);for( int j = 1 ;j<= k; ++j){cout<<setw(2)<<""<<setw(2)<<j;if( (j+w+1)%7 ==0)cout<<endl;}cout<<endl;cout<<"------------------------------"<<endl;cout<<"******************************"<<endl;}ostream & operator<< ( ostream & out, const CDateTime &c) {out<<c.year<<"年"<<c.month<<"月"<<c.days<<"日";out<<c.hour<<":"<<c.minute<<":"<<c.second<<endl;return out;}void main(){CDateTime d1,d2,d3,d4,d5;cout<<"欢迎使用日历"<<endl; cout<<"请选择:"<<endl;cout<<"1.查询月历"<<endl;cout<<"2.查询星期"<<endl;cout<<"3.倒计时"<<endl;cout<<"0退出"<<endl;cin>>i;while(i!=0){switch(i){case 0:break;case 1:d1.InputYearMonth();d1.PrintMonth();cout<<"1.上一个月"<<endl; cout<<"2. 下一个月:"<<endl; cout<<"0.返回:"<<endl;while(j!=0){switch(j){case 0:break;case 1:d2=stMonth();d2.PrintMonth();break;case 2:d3=d1.NextMonth();d3.PrintMonth();break;default:while(j<0||j>2){cout<<"请重新选择"<<endl; cin>>j;}}cout<<"0返回"<<endl;cin>>j;}break;case 2:d4.InputDates();k=d4.DatesToWeek();cout<<"星期"<<k<<endl;break;case 3:d5.InputDates();// stTime();break;default:while(i<0||i>3){cout<<"请重新输入"<<endl; cin>>i;}}cout<<"1.查询月历"<<endl;cout<<"2.查询星期"<<endl; cout<<"3.倒计时"<<endl; cout<<"0退出"<<endl;cin>>i;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书课程设计名称:专业课程设计课程设计题目:电子钟的设计学院名称:信息工程学院专业:电子信息工程班级: XXXXXX 学号: XXXXXXXX 姓名: XXXX 评分:教师: XXXXXX20 XX 年 X 月 X 日当今信息科技高速发展,使用方便、低成本电子设备已逐步成为我们日常生活中电子产品的主力军。

用软件代替硬件的电子设备能大大地节省成本,且有利于资源的节约,因此,以软代硬的设计必将成为我们现代设计的主流。

本设计是利用MCS-51系列单片机内部的定时器/计数器进行中数年定时,配合软件延时实现时、分、秒的计时。

该方案节省硬件成本,且能够使设计者在定时/计数器的使用中及程序设计方面得到锻炼和提高,因此本系统将采用软件方法实现计时。

关键词:单片机计数器软件第一章实验要求及设计思路 (4)1.1 设计内容及要求 (4)1.2 设计的目与和意义 (4)1.3 设计的基本思路与主要内容 (5)第二章系统组成及工作原理 (6)2.1 系统组成 (6)2.2工作原理 (7)第三章硬件设计与分析 (9)3.1 硬件设计原理 (9)3.2 AT89C51单片机介绍 (9)3.3单片机最小应用系统 (9)3.4显示电路 (11)3.5 键盘及其接口 (12)第四章软件设计 (14)4.1 主程序设计 (14)4.2 定时中断程序 (17)4.3 显示子程序 (17)第五章调试与运行 (19)第六章结论与体会 (20)参考文献 (21)附录一系统原理图 (22)附录二元件清单 (23)附录三程序清单 (24)第一章 实验要求及设计思路1.1 设计内容及要求设计一个电子钟,要求如下:(1) 利用单片机最小系统设计一个电子钟(不能采用单片机开发系统)(2) 用8255扩展键盘及显示接口(3) 显示方式:** 时** 分** 秒(4) 时间可以任意修改1.2 设计的目的与意义人类的生活包括:工作、学习、休息以及参与社会的多种实践活动,环环有条理,更加丰富多彩。

应该说时钟的计时功能与人类的各种行为和活动有着密切的联系,于是时钟的作用便体现出来,生活中有许多人,因为只顾工作而忘记时间,从而耽误了重要的安排或者计划,造成不可挽回的损失,使之后悔莫及。

我们要养成良好的时间观念,就需要电子钟时刻提醒我们。

因此,电子钟已成为人们日常生活中必不可少,它的应用非常广泛,应用于家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。

现在投入生产的大多是智能时钟,它的功能很全面,但价格有点昂贵,大多数学生或者经济条件较差的人,想要拥有它,都有点困难。

因此,在这里设计一个较简单的电子钟,它能完成计时和校时的功能。

这个时钟系统很简单,投入生产的成本很低,因此,它的价格比较便宜,对于学生很实用。

单 片 机 显示器 键盘1.3 设计的基本思路与主要内容设计一个电子产品,首先了解它能实现的功能,时钟系统最基本的功能就是实现计时,在这里设计的数字电子时钟,它能实现计时和校时的功能,给电子钟加上电自动计时,设计一个按键对时钟进行复位和三个按键对时间进行调整。

硬件设计很简单,主要包括:单片机、按键电路、驱动显示电路,以及LED显示器四个部分。

单片机选用AT89C51芯片,它无须外扩程序存储器,设计电路很简单。

由于只用了四个按键,所以采用独立式按键使设计更简单。

显示时、分、秒加两个分隔符,采用8位的数码管,利用8255扩展的数码管及键盘达到时间显示和修改的功能。

简易数字时钟可实现校时和整点报时功能,该软件采用C语言来实现,主要包括主程序、键输入程序、显示程序、定时程序和中断程序等软件模块。

把原程序加入原理图,做出电子钟的仿真,以秒计数并显示时、分、秒。

其中秒和分为60进制,小时为24进制计数。

可通过按键实现时钟复位和分、秒、时的校正。

第二章 系统组成及工作原理2.1 系统组成电子钟的电路图主要由单片机(AT89C51)、键盘电路、驱动显示电路和LED 显示器四部分组成,它主要实现时钟的显示,以及对时、分、秒进行调整,即实现调时的功能。

其数字钟系统整体结构如图2-1所示。

图2-1 电子钟系统整体结构1. 显示方案方案一:静态显示就是当CPU 将要显示的字或字段码送到输出口,显示器就可以显示出所要显示的字符,如果CPU 不去改写它,它将一直保持下去;静态显示硬件开销大,电路复杂,信息刷新速度慢。

方案二:动态显示则是一位一位地轮流点亮显示器地各个位(扫描)。

对于显示器的每一位而言,每隔一段时间点亮一次;动态显示耗能较小,但编写程序较复杂。

动态显示硬件连接简单,信息刷新速度快。

由于本次设计是对时间进行显示,如采用静态显示,则所占用的I/O 口较多,电路较复杂,所以在此选择的是方案二,采用动态显示。

七 段 数 码 管 AT89C51 驱动 LED 显示器 位选按 键2.键盘方案方案一:独立式键盘。

独立式键盘的各个按键相互独立,每个按键独立地与一根数据输入线(单片机并行接口或其它芯片的并行接口)连接。

独立式键盘配臵灵活,软件结构简单,但每个按键必须占用一根接口线,在按键数量不多时,接口线占用多。

所以,独立式按键常用于按键数量不多的场合。

方案二:矩阵式键盘。

矩阵式键盘采用的是行列式结构,按键设臵在行列的交点上.(当接口线数量为8时,可以将4根接口线定义为行线,另4根接口线定义为列线,形成4*4键盘,可以配臵16个按键。

)由于本设计只用了四个按键,不需要采用矩阵式键盘,所以选用第一种方案,采用独立式键盘。

3.计时方案采用软件控制:利用单片机内部的定时/计数器进行定时,配合软件定时实现时、分、秒的计时。

该方案能够使设计者,在设计的过程中容易实现,且节省硬件成本,因此本系统将采用软件方法实现计时。

2.2工作原理AT89C51内部有两个定时器,利用它们可以获得精准的时间。

设计中定义40H-47H8个单元为时间显示缓冲区,里面存放00H-0AH 之间的数,其中0AH在查表时会查到‘—’的字形码。

我们让定时器T1定时50ms。

同时再定义一个单元来记录T1定时器记满50ms 的次数,当该单元中的次数达到了20次时,即时间走了1s钟,马上执行时间加1s的程序。

即要对40H-47H中的秒缓冲单元加一,再将更新后的40H-47H依次查表后送8255去显示,这样便实现了电子钟走时的功能。

8255的PC口接有按键开关,平时不按下,对应的PC口会获得一个高电平,可一旦有键按下,对应的PC口便会接地而获得一个低电平。

设计中只使用了五个PC口,剩余的三个PC口全部接地。

这样,无键按下或只按下一个键PC口都会有一个确定的键值对应着。

例如,C0-C4接着K1-K5五个按键开关,C5-C7是接地的。

根据上面所述可知,无键按下时,单片机读到PC口的值为1FH,当K1按下时为1EH。

同理,K2对应1DH,K3对应1BH ,K4对应17H ,K5对应0FH。

如此,我们便可在程序中根据读取到的键值让单片机去执行相应的设臵时、分、加、减和确定等功能程序。

数码管的动态显示是指一位一位地轮流点亮各个数码管。

对于每一个数码管来说,每隔一段时间点亮一次。

通常点亮时间为1ms 左右,相隔时间为20ms。

图1.3.1中,PA口的输出为段数据口,接显示器的各个段极,PB口输出为位扫描口,接数码管的公共极。

显示时,首先使PB口的B7为低电平,B1-B7为高电平,则仅第一位数码管的公共阴极为低电平(被选通);同时PA口输出第一个显示数据的段码,这时第一位数码管将显示出第一个显示数据。

持续1ms左右后,使B0为高电平,关闭第一个数码管,随后使B1为低电平,选通第二位数码管,并由PA口输出第二个显示数据,并持续1ms左右。

用类似的方法依次选通第3,第4,〃〃〃,第8位即完成一次循环显示。

如果连续地循环便可在数码管上稳定地显示所需显示的内容。

图2-2 电子钟硬件电路图第三章硬件设计与分析3.1 硬件设计原理时钟电路的核心是AT89C51单片机,其内部带有2KB的可反复擦写的只读Flash程序存储器和128 bytes的随机存取数据存储器(RAM),无须外扩程序存储器。

电脑时钟没有大量的运算和暂存数据,现有的128B片内RAM已能满足要求,也不必外扩片RAM。

3.2AT89C51单片机介绍AT89C51是一个低电压,高性能CMOS 8位单片机,片内含2k bytes的可反复擦写的只读Flash程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内臵通用8位中央处理器和Flash存储单元,所以说AT89C51是一个功能强大的单片机。

AT89C51是一个低功耗高性能单片机,它有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

同时AT89C51的时钟频率可以为零,即具备可用软件设臵的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。

省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运行。

3.3单片机最小应用系统时钟电路和复位电路是单片机最小应用系统中必不可少的。

单片机时钟电路图,如图3-1所示:XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配臵为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

图3-1 单片机时钟电路图复位是使单片机或系统中的其它部件处于某种确定的初始状态。

单片机的工作就是从复位开始的,当在单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。

实际应用中,复位操作有两种基本的形式:一种是上电复位,另一种是上电与按键均有效的复位。

由于本次设计采用的是上电复位,所以这里只介绍上电复位,如下图3-2所示:图3-2上电复位电路上电复位要求接通电源后,单片机自动实现复位操作。

常用的上电复位如上图所示。

上电瞬间RST引脚获得高电平,随着电容C1的充电,RST引脚的高电平将逐渐下降。

3.4显示电路一、七段LED显示器的原理显示器是单片机应用系统常用的设备,包括LED、LCD等。

LED 显示器由若干个发光二极管组成。

相关文档
最新文档