单片机时钟设计_第1页
单片机时钟设计_第2页
单片机时钟设计_第3页
单片机时钟设计_第4页
单片机时钟设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机控制的时钟设计报告设计目的单片机即单片机微型计算机,是集CPU、存储器、定时和多种接口于一体的微控制器。它 体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。这次设计通过对它的学习、 应用,从而达到学习设计、开发软硬件的目的。学习使用4X4矩阵键盘的设计方法,实践 对比按键抖动对扫描键盘输出的影响。学习数码管的动态显示功能以及对液晶、蜂鸣器和发 光二极管的操作。同时,学会应用keil软件设计的具体要求 设计的电子时钟可以同时通过数码管和液晶显示,并能通过按键实现调整时间和设置闹钟的 目的。采用方式一对12MHZ的系统时钟进行定时计数,然后把秒、分、时计数器分成十位 和各位在液

2、晶上显示(数码管显示秒和分),数码管采用动态显示的方法,在处理过程中加 入按键判断的程序,能对按键进行处理,系统扫描到按键确实有作用后使发光二极管灯亮。 系统设计总体设计 经过分析论证,确定流程图如下:整套系统以AT89S52单片机为核心控制系统,利用其定时器采用方式1进行计时,并通过 1602A液晶显示模块显示出来,同时,也加入了数码管动态显示功能,整个设计还可以实现 闹钟功能,一旦到达闹钟设定时间,将进入中断开启蜂鸣器。矩阵键盘右16个开关组成用 来调时。单片机最小系统的设计+5V 夏橙畫犍刊口Pl 恥PL712 34 5 6Pl tlPl 1P3.2F331肥4芮5if排插 珀二+5V

3、夏橙畫犍刊口Pl 恥PL712 34 5 6Pl tlPl 1P3.2F331肥4芮5if排插 珀二I40芻貂57轴站343332.311301却231271託阳241姑22 121125S9EAT0 12 345 6 7s 91L fa- - ajVCC.,PQ.0.P0.1P0.3P0.4*Ml?:* 排阻畑PJ_7P2 6P20设计原理最小系统的设计晶振的作用非常大,它结合单片机内部的电路,产生单片机所需要的时钟频 率,两旁的负载电容是为了提供晶振工作需要的并联谐振状态,最大限度的保证频率值的误 差。复位电路中,刚接通电源时,电容充电,10K电阻上出现电压,单片机复位。几个毫秒后, 充电

4、停止,10K电阻电压为0,单片机正常工作。工作期间,按下复位键电容放电,松手, 电容充电,单片机复位,几毫秒后正常工作。P0 口上拉电阻的作用,P0作为开漏输出端口时,只有外接上拉电阻才能输出高电平。单片机中断系统基本原理MCS-51单片机的中断系统结构本设计中,定时器/计数器 T0 用于时间计时。选择方式 1,重复定时,定时时间设为 50ms, 定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1, 秒单元加到 60则对分单元加 1,同时秒单元清0;分单元加到60则对时单元加1,同时分 单元清0;时单元加到 24 则对时单元清0,标志一天时间计满。在对各单元计

5、数的同时,把 它们的值放到存储单元的指定位置。定时器工作方式 1TCONTMODM0 D0M1 ctFGATEM0M1C/TGATE D7产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断 信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务 程序。理想情况下,TL0满了后向TH0进1, TL0变为0 x00。当TH0满了后,溢出中断,THO变为0 x00。当处于前两种情况时,CPU不能及时响应定时器的溢出中断请求,从而产 生了较大误差,本设计采用了动态补偿的方法来解决这个问题,详见软件设计。矩阵键盘的设计操作原理以操作第1行为例,设置

6、列信号为1111,设置行信号为1110,此时当第1行有一个键按下 时,该键所在列信号变为0。比如第1行第1列的键按下,信号就变为11101110与Oxff 取位与(&)就能扫描出确实有键按下了,这时,读出矩阵键盘所接单片机接口的电平,以 确定是哪个键按下。操作其他行原理类似。因为一般的开关在大约20ms内信号不稳定,存在所谓的“开关抖动”,会产生多个脉冲影响 电路正常工作。所以软件设计时要注意做防抖处理。数码管设计0 1J 申 b i 7三 TT20 1J 申 b i 7三 TT2L&HU7+HC 575设计原理数码管的设计采用动态显示原理,动态显示的特点是将所有位数码管的段选线并联在一起,

7、由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮 流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的 感觉好像各位数码管同时都在显示。设计中使用了两个锁存器,给WELALL 个高电平,给DULALL 个低电平时,系统给 DOD7赋值,即决定了哪几位数码管有效。给DULALL 个高电平,给WELALL 一个低 电平时,系统给DOD7赋值,即决定了有效位显示什么数字。很好地达到了动态显示的目 的。蜂鸣器模块三极管的作用通过对三极管基极的操作,起到对蜂鸣器开关的作用。液晶显示模块的设计发光二极管的设计直接将发光二极管与10K电阻串联接入电

