




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计 单片机控制的数字钟 专 业:自动化 班 级: 姓 名: 学 号: 指导老师: 二七年七月十六日一、 绪论 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。所以,要制作一个定时系统。随时提醒这些容易忘记时间的人。 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。 因为是一个初学者,所以本次通过设计一个比较简单的数字钟,来加强对单片机的认识,并通过此次设计学习一些基本的单片机理论知识及其实际应用。二、设计思路本设计采用8051单片机直接控制LED数码管显示来实现数字钟(采用12MHz晶振,中断方式采用定时器0方式2,定时250微妙,则循环4000次为1秒),所设计时钟可以随时对时间进行调整(调整采用分别对“时”“分”“秒”进行调整,且互不干扰),调整后按调整的时间往后按秒计时,时间格式采用24小时进制,显示范围为00:00:00到23:59:59。三、设计所达到的目标 1) 开机时,显示12:00:00的时间并开始运行,数字钟采用24小时进制;2) P0.0/AD0控制“秒”的调整,每按一次加1秒;3) P0.1/AD1控制“分”的调整,每按一次加1分;4) P0.2/AD2控制“时”的调整,每按一次加一个小时;四、程序流程图开机初始化键盘扫描按键处理结果显示定时器0中断入口时间运行处理返回主函数五、电路原理图 六、系统板上硬件连线 1) 把“单片机系统”区域中的P1.0P1.7端口用8芯排线连接到“动态数码显示”区域中的AH端口上,控制显示对应时间值;2) 把“单片机系统:区域中的P3.0P3.7端口用8芯排线连接到“动态数码显示”区域中的S1S8端口上,其中P3.2,P3.5控制显示“:”,其余六口分别选通显示“秒”、“分”、“时”的显示数码管; 3) 把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上,键盘另一端接地; 七、相关基本知识 1) 数码管工作原理:共阳极数码管中8个发光二极管的阳极(二极管正端)连接一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管中8个发光二极管的阴极(二极管负端)连接在一起。通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。(a)外型结构 (b)共阴极 (c)共阳极图1.1 数码管结构图2) 独立式按键识别过程:本设计使用独立按键扫描低电平有效,但是可能有抖动现象,所以要用软件延时的方法来消除抖动的影响,使每一次按键均有效;3) “时”,“分”,“秒”数据送出显示处理方法:要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字码编码。对照图1.1(a),字型码各位定义如表1.1表1.1 数码管各段与输出口各位的对应关系输出口各位D7D6D5D4D3D2D1D0数码管各段DpgFedcba如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。如要显示“0”,共阳极数码管的字型编码应为:11000000B(即C0H);共阴极数码管的字型编码应为:00111111B(3FH)。依次类推,可求得数码管字型编码如表1.2所示。时分秒的显示都采用除十取整和除十取余的方法来控制显示十位和个位数字。表1.2 数码管字型编码表显示字符字型共阳极共阴极dpgFeDcba字型码dpgfedcba字型码0011000000C0H001111113FH1111111001F9H0000011006H2210100100A4H010110115BH3310110000B0H010011114FH441001100199H0110011066H551001001092H011011016DH661000001082H011111017DH7711111000F8H0000011107H881000000080H011111117FH991001000090H011011116FHAA1000100088H0111011177HBB1000001183H011111007CHCC11000110C6H0011100139HDD10100001A1H010111105EHEE1000011086H0111100179HFF100011108EH0111000171HHH1000100189H0111011076HLL11000111C7H0011100038HPP100011008CH0111001173HRR11001110CEH0011000131HUU11000001C1H001111103EHYY1001000191H011011106EH10111111BFH0100000040H.011111117FH1000000080H熄灭灭11111111FFH0000000000H八、C语言源程序 #include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00;unsigned char dispbitcode=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;unsigned char dispbuf8=0,0,16,0,0,16,0,0;unsigned char dispbitcnt;unsigned char second;unsigned char minute;unsigned char hour=12;unsigned int tcnt;unsigned char mstcnt;unsigned char i,j;sbit P0_0=P00;sbit P0_1=P01;sbit P0_2=P02;void main(void)TMOD=0x02; /定时器0工作方式2TH0=0x06; /定时250微秒TL0=0x06;TR0=1; /定时器0允许中断ET0=1;EA=1; /开放总中断 while(1) if(P0_0=0) for(i=5;i0;i-) /消抖动 for(j=248;j0;j-); if(P0_0=0) second+; if(second=60) second=0; dispbuf0=second%10; dispbuf1=second/10; while(P0_0=0); if(P0_1=0) for(i=5;i0;i-) /消抖动 for(j=248;j0;j-); if(P0_1=0) minute+; if(minute=60) minute=0; dispbuf3=minute%10; dispbuf4=minute/10; while(P0_1=0); if(P0_2=0) for(i=5;i0;i-) /消抖动 for(j=248;j0;j-); if(P0_2=0) hour+; if(hour=24) hour=0; dispbuf6=hour%10; dispbuf7=hour/10; while(P0_2=0); void t0(void) interrupt 1 using 0 mstcnt+; if(mstcnt=8) mstcnt=0; P1=dispcodedispbufdispbitcnt; P3=dispbitcodedispbitcnt; dispbitcnt+; if(dispbitcnt=8) dispbitcnt=0; tcnt+; if(tcnt=4000) tcnt=0; second+; if(second=60) second=0; minute+; if(minute=60) minute=0; hour+; if(hour=24) hour=0; dispbuf0=second%10; dispbuf1=second/10; dispbuf3=minute%10; dispbuf4=minute/10; dispbuf6=hour%10; dispbuf7=hour/10; 九、实验总结与心得体会本实验虽然简单,但仍使我对单片机有了进一步的了解,因为对汇编语言不是很了解,用汇编实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论