单片机实训报告_第1页
单片机实训报告_第2页
单片机实训报告_第3页
单片机实训报告_第4页
单片机实训报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、 单片机实训报告单片机实训报告 实训题目实训题目一、实训目的一、实训目的二、整体设计二、整体设计三、硬件电路图三、硬件电路图四四、程序、程序流程图流程图五、源五、源程序程序六、实训体会六、实训体会实训报告第 一 页一、一、实训目的实训目的通过数字钟的设计与制作,将前面所学的单片机内部定时器资源、i/o 端口、键盘和现实接口等知识融会贯通,锻炼独立设计、制作和调试应用系统的能力,深入领会单片机应用系统的硬件设计、模块化程序设计及软硬件调试方法等,并掌握单片机应用系统的开发过程。本设计主要实现以下功能: (1)自动计时,由 6 位 led 显示器显示时、分、秒; (2)具有校准功能,可以设置当前时

2、间; (3)具备定时启闹功能,可以设置启闹,启闹 1 分钟后自动关闭闹钟。二、整体设计二、整体设计1. 设计要求(1)自动计时,由 6 位 led 显示器显示时、分、秒。(2)具备校准功能,可以设置当前时间。 -按键调整时间(3)具备定时启闹功能,可以设置启闹时间,闹 60 秒后自动关闭闹铃。2. 系统总体设计方案 实训报告第 二 页3.3.系统方案选择系统方案选择(1)单片机选型及最小系统选用 mcs-51 系列主流芯片 stc89c52rc,内部带有 4kb 的 flash rom,无须外扩程序存储器。由于数字钟无需大量运算和暂存数据,片内 128 字节 ram 可以满足设计要求。(2)计

3、时方案选择(1)实现时钟功能,各大厂家推出了一系列实时时钟电路,如ds1287、ds12887、ds1302、pcf8563、s35190 等。这些芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据每秒自动更新一次,不需程序干预。单片机可通过中断或查询方式读取计时数据。(2)利用单片机内部定时器进行中断定时,配合软件延时实现时、分、秒计时功能。(3)显示及键盘方案利用单片机并行 i/o 口,实现 led 动态显示该方案直接使用单片机并行口作为显示接口,无需外扩接口芯片,但占用资源较多,且动态扫描显示方式需占用 cpu 时间。在非实时测控或单片机具有足够并行口资源的情况下可以采用。所

4、以选用 led 数码管。利用液晶 lcd1602 显示,实现液晶显示,该方案显示信息量大,编程麻烦。mcu显示模块键盘模块实时时钟ds1302模块数据存储eeprom 24lc02串口通信模块实训报告第 三 页设计按键,按键采用 44 键盘,使显示结果更简洁。功能键:时间设定,首先按下是时钟秒的调节;其次为时钟分的调节;再次为时钟时的调节;加 1 键:加 1 键为每次按下功能键时,分别对时、分、秒进行加 1;减 1 键:减 1 键为每次按下功能键时,分别对时、分、秒进行减 1;时钟与闹铃转换键:闹钟设置/启闹/停闹键。三、硬件电路图三、硬件电路图实训报告第 四 页123456abcd65432

5、1dcbatitlenumberrevisionsizebdate:26-dec-2011sheet of file:c:documents and settingsadministrator件件件件件件件backup1.ddbdrawn by:p1.01p1.12p1.23p1.34p1.45p1.56p1.67p1.78rst9p3.0rxd10p3.1txd 11p3.2int012p3.3int113p3.4 t014p3.5 t115p3.6 wr16p3.7 rd17xtal218xtal119vss20p2.021p2.122p2.223p2.324p2.425p2.526p2.

6、627p2.728psen29ale30ea31p0.732p0.633p0.534p0.435p0.336p0.237p0.138p0.039vcc40stc89c52vcc1f2g3e4d5vcc6dp7c8b9a10gnd1k20022ufvccresetvccp00p01p02p03p04p05p06p07vcc1f2g3e4d5vcc6dp7c8b9a10vcc1f2g3e4d5vcc6dp7c8b9a10vcc1f2g3e4d5vcc6dp7c8b9a10vcc1f2g3e4d5vcc6dp7c8b9a10vcc1f2g3e4d5vcc6dp7c8b9a10q1pnpq2pnpq3

7、pnpq4pnpq5pnpq6pnpa1b2c3e14e25e36y015y114y213y312y411y510y69y77u?74ls138r11kr21kr31kr41kr51kr61kvccp00p01p02a7b1c2d6lt3bi/rbo4rbi5a13b12c11d10e9f15g14u?74ls47r9100r10100r11100r12100r13100r14100r15100vccp04p05p06p07c1+1c1-3c2+4c2-5t1 in11t2 in10r1 in13r2 in8gnd15vcc16vs+2vs-6t1 out14t2 out7r1 out12r2

8、 out9max232162738495j1db9+c210u+c310u+c510u+c610u+c7100uvccrxdtxds1s2s3s4p14p15p16p17s5s6s7s8s9s10s11s12s13s14s15s16p10p11p12p13ls1speakerq7pnpr2010kr211kr22200vccp33四四、程序、程序流程图流程图实训报告第 五 页开始初始化启动定时器显示时钟检测键盘键盘模块显示模块响闹钟停止ny是否有键按下闹钟时间是否到主函数实训报告第 六 页是否有键按下切功能键显示模块分加调试程序分加 1分减时加时减调试程序分减 1调试程序时加 1调试程序时减