8、路即可。Proteus仿真电路19 A P0._2P3 6 -I -In勺勺rkkU2doQ0D1Q1D2Q2D3Q3D4Q4D5Q5D6Q6D7Q7LEP0.4P0.P0.P0.JP0.8U3doQ0D1Q1D2Q2D3Q3D4Q4D5Q5D6Q6D7Q7LEE. . P0.FP0.J7UT卜XTAL2P0.1/AD1P0.2/AD2P0.3/AD3RSTP0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9PSENP2.2/A10P2.3/A11P2.4/A12ALEEAP1.0/T2P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP1

9、.1/T2EXP3.1/TXDP1.2P3.2/INT0P1.3P3.3/INT1P1.4P1.5P3.4/T0P3.5/T1P1.6P3.6/WR,32 po.o 238 P0.1 337 P0.2 436 P0.3 535P0.4634 P0.5 7五 P0.6 832 P0.7 9R34.7k软件程序#include#define uchar unsigned char#define uint unsigned intsbit dula=P3人6;sbit wela=P3人7;ucharcodetimer=0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02

10、,0 x78,0 x00,0 x10,0 x08,0 x03,0 x46,0 x21,0 x06,0 x0e ,0 xff;uchar fixtime;uint a,b,c,d,c1,d1,num1,num2,num3,num4,num5,num6,flag,flag1;sbit red=P3A5;sbit alarm=P3A3;sbit RS=P3A0;sbit E=P3A2;uchar code table1=:;/延时函数void delay(uchar z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);/初始化并开启中断void unin()a=0;

11、b=0;c=0;d=0; c1=0;d1=0;flag=0;flag1=0;TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;/矩阵键盘调时函数void change()uchar temp,key;key=0;P1=0 xfd;temp=P1;temp=temp&0 xf0; if(temp!=0 xf0)delay(5);temp=P1; temp=temp&0 xf0; if(temp!=0 xf0) red=1; temp=P1;switch(temp)case 0 xed:key=1;brea

12、k;case 0 xdd:key=2;break;case 0 xbd:key=3; break;case 0 x7d:key=4; break; while(temp!=0 xf0)temp=P1; temp=temp&0 xf0;red=0;if(key=1)flag1+;if(key=2)if(flag1%2=0) c+;if(flag1%2=1) c-;if(key=3)if(flag1%2=0) d+;if(flag1%2=1) d-;if(key=4)flag+;/ 时间自加函数void add()if(a=15)a=0;b+;if(b=60)b=0;c+;if(c=60)c=0;

13、 d+; if(d=24) d=0; /闹钟函数 void beep() if(c=c1) if(d=d1) if(flag%2=0) alarm=0; delay(10); alarm=1; delay(10); alarm=0; delay(10);alarm=1; delay(10); /数码管显示函数 void out() num1=d/10; num2=d%10; num3=c/10; num4=c%10; num5=b/10; num6=b%10;wela=1;P0=0 xf1; wela=0; dula=1; P0=timernum3; dula=0;delay(5);wela=

14、1;P0=0 xf2; wela=0; dula=1;P0=timernum4; dula=0;delay(5);wela=1;P0=0 xf4; wela=0; dula=1;P0=timernum5; dula=0;delay(5);wela=1;P0=0 xf8; wela=0; dula=1;P0=timernum6; dula=0;delay(5);/液晶显示函数 void write_com(uchar com) RS=0;P2=com;delay(5);E=1;delay(5);E=0;delay(5);void write_date(uchar date)RS=1;P2=dat

15、e;delay(5);E=1;delay(5);E=0;delay(5);void write(uchar date,uchar dot) write_com(0 x80+0 x40+dot);/ delay(5); write_date(0 x30+date);/ delay(5);void unin1()E=0;write_com(0 x38); write_com(0 x0c); write_com(0 x06); write_com(0 x01);write_com(0 x80+0 x40);void out1()num1=d/10; num2=d%10;num3=c/10; num4

16、=c%10;num5=b/10; num6=b%10;unin1(); write(num1,1); write(num2,2); write_com(0 x80+0 x40+3); write_date(table10); write(num3,4); write(num4,5); write_com(0 x80+0 x40+6); write_date(table10); write(num5,7); write(num6,8);/主函数void main()unin();while(1)change();add(); beep();out();out1();/定时器中断服务程序void

17、time() interrupt 1EA=0;TR0=0; fixtime=TL0+0X0C;TH0=0 xFC+(char)CY;EA=1;TR0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;a+;设计制作流程1、在 PROTEUS 中设计硬件PROTEUS 使用过程如下:选择元器件放置元器件连线添加程序运行仿真 元器件清单如下:2、在KEIL中编写程序,编译、连接形成HEX文件。3、在 PROTEUS 中把 HEX 文件加载到单片机芯片上。4、运行仿真看结果。5、按照 proteus 仿真图进行焊接。6、下载程序,看实物的运行结果。7、写设计报告。 参考文献 郭天祥,十天学会单片机视频教程 卢

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论