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

下载本文档

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

文档简介

1、 单片机课程设计专业:生物医学工程班级:11医工本(一)班姓名:许谷益学号:指导老师:王佑湖课 程 设 计 课 题课题一 简易电子时钟设计一、51系列单片机简介MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。INTEL公司将MCS51

2、的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL公司开发生产的。MCS-51系列单片机MCS-51系列单片机分为两大系列,即51子系列与52子系列。51子系列:基本型,根据片内ROM的配置,对应的芯片为8031、8051、8751、895152子系列:增强型,根据片内ROM的配置,对应的芯片为8032、8052、8752、8952这两大系列单片机的主要硬件特性如下表:片内ROM型式ROM大小RAM大小寻址范围I/O特性中断源数量无内容来自单片机之家www

3、.ROM内容来自单片机之家EPROM计数器并行口8031805187514KB128B64KB2*164*8580C3180C5187C514KB128B64KB2*164*858032805287528KB256B64KB3*16内容来自单片机之家4*8680C3280C5287C528KB256B64KB3*164*86从上表中可以看到,8031、8031、8032、80C32片内是没有ROM的,对应着上表看,我们可以发现,51系列的单片机的RAM大小为128B,52系列的RAM大小为256B,51系列的计数器为两

4、个16位的,52系列的计数器为三个16位计数器。51系列的中断源为5个,52系列的中断源为6个。二、设计任务和要求利用单片机的定时/计数器,以及阵列键盘和LED显示进行设计。在数码管显示器上实现电子时钟,并且能进行设置时间、暂停和启动控制。要求如下:1. 按下电源开关,LED数码管开始从初始位置开始计时。2.按下位于P1.0的开关时进入时间设定,按一下调时,再按一下调分,再按一下调秒。3.按下位于P1.1的开关时进入闹钟设定,按一下调时,再按一下调分。4.按下位于P1.2的键实现加的功能。5按下位于P1.3的键实现减的功能。6.始终运行了也可以按复位键使时钟回到初始状态。三、课程设计原理: 单

5、片机控制的数字时钟的硬件和软件设计,写出了C语言源程序。此数字时钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。显示器件选用LED七段数码管。在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。针对数字时钟会产生走时误差的现象,在电路中就设计有校准时间功能的电路。使用动态数码显示的方法,运用独立式按键识别过程,按“时”、“分”、“秒”数据送出显示处理方法。四、系统硬件电路设计根据以上电子时钟的设计要求可以分为以下的几个硬件电路模块:单片机模块、数码显示模块与按键模块,模块之间的关系如下图所示。单片机晶振手动复位数码管显示时间调整按钮四、元器件清单名称数量 单价CPUSTC89

6、C52RC1 晶振12MHZ1 电阻1K3 电容10uf1 电容30pf2 40引脚插针1 4位共阴数码管2 按键5 DCJACK 电源坐子2 红LED 灯1 蜂鸣器1 导线若干1 电路铜板1 USB 电源线1K 排阻8550三极管111五、课程设计目的:六、参考电路电子时钟电路参考图如图所示七、流程图在编程上,首先进行初始化,定义程序的入口地址以及终端的入口地址,在主程序开始定义了一组固定单元用来储存计数的时、分、秒,在显示初值之后,进入主循环。在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零功能,系统总流程图如下:八、正反实物图七、程序: #include#define tl

7、 0xba;#define th 0x3c;sbit time=P10;/时间设置sbit timer=P11;/闹钟设置sbit add=P12;/加sbit dec=P13;/减sbit speaker=P35;/闹钟输出bit disp_sd;/数码管闪动显示标志位bit disp_ms;/数码管显示时间/闹钟标志位bit disp_sdt;/数码管闪动间隔反转标志位bit zhengdian=0;/整点报时标志位unsigned char code led=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /数字0-9的编码/unsi

8、gned char code led=0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,0xDF,0xD7,; /数字0-9的编码unsigned char code moth=0x01,0x3,0x04,0x05,0x06,0x07,0x08,0x09,0x010,0x11,0x12; /数字0-9的编码unsigned char time_cc,timer_cc,ml;/调时计数器unsigned char count0,com,count1,second,minit,hour;/时间时分秒unsigned int second1,minit1,hour1,y

