资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机原理及应用,课程设计,电子时钟,摘 要,本课题通过MCS-51单片机来设计电子时钟,采用C语言进行编程,可以实现以下一些功能:小时,分,秒的时间显示功能。还可以进行时和分的校对,本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法以及借助键盘直接控制整时的调整,本设计由单片机AT89S51芯片,1602液晶和按键为核心,辅以必要的电路,构成了一个单片机电子时钟。,1系统设计方案,1.1目的,1.利用单片机和1602液晶来显示24小时制、60分制、60秒制,年、月、日显示。2.具有显示和手动校对功能,24小时制、60分制、60秒制,年、月、日显示和手动校正功能;3.具有闹铃功能,当达到1分钟时蜂鸣器报时;,1.2思路,1.2.1 计时单元有单片机内部结构的定时器/计数器来实现。1.2.2 时间显示采用1602液晶。1.2.3 通过按键控制时、分、秒的加减。,程序,#include,#define uchar unsigned char,#define uint unsigned int,sbit lcdrs=P20;,sbit lcswr=P21;,sbit lcden=P22;,sbit s1=P32;,sbit s2=P33;,sbit s3=P34;,sbit beep=P37;,uchar count,s1num;,char miao,shi,fen;,uchar code table=2019-05-24 Thu;,uchar code table1=00:00:00;,void delay(uint z),uint x,y;,for(x=z;x0;x-),for(y=110;y0;y-);,void di(),uchar b;,for(b=255;b0;b-),beep=!beep;,delay(1);,void write_com(uchar com),lcdrs=0;,lcswr=0;,P0=com;,delay(5);,lcden=1;,delay(5);,lcden=0;,void write_date(uchar date),lcdrs=1;,lcden=0;,P0=date;,delay(5);,lcden=1;,delay(5);,lcden=0;,void init(),uchar num;,lcden=0;,write_com(0 x38);,write_com(0 x0c);,write_com(0 x06);,write_com(0 x01);,write_com(0 x80);,for(num=0;num15;num+,write_date(tablenum);,delay(5);,write_com(0 x80+0 x40);,for(num=0;num12;num+),write_date(table1num);,delay(5);,TMOD=0 x01;,TH0=(65536-50000)/256;,TL0=(65536-50000)%256;,EA=1;,ET0=1;,TR0=1;,void write_sfm(uchar add,uchar date),uchar shi,ge;,shi=date/10;,ge=date%10;,write_com(0 x80+0 x40+add);,write_date(0 x30+shi);,write_date(0 x30+ge);,void keyscan(),if(s1=0),delay(5);,if(s1=0),s1num+;,while(!s1);,if(s1num=1),TR0=0;,write_com(0 x80+0 x40+10);,write_com(0 x0f);,if(s1num=2),write_com(0 x80+0 x40+7);,if(s1num=3),write_com(0 x80+0 x40+4);,if(s1num=4),s1num=0;,write_com(0 x0c);,TR0=1;,if(s1num!=0),if(s2=0),delay(5);,if(s2=0),while(!s2);,if(s1num=1),miao+;,if(miao=60),miao=0;,write_sfm(10,miao);,write_com(0 x80+0 x40+10);,if(s1num=2),fen+;,if(fen=60),fen=0;,write_sfm(7,fen);,write_com(0 x80+0 x40+7);,if(s1num=3),shi+;,if(shi=24),shi=0;,write_sfm(4,shi);,write_com(0 x80+0 x40+4);,if(s3=0),delay(5);,if(s3=0,while(!s3);,if(s1num=1),miao-;,if(miao=-1),miao=59;,write_sfm(10,miao);,write_com(0 x80+0 x40+10);,if(s1num=2),fen-;,if(fen=-1),fen=59;,write_sfm(7,fen);,write_com(0 x80+0 x40+7);,if(s1num=3),shi-;,if(shi=-1),shi=23;,write_sfm(4,shi);,write_com(0 x80+0 x40+4);,void main(),init();,while(1),keyscan();,void timer0()interrupt 1,TH0=(65536-50000)/256;,TL0=(65536-50000)%256;,count+;,if(count=20),count=0;,miao+;,if(miao=60),di();,miao=0;,fen+;,if(fen=60),fen=0;,shi+;,if(shi=24),shi=0;,write_sfm(4,shi);,write_sfm(7,fen);,write_sfm(10,miao);,2 硬件部分,2.1框图,2.2 1602液晶显示,2.2.1简介:,工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)注:为了表示的方便,后文皆以1表示高电平,0表示低电平。,2.2.2数据指针设置:,数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H),2.2.3其他设置:,01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。,2.3 按键,键盘是单片机应用系统中最常用的输入设备,在单片机应用系统中,操作人员一般都是通过键盘向单片机系统输入指令、地址和数据,实现简单的人机通信。键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。键盘的结构形式一般有两种:独立式键盘和矩阵式键盘。矩阵式键盘的工作方式有3种:查询工作方式、定时扫描工作方式和中断工作方式。,3,软件部分,3.1主程序,主程序执行流程如下图,主程序先对显示单元和定时器/计数器初始化,然后重复调用液晶显示模块和按键处理模块,当有键按下,则转入相应的功能程序。,3.2定时器/计数器T0中断服务,程序流程图(下),定时器/计数器T0用于时间计时。选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0;分单元加到60则对时单元加1,同时分单元清0;时单元加到24则对时单元清0,4调试,4.1过程,应用编程软件Keil软件进行编程,编程完成后进行编译,编译没有错误的情况下,用AVR_fighter下载到开发板进行调试。液晶屏会显示年、月、日,时、分、秒。通过按键来调节时、分、秒的加减。当秒加到1分钟的时候蜂鸣器报时。,5总结,这次课程设计让我把理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合等方面全面的培养学生的全面素质。这些在我今后的学习和工作当中都会有很大的帮助。,
展开阅读全文