课程设计:基于单片机AT89C52电子时钟课程设计说明书.doc_第1页
课程设计:基于单片机AT89C52电子时钟课程设计说明书.doc_第2页
课程设计:基于单片机AT89C52电子时钟课程设计说明书.doc_第3页
课程设计:基于单片机AT89C52电子时钟课程设计说明书.doc_第4页
课程设计:基于单片机AT89C52电子时钟课程设计说明书.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

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

文档简介

单片机课程设计报告一、课程设计内容 1)显示时间功能,能正确显示“时”、“分”。2)显示日期功能,能显示“月”、“日”。3)闹钟功能,可按设定的时间闹时。4)具有校准月、日、时、分的功能。二、元器件介绍本次课程设计我使用的单片机是至强51蓝精灵版,而实验中使用到的关键元器件主要有:stc85c52rc,4*4按键,蜂鸣器,数码管等。下面是stc85c52rc的简单介绍: at89c52是本设计最核心的部件,它是美国atmel公司生产的低电压,高性能cmos 8位单片机,片内含8k bytes的可反复擦写的flash只读程序存储器和256 bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,与标准mcs-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(cpu)和flash存储单元,功能强大。at89c52单片机适用于许多较为复杂的控制应用场合。下图是at89c52最常见的一种封装。 如上图所示,at89c52共有40个管脚,其各个功能如下:vcc 运行时加5vvss 接地xtal1 振荡器反相放大器及内部时钟发生器的输入端xtal2 振荡器反相放大器的输出端rst 复位输入,高电平有效,在晶振工作时,在rst引脚上作用2个机器周期以上的高电平,将使单片机复位。/vpp 片外程序存储器访问允许信号。欲使cpu仅访问外部程序存储器(地址为0000h-ffffh),端必须保持低电平(接地),如果端为高电平(接vcc端),cpu则执行内部程序中的指令。lae/ 当访问外部程序存储器或数据存储器时,ale(地址允许锁存)输出脉冲用于锁存地址的低8位位数字节。一般情况下,ale仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ale脉冲。对flash存储器编程期间,该引脚还用于输入编程脉冲(第二功能)。:程序储存允许()输出是外部程序存储器的读选通信号,当at89c52由外部存储器取指令(或数据)时,每个机器周期两次有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次信号。p0口 是一组8位漏极开路双向i/o口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个ttl逻辑门电路,对端口p0写“1”时,可作为高阻抗输入端用。p1口 是一个内部带上拉电阻的8位准双向i/o口。在对eprom型单片机编程和验证程序时,它接收低8位地址。p1能驱动(吸收或输出电流)4个lsttl电路。p1.0还被用作定时器/计数器2的外部计数输入端,即专用功能t2。p1.1被用作专用功能端t2ex,即定时器t2的外部控制端。参见下表。 p1.1和p1.1的第二功能引脚号功能特性p1.0t2(定时/计数器2外部计数脉冲输入),时钟输出p1.1t2xe(定时/计数器2捕获/重装载触发和方向控制)p2口 是一个带有内部上拉电阻的8位准双向i/o口,p2的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻,某个引脚外部信号拉低是会输出一个电流。p3口 是一组带有内部上拉电阻的8位准双向i/o口。p3口输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对p3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的p3口将用上拉电阻输出电流。p3口除了作为一般的i/o口线外,更重要的用途是它的第二功能,如下表所示: p3口各位的第二功能 端口引脚 第二功能 p3.0rxd (串行输入口)p3.1txd (串行输出口)p3.2 (外部中断0) p3.3 (外部中断1)p3.4t0 (定时/计数器0) p3.5t1 (定时/计数器1)p3.6 (外部数据存储器写选通)p3.7 (外部数据存储器读选通)三、设计方案1)实物图2)实验程序流程图主程序开 始t0初始化,中断初始化,启动定时器while(1)死循环调用子程序调用启停子程序keysure( )键盘扫描调用子程序keyhandle( )根据键盘扫描的返回值进行处理调用compare( )函数比较现在显示的时间是否和闹钟时间相同void main()init(); while(1) keysure();keyhandle();compare(); 初始化函数void init()tmod = 0x01; th0 = 0xdc; tl0 = 0x00; ea=1; et0=1; tr0=1; keytemp=8;/这是为了还没有扫描按键时给keyhandle()函数处理用的/ 实验中只是用了t0这一个定时器,也只是使用了t0这个中断。实验中设置tmod = 0x01使t0工作于方式1。并且由公式t=(65535-m)*6/12mhz,而t为中断溢出时间,为10ms,所以得出初值m=3340=0xdc。键盘扫描函数否是调用keysure()函数用以扫描键盘是否真正被按下键盘是否真的被按下?调用scankey(),根据按下键位返回值给keyhandle()处理void keysure()static bit flag1; p1 = 0xf0;if(p1 != 0xf0)delay_1ms(15);if(p1 != 0xf0)keytemp= scankey();flag1=1; 键盘返回值函数scankey()uchar scankey(void) /键盘扫描后返回值/uchar i,j, temp, buffer4 = 0xef, 0xdf, 0xbf, 0x7f;for(j=0; j4; j+)p1 = bufferj; _nop_();_nop_();_nop_();temp = 0x01; for(i=0; i4; i+)if(!(p1 & temp) return (i+j*4);temp 59) hour=0; break; case 2 : nhour+;keytemp=9; if(nhour24) nhour=0; break; case 3 : month+;keytemp=10; if(month12) month=0; break; default: break; if(which=2)/此减数/ switch(who) case 1 : min+;keytemp=8; if(min59) min=0; break; case 2 : nmin+;keytemp=9; if(nmin59) nmin=0; break; case 3 : day+;keytemp=10; if(day30) day=0; break; default: break; flag=0; if(keytemp=15&flag=1)/此减数/ if(which=1) switch(who) case 1 : hour-;keytemp=8; if(hour0) hour=23; break; case 2 : nhour-;keytemp=9; if(nhour0) nhour=23; break; case 3 : month-;keytemp=10; if(month0) month=12; break; default: break; if(which=2) switch(who) case 1 : min-;keytemp=8; if(min0) min=59; break; case 2 : nmin-;keytemp=9; if(nmin0) nmin=59; break; case 3 : day-;keytemp=10; if(day199) sec+; i=0; if(sec59) sec=0; min+; if(min59) min=0; hour+; if(hour23) day+; hour=0; display();/每次中断程序中都调用一次led扫描程序/led扫描子程序void display()static char i=0;char disbuf4; disbuf1=s1%10; disbuf0=s1/10; disbuf3=s2%10; disbuf2=s2/10;p0=0xff;p2=bi;p0=duanmadisbufi;i+;if(i3)i=0;if(sec&0x01)&i=2)p0&=0x7f;3)实验中使用电路模块电路图led显示模块蜂鸣器模块键盘扫描模块d0d7分别对应io口的p1.0p1.7以下是全部源程序 #include #define uchar unsigned char #define uint unsigned int #includeuchar code duanma=0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xbf;unsigned char code b=0xfe,0xfd,0xfb,0xf7;char sec=0,min=0,hour=2,nsec=0,nmin=1,nhour,month=12,day=1,keytemp;bit flag=0;char who=0;char which=1;sbit led1=p30;sbit led2=p31;sbit led3=p32;sbit led4=p33;sbit spk=p36;/蜂鸣器的接口/#define uint unsigned intchar s1,s2;void display()static char i=0;char disbuf4; disbuf1=s1%10; disbuf0=s1/10; disbuf3=s2%10; disbuf2=s2/10;p0=0xff;p2=bi;p0=duanmadisbufi;i+;if(i3)i=0;if(sec&0x01)&i=2)p0&=0x7f;void init()tmod = 0x01; th0 = 0xdc; tl0 = 0x00; ea=1; et0=1; tr0=1; keytemp=8;/这是为了没有扫描到按键时给keyhandle()函数处理用的/ void tiem0(void) interrupt 1 static unsigned char i=0; th0 = 0xdc; tl0 = 0x00; i+; if(i199) sec+; i=0; if(sec59) sec=0; min+; if(min59) min=0; hour+; if(hour23) day+; hour=0; display();uchar scankey(void)uchar i,j, temp, buffer4 = 0xef, 0xdf, 0xbf, 0x7f;for(j=0; j4; j+)p1 = bufferj; _nop_();_nop_();_nop_();temp = 0x01; for(i=0; i4; i+)if(!(p1 & temp) return (i+j*4);temp 59) hour=0; break; case 2 : nhour+;keytemp=9; if(nhour24) nhour=0; break; case 3 : month+;keytemp=10; if(month12) month=0; break; default: break; if(which=2)/此减数/ switch(who) case 1 : min+;keytemp=8; if(min59) min=0; break; case 2 : nmin+;keytemp=9; if(nmin59) nmin=0; break; case 3 : day+;keytemp=10; if(day30) day=0; break; default: break; flag=0; if(keytemp=15&flag=1)/此减数/ if(which=1) switch(who) case 1 : hour-;keytemp=8; if(hour0) hour=23; break; case 2 : nhour-;keytemp=9; if(nhour0) nhour=23; break; case 3 : month-;keytemp=10; if(month0) month=12; break; default: break; if(which=2) switch(who) case 1 : min-;keytemp=8; if(min0) min=59; break; case 2 : nmin-;keytemp=9; if(nmin0) nmin=59; break; case 3 : day-;keytemp=10; if(day0) day=30; break; default: break; flag=0; flag=0; void delay_1ms(uint i)uchar x,j;for(j=0;ji;j+)for(x=0;x=148;x+);void keysure()static bit flag1; p1 = 0xf0;if(p1 != 0xf0)delay_1ms(15);if(p1 != 0xf0)key

温馨提示

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

评论

0/150

提交评论