单片机数字钟实训报告
学院:电子工程学院
专业:机电一体化
班级: 姓名: 手机号:
一、任务及要求
用51单片机设计时、分、秒计时器,具体要求如下。
1、具有时、分、秒计时功能和8位数码管显示功能,显示格式为:“时-分-秒”;
2、用Proteus设计仿真电路进行结果仿真;
3、4人组成设计小组完成,小组成员有明确分工,1人负责总体方案设计及报告撰写,2人负责功能模块函数设计,1人负责仿真电路设计及调试。
4、完成程序设计、仿真电路设计、结果仿真。
5、本实验要求设计一个数字计时器,可以完成0分00秒~23小时59分59秒的计时功能,并在控制电路的作用下有开机清零。
6、指标要求: ①.显示时、分、秒。 ② 采用24小时制,小时计数器按“23翻00”规律计数。. ③ 为了保证计时准确、稳定,由单片机的定时器来计时。
7、设计要求:
①
画出电路原理图(或仿真电路图);
②
元器件及参数选择; ③
电路仿真与调试; ④
连接实物图,并调试; ⑤
写出报告,并做总结;
二、设计方案
1、总体设计方案(李文负责完成)
(说明总体设计方案构思、程序模块构成、仿真电路构成等内容,不少于300字))。
构思:实现时钟的设计,如果采用软件延时的方法来实现时钟,太耗cpu了,因此采用51单片机的内部硬件资源来实现时钟,因此采用定时器来定时,由于单片机的最大定时的时间为65.536ms;但是我们要定时1s,为了方便,我们则选用定时器0工作方式1且定时50ms,然后在中断20次则有了1s,有了1s就好办了,分,时就好办了,只要在1秒的基础上加就可以实现时钟了,有了时,分,秒就要显示了,由于时,分,秒都是两位,因此要把个位与十位分离,然后在分别在数码管上显示,这样就实现时钟的设计。
程序模块:
1、主函数:(调用初始化函数,调用显示函数)
2、显示函数:(延时函数,数码管显示代码)
3、中断服务函数:(时,分,秒的实现)
仿真电路构成:数字钟的结构组成:
电1)晶体振荡器电路
2)复位电路
3)数码管使用非门驱动及数码管
具体:52单片机的最小系统(52单片机,晶振电路(12MHz晶振,和30pF的无极性容),复位电路(10k电阻,10uf极性电容,开关)),外加八位一体的数码管,数码管驱动电路;
2、显示模块程序流程图
3、中断服务函数模块程序流程图
4、主函数模块的设计
5、仿真电路图
三、程序代码:
/* 功能:用共阴的八位一体的数码管显示时间“小时-分钟-秒”
位码接P2口;段码接P0口;使用定时器0定时1s, */ #include //头文件
#define uchar unsigned char //宏定义 #define uint unsigned int // uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴七段编码
uchar sec,min,hour,count;// 定义变量 void delay (uchar x)//延时1ms的函数
{
uchar z ,y;
for (y=x;y>0;y--)
for (z=124;z>0;z--); } void init (void)//初始化函数 {
TMOD=0X01;//定时器0工作在方式1
TH0=0X3C;//装初值
TL0=0XB0;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
sec=0; //秒设初值
min=0; //分设初值
hour=0;//时设初值
count=0; //计数设初值
P0=0xff; //
P2=0xff; //
} void display ()//显示函数
{
uchar sec1,sec2,min1,min2,hour1,hour2;//定义变量
sec1= sec/10;
//秒的十位
sec2= sec%10;
//秒的个位
min1= min/10; //分的十位
min2= min%10; //分的个位
hour1= hour/10;//时的十位
hour2= hour%10;//时的个位
P2= 0x80;
//秒个位的位码
P0= table[sec2]; //秒个位的段码
delay(5);
P2= 0x40;
//秒十位的位码
P0= table[sec1]; //秒十位的段码
delay(5);
P2= 0x20;
//“-”的位码
P0= 0x40;
//“-”的段码
delay(5);
P2= 0x10;
//分十位的位码
P0= table[min1];//分十位的段码
delay(5);
P2= 0x08;
//分个位的位码
P0= table[min2];//分个位的段码
delay(5);
P2= 0x04;
//“-”的位码
P0= 0x40;
//“-”的段码
delay(5);
P2= 0x02;
//时个位的位码
P0= table[hour2];//时个位的段码
delay(5);
P2= 0x01;
//时的十位的段码
P0= table[hour1];//时的十位的段码
delay(5);
} void main() {
init();
//初始化函数
while(1)
{
display(); //时间显示函数
} } void time() interrupt 1 //中断服务函数 {
TH0=0X3C;
//重装初值
TL0=0XB0;
if(count==20) //定时一秒
{
count=0;
//计数清零
if(sec==59)
//秒计时到60秒
{
sec=0;
//秒清零
if(min==59) //分计时到60秒
{
min=0; //分清零
if(hour==23) //小时计数到24
{
hour=0;//小时清零
}
else hour++; //小时加一
}
else min++;
//分加一
}
else sec++; //秒加一
}
count++;
//计数加一 }
五、设计总结
单片机作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。在做的过程中能够发现很多的问题,只有自己亲身去做了就会遇到你在书上所没有的,并且你要一个又一个的解决,这个有点难,要找到自己的错误在哪里,这还真的难,有时候自己的错误自己很难的看出来,我就一个main写错了,我找了半天还没找问题在哪里,表面看是看不出的,因为我只是a与i对调了一下,害的我搞了半天才查出来,这个无形的,编译是不会出错,只是一个警告,但是下载单片机里就是不出现结果,改了之后就ok了,在写程序的时候大小写特别要注意的,还有程序的结构清楚明了,最后还是完成任务。
在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,在我们遇到问题时,我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题自己能解决了。发现、提出、分析、解决问题都会受益于我在以后的学习、工作和生活中。常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力。
数字钟设计
一、设计目的
1. 熟悉集成电路的引脚安排。
2. 掌握各芯片的逻辑功能及使用方法。
3. 了解面包板结构及其接线方法。
4. 了解数字钟的组成及工作原理。
5. 熟悉数字钟的设计与制作。
二、设计要求
1.设计指标
时间以24小时为一个周期;
显示时、分、秒;
有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;
计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;
为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。
1 2.设计要求
画出电路原理图(或仿真电路图);
元器件及参数选择;
电路仿真与调试;
PCB文件生成与打印输出。
3.制作要求 自行装配和调试,并能发现问题和解决问题。
4.编写设计报告 写出设计与制作的全过程,附上有关资料和图纸,有心得体会。
三、设计原理及其框图
1.数字钟的构成
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。图 3-1所示为数字钟的一般构成框图。
图3-1 数字钟的组成框图 2
⑴晶体振荡器电路
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
⑵分频器电路
分频器电路将32768Hz的高频方波信号经32768(
)次分频后得到1Hz的方波信号供秒计数器进行计数。分频器实际上也就是计数器。
⑶时间计数器电路
时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器。
3
⑷译码驱动电路
译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。
⑸数码管
数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LE