还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
淮北师范大学电子时钟制作学院计算机科学与技术专业计算机科学与技术师范学号学生姓名
一、设计内容与设计目的
1、编写出一个电子钟,六个数码管每两个一组来分别显示小时、分和秒;一个蜂鸣器来实现报时或闹铃等声音功能;八个二极管玩花样设计,__电子的整体设计
2、熟悉整个电路图,练习一下焊接操作
3、熟练掌握C51的编程方法与技巧
4、能够有效地控制数码管、二极管、蜂鸣器和键盘的操作(可采用多种形式)
5、能够根据原理图焊接电路板,经过调试,保证整个电路板没有虚焊点硬件设计要求
1、根据项目要求,去选择相应的电路,比如MCU系统,输入输出驱动电路,电源供电电路
2、整体布局合理,标注规范、明确、美观、不产生歧义
3、列出完整的元件清单(标号、型号及大小、封装形式、数量)
4、估算电路板的功耗,并对供电形式提出要求
5、根据设计好的原理图,焊接实物软件设计要求
1、所编代码要能够实现以下基本功能,当时时间的设定,定点闹铃,秒针走一下四个二极管同时向右移一位
2、根据项目要求,设计软件整体规划,人机对话,各模块的关联,底层驱动模块
3、程序在必要的地方进行注释每个函数的出入口要有输入输出参数的说明程序必须具有具有良好的可读性,可重用,容易调试和维护
4、使用c语言进行编程
二、硬件系统设计
1.STC12C5A60S2控制模块考虑到设计功能需要,控制器的功能用于外部键盘__的接收和识别、数码管的显示控制等,我们选择了学习过的12C5A60S2系列单片机,具有反应速度极快,工作效率特高的特点 12C5A60S2 是一种低功耗、高性能得微控制器,具有8K在系统可编程Flash存储器使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容另外掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止
2.键盘功能模块根据系统的基本的要求,基于时间的观看和设定等功能,采用由四个键构成的__式键盘分别接在单片机的P
3.2-P
3.5口,非常的方便,同时相对于__式键盘大大节省了空间,在软件的设计时带来了极大的方便,使程序简易明了,可读性强本次设计中,五个功能键分别定义为KEY1键、KEY2键、KEY3键、KEY4键对应着小时加
一、小时减
一、分钟加
一、分钟减一及同时组合键KEY1和KEY2同时按下实现显示年月的操作,KEY3和KEY4同时按下实现显示日的操作,使得操作起来十分的清晰与方便
3.数码管显示模块显示模块要具有显示时分秒,年月日的功能,共需要六位数码管数码管的六个位控口接在12C5A60S2单片机的P0口线上,从左到右顺序连接,段控制线接在12C5A60S2单片机的P2口线上,从低位到高位对应连接.再由于数码管的本身显示亮度不够,所以一般都会在其位控和段控口前加上一定的驱动电路,本次设计中采用三极管作为驱动
4.蜂鸣器模块电子钟的另外一个功能是秒走一下,会有声音提示一下,本次设计利用蜂鸣器来实现具有电路结构非常简单,控制极其方便等优点
5.二极管显示模块二极管采用共阳接法其负极接在P1口线上在正常运行时二极管会随着秒的走动来亮和灭,周期为2秒
6.系统电路图
7.系统的元器件清单本系统中所用到的元件如表
2.1所示表
2.1系统元器件表器件型号数量器件型号数量单片机12C5A60S21个按键普通5个三极管普通8个开关6脚双路1个排阻A103JA427J,A102J1个,1个1个二极管灯普通8个电容10μF2个数码管CPS056AR6个电阻普通若干下载接口4针接口1个蜂鸣器压电式1个单排针普通若干三.软件系统设计
1.使用单片机资源介绍12C5A60S2单片机的P
0、P
1、P
2、P3口作为输入输出口RST:复位输入
2.软件系统各功能模块介绍
2.1__式键盘模块__式键盘软件设计通过在主程序中调用子程序key去执行相应的功能单片机P3口在复位后保持高电平当键按下相应口线为低电平,此时CPU做初期判断,之后延时,确定为按键后等待键松,之后执行子程序达到通过键功能程序的分支执行相应的程序段,完成对应的操作
2.2数码管显示模块数码管显示是通过调用子程序displaypro来实现的,由于数码管动态显示,所以在执行其他的程序的时候依然要经常调用显示子程序DISP数码管的段控由单片机改变P2口相应位电平来实现,为实现不同的显示功能,设置了不同的显示缓冲单元,通过控制标志位控制数码管的位控由CPU改变P0口相应位电平来实现,基于人的视觉延迟性,通过从右到左的循环保证所有数码管都被点亮
2.3中断函数模块这个程序运用了两个中断函数,分别为定时器0和定时器1的中断,定时器0是用来计时,定时器1是用来动态扫描,这样使得电子钟的性能更稳定
2.4系统的整体设计思路
1.明确要实现的功能主要有数字时钟时间的显示,时间的调试另外还有附加功能的实现
2.编写函数利用P2引脚控制三极管的基极用来控制6个数码管的工作状态,利用时间片分别显示不同数码管的显示,根据P0的8个引脚控制数码管的8段显示
3.编写函数利用键盘控制P3实现时间的调试功能利用P
3.2(key1)作为模式选择,P
3.3~P
3.5作为不同功能的调试按键
4.编写函数P1引脚控制发光二极管的闪烁,实现花样式闪烁
5.接着就是闹钟功能的实现,其中包括定时的显示、调试、蜂鸣器的声音等当定时的闹钟时间与实际时间相同时,蜂鸣器响动
2.5流程图见附录
(2)附录1数码管二极管蜂鸣器按键单片机四.程序源代码#includeregx
51.h#includeintrins.H#defineucharunsignedchar#defineuintunsignedintucharnum[]={0xbd0x900xa70xb60x9a0x3e0x3f0xb00xbf0xbe};ucharhour=0min=0second=0time1;ucharset_hour=0set_min=0set_switch=1key1_timefunction;ucharbell[]={0x170x130x2b};uchartemp;__itkey1=P3^2;__itkey2=P3^3;__itkey3=P3^4;__itkey4=P3^5;__itbell_ring=P2^1;inti;voidtimerinterrupt1using0//中断函数{TH0=65536-50000/256;TL0=65536-50000%256;time1++;}voiddelayuchari//循环的次数等于i*125一次循环8微秒{ucharjk;forj=0;ji;j++fork=0;k125;k++;}voidBeep//控制蜂鸣器函数{bell_ring=0;delay1;bell_ring=1;delay1;}voidtime//时间函数{iftime1==20{time1=0;fori=0;i25;i++Beep;second++;P1=_crol_P11;ifsecond==60{second=0;min++;}ifmin==60{min=0;hour++;}ifhour==24{hour=0;}}}voidset_time//调节时间函数{ifkey2==0{delay200;ifkey2==1{hour++;ifhour==25{hour=0;}}}ifkey3==0{delay200;ifkey3==1{min++;ifmin==60min=0;}}ifkey4==0{delay200;ifkey4==1{second++;ifsecond==60second=0;}}}voidshow_bell//显示设置的闹铃时间{P2=0x04;//显示ON,OFifset_switch%2==0{P0=bell
[2];//OFdelay6;}else{P0=bell
[1];//ONdelay6;}P2=0x08;P0=bell
[0];delay6;P2=0x10;P0=num[set_min%10];delay6;P2=0x20;P0=num[set_min/10];delay6;P2=0x40;P0=num[set_hour%10]+0x40;delay6;P2=0x80;P0=num[set_hour/10];delay6;}voidset_bell//设置闹铃函数{ifkey2==0{delay200;ifkey2==1{set_hour++;ifset_hour==24set_hour=0;}}ifkey3==0{delay200;ifkey3==1{set_min++;ifset_min==60{set_min=0;}}}ifkey4==0{delay200;ifkey4==1{set_switch++;}}}voidshow_time//显示时间{P2=0x04;P0=num[second%10];delay6;P2=0x08;P0=num[second/10];delay6;P2=0x10;P0=num[min%10]+0x40;delay6;P2=0x20;P0=num[min/10];delay6;P2=0x40;P0=num[hour%10]+0x40;delay6;P2=0x80;P0=num[hour/10];delay6;}voidwalk_up_bell{ifmin==set_minhour==set_hourtemp=1;elsetemp=0;iftemp==1set_switch%2==1second=5{fori=0;i2;i++Beep;}elsebell_ring=0;}voidkey_board{P3=0xff;ifkey1==0{delay200;ifkey1==1{key1_time++;}}function=key1_time%3;switchfunction{case0:show_time;break;case1:show_time;set_time;break;case2:show_bell;set_bell;break;}}void__in{TMOD=0x01;//TMOD寄存器工作模式选择工作模式1,M1=0,M0=1使用16位计数器TH0=65536-50000/256;/*TL
0、TH0作为16位寄存器用,计数值从初值开始(初值由软件设定),计数到0xFFFF即十进制的65536后,再加1,计数器被溢出复位,并把溢出标志TF0置1*/TL0=65536-50000%256;//50000表50000*
0.1微妙=毫秒,EA=1;//EA CPU的中断开放标志ET0=1;//ET0定时器/计数器T0溢出中断允许位TR0=1;//TR0定时器0运行控制位P1=0xf0;//led灯只有第一个亮while1{key_board;time;walk_up_bell;}}四.调试通过键盘,按key1P3^2若干次可以循环显示不同的功能,0时为显示时间,1次为调节时间,按key2(P3^3)能调节时分,key3(P3^4)调节分钟,key4(P3^5)可以调节秒钟2次时可以调节闹铃key2(P3^3)调节闹铃时分,key3(P3^4)调节闹铃分钟,key4(P3^5)调节开或关即ON或OF依次摸三循环,实现3个功能即显示时间、调节时间、显示调节闹铃五.总结在于雷老师的耐心指导下,我们顺利的完成了这次基于单片机的电子钟时钟的设计,对单片机的知识和技能有所认知,把专业知识与实践相结合,既锻炼了我们的动手能力,又加深了我们对专业知识的理解,为我们以后的工作奠定基础,这对我们以后的课程设计和毕业设计都会有所帮助开始key_board012show_timeshow_timeshow_dellset_dellset_timeYYNYNtimewalk_up_bell;结束。