- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
淮北师范大学硬件课程设计
淮北师范大学
硬件课程设计
电子钟制作硬件设计
学 院 计算机科学与技术
专 业 计算机科学与技术(非师范)
学 号 20091202001 20091202002
学 生 姓 名 柏传玉 蔡俊卿
指导教师姓名
一、设计任务:
1、熟悉整个电路图,练习一下焊接操作;
2、能够根据原理图焊接电路板,经过调试,保证整个电路板没有虚焊点;
3、熟练掌握C51的编程方法与技巧;
4、能够有效地控制LED、蜂鸣器和键盘的操作(可采用多种形式);
5、编写出一个电子钟,六个数码管每两个一组,分别显示小时、分钟和秒;
二、设计思路:
利用89C51单片机来进行控制,通过简单的程序及控制功能来实现电子钟的显示。
1、对数码管来显示的0~9的数字进行编码,以便于后来的数码管显示的调用,通过单片机的P0引脚来进行相关控制。
2、利用动态扫描来对多个数码管进行控制,通过视觉暂留来显示出数码管的动态显示效果,达到显示时间的目的。
3、为了较为精确的控制时间,通过两个中断函数来实现控制功能,计时器1用来实现时间的运行,通过一次50ms的中断循环20次来实现1s的效果;计数器2用来进行动态扫描,较为快速的实现多个数码管之间的切换。
4、通过四个按键来实现对小时、分钟的加、减操作。
5、将控制蜂鸣器的函数和时间的运行写在一起来时间一秒响一次的效果。
6、定义一个数组实现8个LED灯的亮灭情况。
三、硬件电路图模块分析:
1、三极管:
三极管的三个极E、B、C如右图所示,在知道为NPN型时,也可将万用表拨到hFE档,将三极管三个管脚插入NPN插孔中,读数最大的表示和上面的EBC标号一致。
2、排阻:
所谓排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚。其余引脚正常引出
3、数码管:
数码管有共阴极和共阳极两种,如下图所示,本电路采用了共阴极数码管,因此位选COM为0时,段选a-g及DP为高电平1,相应的LED点亮,显示不同的数字。在本次设计中,段选a-g及DP由P0口控制(注意段选位与P0各端口的对应关系),位选由P2口通过NPN三极管来进行控制,P2.7引脚控制数码管的位选COM电平,如果希望数码管显示,那么就应该使得COM公共端为0,因此,结合电路图,P2.7应该为1,此时通过P0口控制段选来显示不同的数码。请同学们根据电路的具体连接来计算出0~9分别对应的段码值。
注:以上引脚对应位置有误。a---g依次对应为5、7、4、2、0、3、1、6。
4、晶振及其电路:
本电路采用内部时钟方式,单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1为输入端,XTAL2为输出端。两个引脚跨接晶体振荡器与微调电容组成并联谐振回路,构成一个自激振荡器为内部时钟电路提供振荡时钟。振荡器的频率主要取决与晶体的振荡频率。本电路晶振为11.0592MHz。电容C1、C2通常为30pF。
5、复位电路:
复位操作完成单片机内部电路的初始化。除系统上电时进行复位操作外,系统出错处于死机状态时,也需要执行复位操作,时单片机重新启动,这时只要单片机的复位引脚RST上出现两个机器周期以上的高电平,单片机就进行复位操作。
6、蜂鸣器:
通过P2_1引脚来控制蜂鸣器的发声情况,若想提高或降低蜂鸣器的响度,可适当的改变控制蜂鸣器开、关的频率来实现
7、LED彩灯:
通过P1引脚来控制彩灯的两灭情况,若给予引脚一个低电平,则控制LED灯亮,反之则灭。可事前定义一个一维数组放于函数中控制LED灯的亮灭情况。
四、软件设计:
1、流程图:
(1)main函数:
(2)timecontrol函数
(3)中断函数:
(4)keycontrol函数:
五、源程序
#include REGX51.H
const unsigned int code table[10]={0xbd,0x90,0xa7,0xb6,0x9a,0x3e,0x3f,0xb0,0xbf,0xbe} ; //位选码
unsigned int Num[6]={0,0,0,0,0,0}; //六位数码管初始值
const unsigned int code context[6]={0x80,0x40,0x20,0x10,0x08,0x04}; //段选码
unsigned char led[36]={0xfe,0xfc,0xf8,0xf0,
0xe0,0xc0,0x80,0x00,0xff,
0x7f,0x3f,0x1f,0x0f,
文档评论(0)