《单片机实习程序.doc》由会员分享,可在线阅读,更多相关《单片机实习程序.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章设计任务1.1设计目的课程设计的主要目的是通过对电子时钟的设计实践,了解单片机系统控制过程、设计要求、应完成的工作内容和具体设计方法。通过设计也有助于复习、巩固以往所学的知识,达到灵活应用的目的。课程设计应强调能力培养为主,在独立完成设计任务的同时,还要注意其他方面的能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;差于图书资料、产品手册和各种工具书的能力;工程绘图的能力;书写技术报告和编制技术资料的能力。1.2设计要求在课程设计中,学生是主体,应充分发挥他们的主动性和创造性。教师的主导作用是引导其掌握完成设计内容的方法。为保证顺利完成设
2、计任务还应做到以下几点:1、在接受设计任务后,应根据设计要求和应完成的设计内容进度计划,确定各阶段应完成的工作量,妥善安排时间。2、在方案确定过程中应主动提出问题,以取得指导老师的帮助,同时要广泛讨论,依据充分。在具体设计过程中要多思考,尤其是主要参数,要经过计算论证。3、说明书要求文字通顺、简练,字迹端正、整洁。4、应在规定的时间内完成所有的设计任务。5、如果条件允许,应对自己的设计线路进行实验讨论,考虑进一步改进的可能性。3第五章参考文献第一章设计任务1.1设计目的课程设计的主要目的是通过对电子时钟的设计实践,了解单片机系统控制过程、设计要求、应完成的工作内容和具体设计方法。通过设计也有助
3、于复习、巩固以往所学的知识,达到灵活应用的目的。课程设计应强调能力培养为主,在独立完成设计任务的同时,还要注意其他方面的能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;差于图书资料、产品手册和各种工具书的能力;工程绘图的能力;书写技术报告和编制技术资料的能力。1.2设计要求在课程设计中,学生是主体,应充分发挥他们的主动性和创造性。教师的主导作用是引导其掌握完成设计内容的方法。为保证顺利完成设计任务还应做到以下几点:1、在接受设计任务后,应根据设计要求和应完成的设计内容进度计划,确定各阶段应完成的工作量,妥善安排时间。2、在方案确定过程中应主动
4、提出问题,以取得指导老师的帮助,同时要广泛讨论,依据充分。在具体设计过程中要多思考,尤其是主要参数,要经过计算论证。3、说明书要求文字通顺、简练,字迹端正、整洁。4、应在规定的时间内完成所有的设计任务。5、如果条件允许,应对自己的设计线路进行实验讨论,考虑进一步改进的可能性。第二章总体设计2.1硬件部分1、系统设计总框图图2-1设计总框图此次课程设计的的电子钟由单片机AT89C51、时钟电路、动态数码管显示电路组成。运用C语言来控制单 片机AT89C51来实现动态数码管显示,并在此基础上综合运用,时间电子钟的设计(包括时钟、秒表、显示)。2、电路组成及工作原理语言单片机LCD1602动态显示
5、4本文数字时钟设计原理主要利用AT89C51单片机,P2口控制LCD1602显示,P1口与按键相接用于时间的校正。整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”计数器的输出,通过LCD1602显示器显示出来。校时电路是直接加一个脉冲信号到时计
6、数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。3、单片机AT89C51(1)AT89C51简介单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务
7、。(2)AT89C51的主要性能参数与MCS-51产品指令系统完全兼容,4k字节可重擦写FLASH闪速存储器。1000次擦写周期。全静态操作:0Hz24MHz。三级加密程序存储器,1288字节内部RAM32个可编程I/O口线,2个16位定时/计数器6个中断源,可编程串行URAR通道,低功耗空闲和掉电模式。AT89C51提供以下标准功能:4k字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。空闲方式体制CPU的工作
8、,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。下图为单片机AT89C51各管脚图:#include #define uchar unsigned char#define uint unsigned intuint num,k1num,count;uchar hour,min,sec;sbit lcde = P27;sbit lcdrs = P26;sbit lcdrw = P25;sbit k1 = P10;sbit k2 = P11;sbit k3 = P12;uchar code table
9、 = 2011-03-29 TUE;uchar code table1 = 00:00:00;void delay (unsigned int i) /*延迟函数*/uchar j;for (i;i0;i-)for (j=110;j0;j-);void write_com(uchar com) /*LCD写指令*/lcdrs = 0;lcdrw = 0;P0 = com;delay(5);lcde = 1;delay(5);lcde = 0;void write_data(uchar d)/*LCD写数据*/lcdrs = 1;lcdrw = 0;P0 = d;delay(5);lcde =
10、1;delay(5);lcde = 0;void write_hms(uchar da,uchar add)uchar shi,ge;shi = da/10;ge = da%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);void keyscan() /*键盘扫描*/if (k1 = 0) /功能键delay(5);if (k1 = 0)k1num+;while(!k1);if (k1num = 1)TR0 = 0;write_com(0x80+0x40+10);write_com(0x0f);void
11、keyscan() /*键盘扫描*/if (k1 = 0) /功能键delay(5);if (k1 = 0)k1num+;while(!k1);if (k1num = 1)TR0 = 0;write_com(0x80+0x40+10);write_com(0x0f);if (k1num = 2)write_com(0x80+0x40+7);write_com(0x0f);if (k1num = 3)write_com(0x80+0x40+4);write_com(0x0f);if (k1num = 4)k1num = 0;write_com(0x0c);TR0 = 1;if (k1num !=
12、 0)/增加键if (k2 = 0)delay(5);if (k2 = 0)while(!k2);if (k1num = 1)sec+;if (sec = 60)sec = 0;write_hms(sec,10);write_com(0x80+0x40+10);if (k1num = 2)min+;if (min = 60)min = 0;write_hms(min,7);write_com(0x80+0x40+7);if (k1num = 3)hour+;if (hour = 24)hour = 0;write_hms(hour,4);write_com(0x80+0x40+4);if (k
13、3 = 0) /减少键delay(5);if (k3 = 0)while(!k3);if (k1num = 1)sec-;if (sec = -1)sec = 59;write_hms(sec,10);write_com(0x80+0x40+10);if (k1num = 2)min-;if (min = -1)min = 59;write_hms(min,7);write_com(0x80+0x40+7);if (k1num = 3)hour-;if (hour = -1)hour = 23;write_hms(hour,4);write_com(0x80+0x40+4);void init
14、() /*初始化*/delay(20);write_com(0x38);delay(1);write_com(0x0c);delay(1);write_com(0x06);delay(1);write_com(0x01);delay(1);TMOD = 0x01;TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;EA = 1;ET0 = 1;TR0 = 1;void main() /*主函数*/init();write_com(0x80);for (num=0;num15;num+)write_data(tablenum);delay(10);wr
15、ite_com(0x80+0x40);for (num=0;num12;num+)write_data(table1num);delay(10);while(1)keyscan();void Timer0_irq(void) interrupt 1TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;count+;if (count = 20)count = 0;sec+;if (sec = 60)sec = 0;min+;if (min = 60)min = 0;hour+;if (hour = 24)hour = 0;write_hms(hour,
16、4);write_hms(min,7);write_hms(sec,10);write_hms(sec,10);课程设计总结经过两周的时间以及对整本教材的知识总结,把课程设计分成了硬件和软件两大模块。总的来说,硬件部分很好入手,电路也教简单,主要涉及的是简单的按键、电容、电阻、晶振和数码管。在软件部分,细分为了按键模块、显示模块、定时/计数模块,最后把几个模块整合在主程序模块中,使得程序简单明了。整个设计过程中遇到的最大问题是软件的编写,由于采用的是汇编语言,其间使用到的各种寄存器、存储器地址、变量很多,很难对程序的整体把握。通过电子钟的设计,对单片机的原理、结构、外围电路进一步的了解。在整个设计过程中学到了团体精神和独立解决问题的重要性。为以后的求职之路打下了基础