9、ers,yers2,Months,days,ryears,daydata,Mothdata,dsfl,dsfg;/闹钟时分秒unsigned char hour_zd;/整点小时记录unsigned char timenum1,timenum2,timenum3,f1,f2,st;unsigned int dsflg,timeval,timerval,addval, adcval,dayfl;void delay(void)unsigned int i;for(i=0;i100;i+);void delay1(unsigned int k) unsigned int x,y;for(x=0;x

10、k;x+) for(y=0;y23) /限位hour=0;P0=ledhour/10;/显示小时函数P2=0xFE;delay();P2=0xFF;P0=ledhour%10; /显示小时函数P2=0xFD;delay();P2=0xFF;if(timenum1=2) /如果timenum1=2 调分 /以下也是和调时一样的方法dsflg=0;st=0;if(add=0)delay();delay();if(add=0)while(!add);minit+;if(dec=0)delay();delay();if(dec=0)while(!dec);minit-;if(minit60)minit

11、=0;P0=ledminit/10;P2=0xF7;delay();P2=0xFF;P0=ledminit%10;P2=0xEF;delay();P2=0xFF;if(timenum1=3)/如果timenum1=3 调秒dsflg=0;st=0;if(add=0)delay();delay();if(add=0)while(!add);second+;if(dec=0)delay();delay();if(dec=0)while(!dec);second-;if(second60)second=0;P0=ledsecond/10;P2=0xBF;delay();P2=0xFF;P0=leds

12、econd%10;P2=0x7F;delay();P2=0xFF;if(timenum1=4) /如果timenum1=4 退出 TR1=1;timenum1=0;dsflg=1;f2=1; st=1;void almset()timenum1=0;if(timer=0) /键盘上的闹钟键按下 delay();delay();if(timer=0)while(!timer); /松手timenum2+; /标记+f1=0;if(timenum2=1)/如果timenum2=1设定脑钟的小时dsflg=0;st=0;if(add=0) /加键按下delay();delay();if(add=0)

13、while(!add);/松手hour1+;/小时+if(dec=0) /减键按下delay();delay();if(dec=0)while(!dec);/松手hour1-; /小时-if(hour123) /限位hour1=0;P0=ledhour1/10;/小时显示P2=0xFE;delay();P2=0xFF;P0=ledhour1%10;P2=0xFD;delay();P2=0xFF;P0=0x77; /显示 一P2=0xBF;delay();P2=0xFF; /显示 一P0=0x38;P2=0x7F;delay();P2=0xFF;if(timenum2=2) /如果timenum

14、2=1设定脑钟的分钟 和上面小时一样dsflg=0;st=0;if(add=0)delay();delay();if(add=0)while(!add);minit1+;if(dec=0)delay();delay();if(dec=0)while(!dec);minit1-;if(minit160)minit1=0;P0=ledminit1/10;P2=0xF7;delay();P2=0xFF;P0=ledminit1%10;P2=0xEF;delay();P2=0xFF;P0=0x77;P2=0xBF;delay();P2=0xFF;P0=0x38;P2=0x7F;delay();P2=0

15、xFF;if(timenum2=3)/如果timenum2=3退出timenum2=0;dsflg=1;f1=1;st=1;void almkozi()timer_cc=1;/second,minit,hour;/时间时分秒/second1,minit1,hour1;/闹钟时分秒if(hour1=hour)&(minit1=minit) time_cc=1; if(com=20)com=0;if(time_cc=1)speaker= speaker;if(minit1!=minit)time_cc=0;speaker=1;/*主函数*void main(void) second=00; /时间

16、初始化为12:59:00minit=59;hour=12;second1=0;/闹钟默认为13:01:00minit1=01;hour1=13;count0=0x00;count1=0x00;timenum1=0;f1=1;f2=1;dsflg=1;st=1;P1=0xFF;TMOD=0x11;TL1=tl;TH1=th;EA=1;TR1=1;ET1=1;while(1)if(zhengdian=1)speaker=0;delay1(1);speaker=1;delay1(1);if(f1=1)keykonzhi();if(f2=1)almset();almkozi();if(dsflg=1)

17、display();/*中断服务函数*void time0_int(void) interrupt 3 TL1=tl;TH1=th;count0+;com+;if(count0=20) count0=0;second+;dsfl+;if(hour_zd=second)/报时到小时数后关闭报时标志。zhengdian=0;if(second=60)second=0;minit+;if(minit=60)zhengdian=1;/开启整点报时minit=0;hour+;hour_zd=hour;if(hour_zd12)hour_zd=hour_zd-12;/12小时制报时方式if(hour=24)hour=0; /*中断服务函数*心得体会这次简易时钟的设计与制作,我们花费了很长的时间。我们通过这次设计学会了设计的基本思路,也对89C51有了进一步的了解。

温馨提示

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

评论

0/150

提交评论