9、1yyyyyyn键盘模块键盘模块显示模块切换键按下u=1显示时钟显示闹钟yyu=2显示模块显示模块五、源五、源程序程序#include#define uchar unsigned char #define uint unsigned intsbit p10=p10;sbit p14=p14;sbit p15=p15;sbit p16=p16;sbit p17=p17;实训报告第 一 页sbit p3=p33;uchar t0;/定义 hang lie key t0uint n,x,p,w,z,h;int i,j,m,a,b,c,d,k,e,f,r,y,a1,b1,c1,d1,e1,f1,u,h

10、1,k1,r1,v;uchar code tab=0 x00,0 x10,0 x20,0 x30,0 x40,0 x50,0 x60,0 x70,0 x80,0 x90;void delay(uint q);/延时函数声明void saomiao();/键盘扫描函数声明void xianshi();void naozongxianshi();void dingshi();void saomiao();/*显示*/void xianshi() a=h%10;b=h/10;c=k%10;d=k/10;e=r%10;f=r/10;p0=taba;delay(1);p0=tabb+0 x01;dela

11、y(1);p0=tabc+0 x02;delay(1);p0=tabd+0 x03;delay(1);p0=tabe+0 x04;delay(1);p0=tabf+0 x05;delay(1); /*闹钟显示*/ void naozongxianshi() a1=h1%10;b1=h1/10;c1=k1%10;d1=k1/10;e1=r1%10;f1=r1/10;p0=taba1;delay(1);p0=tabb1+0 x01;delay(1);p0=tabc1+0 x02;delay(1);p0=tabd1+0 x03;delay(1);p0=tabe1+0 x04;delay(1);p0=

12、tabf1+0 x05;delay(1);/*定时器t0*/ void dingshi() ea=1; et0=1; tmod=0 x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; tr0=1; void timer() interrupt 1 th0=(65536-50000)/256;tl0=(65536-50000)%256; m+;if(m=20) m=0;h+; if(h=60)实训报告第 二 页 h=0;k+; if(k=60) k=0;r+; if(r=24) r=0; /*键盘扫描函数*/void saomiao() unsi

13、gned char hang=0,lie=0,key=0; p1=0 x0f; /赋初值if(p1!=0 x0f) /判断是否有键按下 hang=p1; /读行号 p1=0 xf0; /行列反转 lie=p1; /读列号 key=hang|lie; /读键值 switch(key)/根据键值不同 调用不同的处理函数 case 0 xee:n=1;break;case 0 xde:n=2;break;case 0 xbe:n=3;break;case 0 x7e:n=4;break;case 0 xed:n=5;break;case 0 xdd:n=6;break;case 0 xbd:n=7;

14、break;case 0 x7d:n=8;break;case 0 xeb:n=9;break;case 0 xdb:n=10;break;case 0 xbb:n=11;break;case 0 x7b:n=12;break;case 0 xe7:n=13;break;case 0 xd7:n=14;break;case 0 xb7:n=15;break;case 0 x77:n=16;break; /*延时函数*/ void delay(uint o ) for(i=0;i0;j-);/*功能选择键*/void gongnengjian() if(n=5) if(n!=5);n=0;u+;

15、if(u=3) u=1; delay(30); /*时间调试+闹钟调试*/void shijiantiaoshi() if(u=1) if(n=1) if(n!=1);n=0; k+;delay(30); if(k=60) 实训报告第 三 页 r=r+1; k=0;if(r=24) r=0; if(n=2) if(n!=2);n=0; k-;delay(30); if(k=0) k=59; if(n=3) if(n!=3);n=0;r+;delay(30);if(r=24) r=0; if(n=4) if(n!=4);n=0; r-;delay(30); if(r=-1) r=23; xian

16、shi();/*闹钟*/if(u=2)if(n=1) if(n!=1);n=0; k1+;delay(30); if(k1=60) k1=0;r1=r1+1; if(r1=24) r1=0; if(n=2) if(n!=2);n=0; k1-;delay(30); if(k1=0) k1=59; if(n=3) if(n!=3);n=0; r1+;delay(30); if(r1=24) r1=0; if(n=4) 实训报告第 四 页 if(n!=4);n=0; r1-;delay(30); if(r1=-1) r1=23; naozongxianshi(); /*闹钟*/void naozhong() if(k=k1)&(r=r1) for(v=0;v50;v+) p3=0; p3=1; /*主函数*/void main() dingshi(); while(1) saomiao(); gongnengjian(); shijiantiaoshi(); naozhong(); 六、实训体会六、实训体会十天的单片机实训结束了,这次让我学到了很多东西, 为期 10 天的单片机实训虽然不是很长,但是让我感觉到了原来编程不是很简单,先开始的显示时钟不是很难,下面的闹钟设置及调试部分就花费了相当长的时间,本来还以为编程会很简单的,等到实际操作起来才知道它的复杂性,

温馨提示

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

评论

0/150

提交评论