单片机实训实验案例

2024-10-23

单片机实训实验案例(精选11篇)

1.单片机实训实验案例 篇一

单片机应用课程设计教学大纲

开课学院:机电工程学院 适用专业:电子科学与技术 课程编号:2009404 课程英文名称:Single-chip Microcomputer Application System Design 实验课程总学时:36 实验课程总学分:1

一、课程性质和目的:

单片机原理及应用是一门技术性、应用性很强的学科,实验教学是它的一个极为重要的教学环节,除实验教学环节,单片机课程设计也是重要的实践教学环节,通过这一环节可使学生不但能够将课堂上学到的理论知识与实践应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能独立进行单片机应用系统的开发设计工作打良好的基础。

二、本课程与其它课程的联系与分工

先修课程:电路分析、模拟电路、数字电路、微机原理、单片机、电子线路常用软件 后续课程:传感器技术、数字信号处理等

三、单片机课程设计的基本要求

1、原则上每生一项设计,不能重复设计。

2、项目大的可多人从事,但每人必须承担足够的设计任务。

3、项目结题需要提供电路图、程序清单、设计说明书等资料,还要提供实物作品,运行照片等。

4、参加科技节展出及评奖的作品,要给与适量的加分。优秀的设计人员优先推荐参加省机电大赛或电子大赛。

5、整个课程设计过程中,严格执行考核制度,对于无故旷课、扰乱课堂秩序、玩游戏、玩手机、不从事设计和制作的行为给予严肃处理。

6、对于课堂表现好的同学,进行加分奖励。

四、课程设计的实施过程

1、基本开发工具的使用

电路设计及仿真运行工具Proteus软件、编程及编译环境Keil uVision软件、程序烧写器的使用及驱动程序的安装。

2、单片机应用系统的搭建方法

电源的设计、振荡电路参数的选择、复位电路的设计、内置及外置程序程序存储器的选择,各端口的驱动能力及接口方法。

3、学生实践能力的摸底测试

通过简单的单片机应用设计,如:流水灯、数码显示、键盘控制等,进行软环境编程测试及硬环境测试。

软环境测试:利用Proteus、Keil C51 进行仿真测试。硬环境测试:搭建具体电路,利用编程器烧写程序,进行调试。

4、选择设计题目

学生可根据自身能力和爱好,选择或自拟设计题目,并进行系统的分析和调研、可行性分析、性价比分析,形成设计任务书。指导教师处备案。

5、确定实施方案

经过方案论证,找出最优化的实施方案。以此评价开发思路。

6、加强指导

指导教师对学生的共性问题进行集中指导,对零散问题进行分别指导。

7、硬件电路设计

根据实施方案,利用Proteus软件设计原理图。原理图的质量作为考核依据。

8、软件设计

根据系统工作过程画出各部分流程图,根据流程图编写程序并进行整合,程序和流程图的质量作为考核依据。

9、仿真调试

编译后的程序加载到原理图上进行仿真,调试,调试成功后的仿真图片作为考核的依据。

10、电路搭建

根据电路原理图设计,进行布线图设计。购买电子元件,焊接线路板,线路板的焊接质量作为考核依据。

11、系统调试

系统调试成功之后,考察功能实现情况,作为考核依据。

12、撰写课程设计论文

要求从选题、论证、设计、仿真、调试、形成作品到感想写入论文内,要符合正规论文格式。

五、考核方案

1、考核分四部分进行:实物作品、课程设计论文、平时成绩、课堂表现

2、实物作品从实现功能和焊接质量进行评分,占总成绩的40%。

3、课程设计论文从论文的规格、要求进行评分,占总成绩的30%。

4、平时成绩就是平时阶段性的检查成绩,占总成绩的20%。

5、课堂表现指出勤、课堂纪律,占总成绩的10%。

6、科技节加分:一等奖5分、二等奖4分、三等奖3分、参展2分。

六、单片机课程设计题目(备选)

1、基于单片机的智能电压表设计

2、基于单片机的LED流水灯系统设计

3、基于单片机的智能船模设计

4、基于单片机的电梯控制模型设计

5、基于单片机的水位控制系统设计

6、基于单片机的多路数据采集系统设计

7、基于单片机的抢答器设计

8、基于单片机的数字温度计设计

9、基于单片机的智能小车设计

10、基于单片机的遥控器设计

11、基于单片机的串行通信发射机设计

12、基于单片机的简易智能电动车设计

13、基于单片机的太阳能热水器控制器设计

14、MCS-51单片机温度控制系统的设计

15、直流电动机的转速检测与脉宽调速

16、基于单片机的智能机器人的设计

17、基于单片机的简易无线竞赛系统的设计

18、基于单片机的车辆闯红灯监控系统设计

19、基于单片机控制的井下瓦斯监控系统设计 20、基于单片机的煤气泄漏检测报警装置设计

21、基于单片机的井式渗碳炉控制系统设计

22、基于单片机的蔬菜大棚温湿度智能控制系统设计

23、基于单片机的电子钟设计

24、基于单片机的液位控制器设计(8051)

25、基于单片机的点阵电子显示屏设计

26、基于单片机的智能寻迹避障小车设计

27、基于单片机的热敏电阻测温系统设计

28、基于单片机的智能型电话远程遥控器设计

29、基于单片机的数控直流电源设计 30、基于单片机的电子万年历设计

31、基于单片机的红外防盗报警器设计

32、基于单片机的花卉温室控温系统设计

33、基于单片机的焊机温度控制系统设计

34、基于单片机的路灯控制器设计

35、基于单片机的车床刀架控制系统设计

36、基于单片机的电机智能综合保护装置设计

37、基于单片机的太阳能热水器控制器设计

38、基于单片机的智能型矿用磁力启动器设计

39、基于单片机的无氧退火炉温控系统设计

40、基于单片机的电厂锅炉过热蒸汽温度监测系统设计

41、基于单片机的摩托车里程表研制

42、基于单片机的自动车库门的设计

43、基于单片机的自动滴灌控制系统的设计

44、基于单片机的预付费电度表设计

45、基于单片机的智能电子秤设计

46、基于单片机的油井巡视定位系统设计

47、基于单片机的照明控制系统

48、基于单片机的锅炉液位控制系统设计

49、基于单片机的洗衣机设计

50、基于单片机的锅炉汽包水位控制系统设计

51、基于单片机的多功能秒表设计

52、基于单片机的无线监护系统的设计

53、基于串行通信的红外线智能家电控制系统

54、基于单片机的智能遥控器设计

56、基于单片机的公用电话网远程控制器的设计

57、基于单片机的多功能节能微波炉控制器设计

58、基于单片机的多功能数显表设计(气压、冲击频率)

59、基于单片机的仓库温湿度测量仪设计 60、基于单片机的自动加料系统 62、基于单片机的远程温度显示系统

63、基于89C51单片机的传感器水位测量系统 64、基于51单片机的广告灯设计 65、基于单片机的水箱水位控制系统设计 66、动态电子秤设计

67、基于单片机的非接触式热量测量系统设计 68、基于单片机的非接触式位移传感器设计 69、基于单片机的非接触式温度测试仪设计 70、基于单片机的工业电加热炉的微机控制系统设计 71、基于单片机的户用超声波热量表设计 72、基于单片机的火灾自动探测报警系统设计 73、基于单片机的住宅智能化险情报警系统设计 74、基于单片机的数字温度测量及显示系统设计 75、火灾自动报警系统设计

76、基于GSM短信模块的家庭防盗报警系统 77、基于GSM模块的车载防盗系统设计 78、基于单片机的16×16点阵(滚动显示)79、基于单片机的仓库温湿度的监测系统 80、基于单片机的点阵电子显示屏设计 81、基于单片机的电子密码锁设计 82、基于单片机的温度远程显示实现 83、基于单片机的直流电机控制系统 84、基于单片机的自动加料机控制系统 85、数控直流稳压电源设计

86、智能型充电器的电源和显示的设计 87、基于CPLD的出租车计价器设计 88、基于IC卡的楼宇门禁系统的设计 89、基于SPCE061A的语音遥控小车设计 90、基于单片机的短信收发系统设计

91、智能机器人的研究与设计(自动循轨和语音控制的实现)92、PC机与单片机的串口通信 93、基于单片机的红外线防盗报警系统 94、基于单片机的转速测量系统设计 95、基于单片机的电梯控制模型设计与仿真

学习参考资料:

1、谢维成 杨加国:《单片机原理与应用及C51程序设计》,清华大学出版社,2009年7月第2版

2、彭伟主编:《单片机C语言程序设计实训100例——基于8051+Proteus仿真》,电子工业出版社,2009年6月第1版

3、周兴华主编:《手把手教你学单片机C程序设计》,北京航空航天大学出版社,2007年10月 第1版

学习参考网站:

http://xxgcxy.qdbhu.edu.cn/jsjdlzzsx/index.html http://

执笔人:陈振军

编写日期:2013年3月5日 审核人:

2.单片机实训实验案例 篇二

当今微型计算机技术发展形成了两大分支, 一是以微处理器为核心所构成的通用微机系统;二是微控制器, 俗称单片机。单片机主要用于工业测控, 如家用电器、计算机外围设备、工业智能化仪表、机器人、生产过程的自动控制、农业、化工、军事、航空航天等领域。51系列8位单片机, 根据被控对象的要求, 以计算机技术为基础, 对其软、硬件切割、合成, 使软、硬件匹配后嵌入被控对象中, 以实现被控对象实时控制的需要。虽然近十年来也发展出16位和32位产品, 但在目前乃至今后相当长的时间内仍将以8位机为主。

二设计及制作目的

不少院校开设单片机课程, 51系列单片机面向中职、高职、大专、本科甚至研究生开设, 他们所用的实验实训设备大都技术不够先进, 注重演示、价格昂贵, 不利于普及。为此, 笔者结合自己多年从事单片机教学的工作经验, 经过反复研究、试验, 制作了积木式51系列单片机教学实验实训系统。

三系统的总体结构

1.电路原理图

2. 板上硬件资源

板上硬件包括: (1) 微控制器1套, 包括DIP40脚管座1个, 上插MCU芯片, 芯片下压晶振1个、起振瓷片电容2个; (2) 20脚管座, 上插活动数码管2个; (3) LED灯8个; (4) 1K电阻16个, 排阻2个; (5) 输入设备1套, 包括按键4个、4位拨码开关1个; (6) 滤波稳压电路1套, 包括3端稳压器7805一个、滤波电容4个、红色小LED灯1个、电阻1个; (7) 复位电路1套, 包括复位按键1个、电阻2个、二极管1个、电容1个, 采用电平复位, 复位时间大于30毫秒; (8) 跳线器32个, 用于选择板上或板外资源, 也可用于系统扩展。以上8个组成部分设置在一块电路板上, 构成完整良好的应用系统; (9) RS232电压转换板、51系列专用控制器、1个9针串口, 三者合成一个专用模块。该模块以积木的方式插在应用系统上并与个人机连接后构成仿真器、编程器。

四系统的软硬件制作方案

1. 设计及制作所要解决的技术问题

目前, 多数院校使用的单片机实验实训设备主要支持高级语言编程, 而该实验实训系统可支持汇编语言、C51高级语言、混编及实时多任务操作系统对照编程, 更能够适应市场编制软件的需要。

多数院校使用的单片机实验实训设备, 在硬件配置上注重演示, 使用者不能对其分解、合成, 难以培养学习者的动手能力与实际工作技能。该系统在现有同类产品的基础上进行了创新, 以实用为出发点, 针对学生的特点, 把教与学的重点放在现场控制上, 紧抓“通过口来实现控制”这一单片机核心内容, 辅之以微控器与负载之间有机结合 (对负载而言, 连接使用方便) ;负载之间在电气上严格独立, 使学生可以根据实际需要对该系统进行分解, 加入所需负载后, 重新合成, 以满足现场控制的需要, 进而培养操作人员的动手能力和实践技能。

多数院校使用的单片机实验实训设备多采购于大公司, 从应用角度看主要使用高级语言写作, 给出一个最终结果, 忽视数制在嵌入式控制中的核心地位, 无视汇编语言与特定硬件一一对应的动作匹配, 在教学环节上缺乏针对性。而该系统结合单片机应用特点及学习的一般规律, 面向学生将单片机的口全部开放, 且硬件以积木的方式自由组合, 将教材上的理论知识与现场应用相结合, 准确地控制现场硬件的任何一个动作。从技术应用角度看, 该系统实现了理实环节的统一, 并提供了一条学习和编程的捷径。

该实训系统易于继承用其他语言编制的软件, 减少了编程的工作量。

2. 设计及制作所采用的具体技术方案

该系统以Keil C51为工具软件, 设计思想上采用“层次化”“模块化”设计。 (1) 外围设备与整机控制系统, 通过32个跳线器完整隔离, 确保使用者自由选择板上资源或板外自挂资源; (2) 该系统专门制作了稳压模块, 不需要专用电源, 只要使用普通电源即可获得稳定的工作电压, 而且板上触及部位无危险电压, 确保人身安全; (3) 在该板上插入工作芯片, 即形成用户系统; (4) 在该板上或其他厂家的用户板上插入RS232/TTL转换板, 加上仿真芯片, 就可形成一台仿真器, 为学习嵌入式控制提供了极大的方便。该仿真器植入一段代码后, 可转变为一台PLC, 功能接近于专用PLC如西门子PLC等; (5) 在该板上或其他厂家的用户板上插入RS232/TTL转换板, 加上编程芯片, 就可形成一台编程器。该编程器模块还具有下载机、拷贝机、工作机三种实用功能; (6) 在该板上32个端口 (PORT) 通过跳线器全部引出, 学生可将自己设计的电路连入该板, 极大地减轻连线工作, 提高学生的应用效率; (7) 该系统上的资源大多为插拔式或可拆卸的, 学生可自设故障, 提高学生现场解决问题的能力; (8) 仅需配一个普通电源, 利用该系统上的键盘、数码管、微控制器, 系统可以独立运行; (9) 通过RS232通信接口, 在Keil C51支持下, 利用上位机丰富的软、硬件资源, 实现用户程序编辑、编译、调试、运行, 提高实验效率。

该系统紧紧围绕实验实训目的, 在使用汇编语言、C51高级语言、混编及实时多任务操作系统编程的基础上, 采用3+2形式 (用户板使用3次、电压转换板使用2次) 制作硬件, 体现了电路形式上的通用性 (仿真、编程必须在用户板上进行) , 突出了电路功能上的专用性, 贯穿了负逻辑控制的实用性。从应用角度看, 该系统克服了当今市场上相关产品的弱点, 集仿真、编程、应用于一体, 实现了现场编程、现场调试、现场完成的技术突破和创新。

五系统的特点及应用领域

该系统集实用性与先进性于一体, 应用领域较为广泛。它不仅可作为用户系统现场工作, 也可以作为仿真器进行程序编辑、编译、调试、运行, 还可以作为编程器使用, 该编程器同时具有下载机、工作机等实用功能。此外, 积木的方式突出了单片机用口实现控制的特点, 解决现有实验实训设备贪大求多、主次不明、价格昂贵、不利于普及等弊端。该系统既可满足单片机课程教学需要, 同时也为专业人员从事开发工作提供了稳定可靠的技术平台。

六系统的前景预测

3.单片机实训总结 篇三

为了锻炼自己的动手能力以及激发我的创新能力,我参加了此次的单片机实训活动,在实训过程中首先我们明确了实训的目的:

1、熟悉单片机应用系统的开发、研制过程;

2、能运用所有知识设计简单的单片机应用系统的软、硬件的设计;

3、掌握单片机应用系统的硬件、软件调试方法;

4、进一步掌握单片机在生活和学习当中的应用。

在实训的第一天我们指导老师孙老师向我们详细的讲解了整个实训的主要内容,让我们了解实训当中所学的内容与一些元器件和我们要试验的课题。在试验中主要有三个课题:

一、在学习板上练习一些简单元器件的焊接,并进一步对贴片式元器件的焊接;

二、在已开发好的开发板上对各元器件的焊接,并学会调试、运行,另外还学会编写一些简单的程序,掌握编程过程应注意的方法;

三、简单的学习Protle的使用,并利用Protle绘制一些简单的电路原理图,并利用原理图制作成PCB板,了解到怎样从设计好的硬件电路图而得到一个完好的印刷板。

以上是这次实训的主要内容,经过将近一个月的时间,我们认真的完成了实训过程中老师布置的实训内容及实训要求。虽然这次实训的时间不是很长,我们都完整的焊好了一个属于自己的实验板,在课后我们也对一些硬件学习。通过这次实训,我更进一步的掌握了单片机的深刻内容以及单片机在实际生活中应用,并锻炼了我的动手能力、思维能力以及软件方面的编程能力,让我学会了很多,同时通过此次实训也暴露出一些平时没有注意的问题,让我深刻反思。这些问题的发现将为我以后的学习和工作的道路有所帮助,并让我懂得了单片机在实际生活当中的最要应用。

实训人:09本科班李兵

4.单片机实训报告样本 篇四

实训题目:_ 专业:_ 班级:姓名:指导教师:

2实训目的:

掌握汇编语言程序设计和调试方法,熟悉键盘操作。掌握RAM中的数据操作。熟悉MCS-51指令系统,掌握程序设计方法。掌握简单的数值转换算法。基本了解数值的各种表达方法。掌握MCS-51串行口方式0工作方式及编程方法。掌握利用串行口扩展I/O通道的方法。熟悉数字温度传感器DS18B20的使用方法和工作原理,了解单总线的读/写控制方法。

实训任务(列出实训期间所有任务的名称):

第一章清零程序

第二章拆字程序

第三章拼字程序

第四章二进制到BCD转换

第五章串并转换实验

第六章数字温度的采集

实训准备(个人的知识准备、硬件与软件器材):

个人知识准备:熟悉实验箱的使用方法,懂得连线的基本操作,熟悉MCS-51单片机开发系统Keil软件操作,懂得编译、装载并运行程序。

硬件:实验箱、电脑

软件:MCS-51单片机开发系统Keil软件

实训要求:

1.2.3.4.5.对硬件设施、软件设施的维护 保持桌面清洁、整齐 保持教室干净 认真听讲,不迟到早退,不大声喧哗 做完实验后整理好实验箱,导线等不要乱放

实训内容(步骤及程序):

步骤:

1.了解实训任务

2.分析实训任务

3.打开MCS-51单片机开发系统软件,编写实训程序

4.打开实验箱,进行连线

5.运行程序

6.如果程序无法正常运行,对程序进行调试之后再运行

7.运行结果:点击单步执行,使程序每走一步查看运行结果

8.在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态,返回监控

程序(至少三个任务的程序):

任务一:清零程序

ORG 0640H

SE01:MOV R0,#00H

MOV DPTR,#2000H;(2000H)送DPTR

LOO1:MOVX @DPTR,A;0送(DPTR)

INC DPTR;DPTR+1

INC R0;字节数加1

CJNE R0,#00H,LOO1;不到FF个字节再清

SJMP $

END

任务二:拆字程序

ORG 0660H

SE02:MOV DPTR,#2000H

MOVX A,@DPTR

MOV B,A;(2000)→A→B

SWAP A;交换

ANL A,#0FH;屏敝高位

INC DPTR

MOVX @DPTR,A;送2001H

INC DPTR

MOV A,B

ANL A,#0FH;(2000)内容屏敝高位

MOVX @DPTR,A;送2002H

SJMP $

END

任务三:拼字程序

ORG 0680H

SE03:MOV DPTR,#2000H

MOVX A,@DPTR

ANL A,#0FH;(2000H)内容屏敝高位

SWAP A;交换

MOV B,A;保存

INC DPTR

MOVX A,@DPTR;(2001H)内容送A

ANL A,#0FH;屏敝高位

ORL A,B;或

INC DPTR

MOVX @DPTR,A;送2002H

SJMP $

END

实训结果(结果分析):

任务一结果分析:实训程序能够正常运行,可以实现。

任务二结果分析:实训程序能够正常运行,可以实现。

任务三结果分析:实训程序能够正常运行,可以实现。

实训总结:

通过一周的实训,我们很好的完成了单片机的实训,期间我学到了很多宝贵的知识和经验。在这次的单片机实训中,我们了解了单片机的用途,掌握了单片机的编译程序和装载并进行运行,在这段时间我学会了硬件和软件的基本操作,熟悉实验箱、电脑,了解运行结果及检查并进行实践操作。

首先,打开实验箱,在实验箱的后背有一根电源线插孔和一根数据线插孔,从实验箱中把电源线和数据线拿出来插在对应的插孔中。其次,打开电脑的电源,电脑打开后,在桌面上有一个MCS-51单片机开发系统keil软件,打开这个软件会出现一个页面,在页面的上方有一个实验指导,打开实验指导就可以看见硬件和软件等字样,在软件那一栏右边菜单点击相应的程序,选中那个程序,再打开实验指导和实验程序,对照着实验指导把导线插在实验箱相应的位置。最后,把实验程序调出来,在电脑上或者是在实验箱上进行装载并运行,也可以点击菜单中的“单步运行”,查看实验箱的结果,是否和实验指导上的一样或者是直接在菜单上按“自动单步”让程序不停的自动运行。

在这期间我深刻的认识到了理论知识和实践操作必须是相结合的,也是教学环节中相当重要的一个环节,只有这样才能提高自己的实际操作能力,并且可以从中培养自己的独立思考,勇于克服困难和团队的协作精神,这次的实训使我学到了很多知识,使我终身受用。

实训建议:

1.有很多电脑是坏的,用一会儿就死机,希望能将其修好

2.有个别实验箱是坏的,希望能修好的。

3.不能联网,希望能把网线联好

5.单片机实训心得体会 篇五

近两周的单片机实训结束了,最大的感受是,这是进入大学以来所学的最贴近实际的一门课,原来书本知识与实际操作之间竟然存在这样大的差距,让我不得为今后的工作捏了一把汗,决心更加深入的学习,让自己成为实用型的人。

在做喇叭自检时,我们认为的把程序复杂化了,在做键盘自检时我们和大多数同学一样,都没有把采样保持做好,虽然是第一个接受检查的,但我们还是按老师的要求重新完善了程序。

在做最后的任务时,我们组的任务是“乒乓球游戏机”,开始觉得很有趣,就是双方互打,但是经过和老师的商量和自己站在一个“消费者”的角度考虑后,发现我们的设想太简单了,于是,我们又给它加了“计算比分”、“接住球后加速”以及用不同的显示和声音来表示是否接住球,最后我们又发现这个游戏机没有复位功能,这能玩一次,但是我们用了几段程序都没有实现预想的效果,设计进入了瓶颈阶段,最后,我们在图书馆查找资料,并按我们的要求修改,终于实现了这个功能。

由于我们测试的次数太多,我也“练就”了很好的打游戏的技术,呵呵,真希望有机会把我们的设计变成产品,和更多人分享我们的乐趣。不过,我们现在的水平离这一目标还差的很远,我们要继续努力。

通过最后的测试,我发现我对知识的掌握有些不透彻,比如“硬件编程框图”,平时看过很多次但都没有用心记过,头脑中对他的记忆很模糊,因此,这就成了我们知识结构中的一个盲点,实训就是让我们在实际操作中发现自己对知识掌握不足的地方并把它补足,我会继续把这些模棱两可的这是都用心学透彻。

6.单片机数字钟实训报告 篇六

学院:电子工程学院

专业:机电一体化

班级: 姓名: 手机号:

一、任务及要求

用51单片机设计时、分、秒计时器,具体要求如下。

1、具有时、分、秒计时功能和8位数码管显示功能,显示格式为:“时-分-秒”;

2、用Proteus设计仿真电路进行结果仿真; 3、4人组成设计小组完成,小组成员有明确分工,1人负责总体方案设计及报告撰写,2人负责功能模块函数设计,1人负责仿真电路设计及调试。

4、完成程序设计、仿真电路设计、结果仿真。

5、本实验要求设计一个数字计时器,可以完成0分00秒~23小时59分59秒的计时功能,并在控制电路的作用下有开机清零。

6、指标要求: ①.显示时、分、秒。② 采用24小时制,小时计数器按“23翻00”规律计数。.③ 为了保证计时准确、稳定,由单片机的定时器来计时。

7、设计要求:

画出电路原理图(或仿真电路图);

元器件及参数选择; ③

电路仿真与调试; ④

连接实物图,并调试; ⑤

写出报告,并做总结;

二、设计方案

1、总体设计方案(李文负责完成)

(说明总体设计方案构思、程序模块构成、仿真电路构成等内容,不少于300字))。

构思:实现时钟的设计,如果采用软件延时的方法来实现时钟,太耗cpu了,因此采用51单片机的内部硬件资源来实现时钟,因此采用定时器来定时,由于单片机的最大定时的时间为65.536ms;但是我们要定时1s,为了方便,我们则选用定时器0工作方式1且定时50ms,然后在中断20次则有了1s,有了1s就好办了,分,时就好办了,只要在1秒的基础上加就可以实现时钟了,有了时,分,秒就要显示了,由于时,分,秒都是两位,因此要把个位与十位分离,然后在分别在数码管上显示,这样就实现时钟的设计。

程序模块:

1、主函数:(调用初始化函数,调用显示函数)

2、显示函数:(延时函数,数码管显示代码)

3、中断服务函数:(时,分,秒的实现)

仿真电路构成:数字钟的结构组成:

电1)晶体振荡器电路

2)复位电路

3)数码管使用非门驱动及数码管

具体:52单片机的最小系统(52单片机,晶振电路(12MHz晶振,和30pF的无极性容),复位电路(10k电阻,10uf极性电容,开关)),外加八位一体的数码管,数码管驱动电路;

2、显示模块程序流程图

3、中断服务函数模块程序流程图

4、主函数模块的设计

5、仿真电路图

三、程序代码:

/* 功能:用共阴的八位一体的数码管显示时间“小时-分钟-秒”

位码接P2口;段码接P0口;使用定时器0定时1s,*/ #include //头文件

#define uchar unsigned char //宏定义 #define uint unsigned int // uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴七段编码

uchar sec,min,hour,count;// 定义变量 void delay(uchar x)//延时1ms的函数

{

uchar z ,y;

for(y=x;y>0;y--)

for(z=124;z>0;z--);} void init(void)//初始化函数 {

TMOD=0X01;//定时器0工作在方式1

TH0=0X3C;//装初值

TL0=0XB0;

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器0

sec=0;//秒设初值

min=0;//分设初值

hour=0;//时设初值

count=0;//计数设初值

P0=0xff;//

P2=0xff;//

} void display()//显示函数

{

uchar sec1,sec2,min1,min2,hour1,hour2;//定义变量

sec1= sec/10;

//秒的十位

sec2= sec%10;

//秒的个位

min1= min/10;//分的十位

min2= min%10;//分的个位

hour1= hour/10;//时的十位

hour2= hour%10;//时的个位

P2= 0x80;

//秒个位的位码

P0= table[sec2];//秒个位的段码

delay(5);

P2= 0x40;

//秒十位的位码

P0= table[sec1];//秒十位的段码

delay(5);

P2= 0x20;

//“-”的位码

P0= 0x40;

//“-”的段码

delay(5);

P2= 0x10;

//分十位的位码

P0= table[min1];//分十位的段码

delay(5);

P2= 0x08;

//分个位的位码

P0= table[min2];//分个位的段码

delay(5);

P2= 0x04;

//“-”的位码

P0= 0x40;

//“-”的段码

delay(5);

P2= 0x02;

//时个位的位码

P0= table[hour2];//时个位的段码

delay(5);

P2= 0x01;

//时的十位的段码

P0= table[hour1];//时的十位的段码

delay(5);

} void main(){

init();

//初始化函数

while(1)

{

display();//时间显示函数

} } void time()interrupt 1 //中断服务函数 {

TH0=0X3C;

//重装初值

TL0=0XB0;

if(count==20)//定时一秒

{

count=0;

//计数清零

if(sec==59)

//秒计时到60秒

{

sec=0;

//秒清零

if(min==59)//分计时到60秒

{

min=0;//分清零

if(hour==23)//小时计数到24

{

hour=0;//小时清零

}

else hour++;//小时加一

}

else min++;

//分加一

}

else sec++;//秒加一

}

count++;

//计数加一 }

五、设计总结

单片机作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。在做的过程中能够发现很多的问题,只有自己亲身去做了就会遇到你在书上所没有的,并且你要一个又一个的解决,这个有点难,要找到自己的错误在哪里,这还真的难,有时候自己的错误自己很难的看出来,我就一个main写错了,我找了半天还没找问题在哪里,表面看是看不出的,因为我只是a与i对调了一下,害的我搞了半天才查出来,这个无形的,编译是不会出错,只是一个警告,但是下载单片机里就是不出现结果,改了之后就ok了,在写程序的时候大小写特别要注意的,还有程序的结构清楚明了,最后还是完成任务。

在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,在我们遇到问题时,我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题自己能解决了。发现、提出、分析、解决问题都会受益于我在以后的学习、工作和生活中。常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处。

7.实训案例二 篇七

开发商遗留问题业主归结到物业管理身上怎么办

南山某小区的物业管理公司是开发商的全资子公司,在承接物业进行管理中,开发商遗留下一系列的问题:开发商将小区的底层机房改造成为保安宿舍;没有预留足够的会所和物业管理办公面积等,出现了诸多的问题。业主将开发商的遗留问题归结到物业管理公司身上,以至于业主与管理公司的矛盾愈演愈烈,业主终于要解聘物业管理公司。

[提示]

运用法规,讲清遗留问题的原因,但要注意的是不要将责任完全推到开发商身上,以利于今后同开发商的沟通协调,因为物业管理公司业主和开发商间的“调停人”,要留余地。

8.招标采购实训案例 篇八

四、招标采购实训:

1、训练目的:了解招标采购的主要步骤,学习招标采购过程文件得制作;

2、训练区域:学校机房

3、训练用具:计算机、多媒体网络

4、训练背景材料:

某市污水治理一期工程,由地方政府投资,批准单位是国家发展改革委员会,文号为发改投字[2008]***号,项目业主为市建设投资有限公司,项目分为污水收集输送管网与泵站系统工程、污水集中处理厂与排放工程,项目服务面积1100km2,总投资概算为5.8 亿元人民币。该工程占地160 亩,总体设计规模是10 万立方米/天,处理工艺采用倒置A2/O 法。拟采用公开招标方式确定施工方。工程主体施工单位需具备国家要求符合污水处理厂建设的相关资质。投标截止日为2010年11月20 日上午9 时30 分,送达地点为**省**市**路**号政府机关服务中心**室。土建工程完成后,对各个主要设备进行招标。污水处理包括以下主要构筑物:

(1)粗格栅间及进水泵房,土建规模10 万立方米/天(2)细格栅间及曝气沉沙池,土建规模10 万立方米/天(3)生物反应池及污泥泵房,土建规模10 万立方米/天(4)沉淀池及沉淀池配水井,土建规模10 万立方米/天

(5)化学除磷池,土建规模10 万立方米/天,加药设备配置规模10 万立方米/天

(6)鼓风机房,土建规模10 万立方米/天,鼓风机设备配置规模10 万立方米/天

(7)污泥脱水机房及料仓,土建规模10 万立方米/天,浓缩脱水设备及料仓配置规模10 万 立方米/天

(8)自控、变配电间及设备

(9)辅助建筑(综合楼、机电修间、仓库、传达室等)(10)厂区安装工程及材料

(11)工艺、电器、自控、仪表、通讯、化验、机修、空调、运输、电热水器等设备

(12)全厂管路系统、道路、围墙、大门、照明、上下水、雨水系统、消防、绿化等。

5、实训要求和内容:

1、请按照题目的要求以及采购计划的编制规定和要求,设计采购计划表格,列出采购计划与采购预算的编制过程;

2、并编制采购计划、采购预算(可省略);

3、根据材料,完成招标采购的流程图;

4、根据背景材料,做一份招标公告;

5、根据背景材料,完成一份招标文件(具体的内容可以简单写,但是主要框架要写清楚)

6、评价标准:

9.单片机实验二实验报告 篇九

课程名称:微机原理与接口技术

指导老师:李素敏

学生姓名:

学号:

专业: 自动化

日期:2014-04-10 地点:理工楼603

实验二

1.实验目的和要求

① 掌握keil软件和STC-ISP 软件的使用方法 ② 熟悉发光管的工作原理 ③ 通过编程体验发光管的延时闪烁及移位等功能

2.主要仪器设备

PC机

单片机学习开发套件(型号:89C52RC)

3.实验内容

①实验内容1:第一个发光管以间隔200ms闪烁

源程序:

#include #define uint unsigned int

//宏定义

main(){

while(1){ P1=0xfe;delay(200);P1=0xff;delay(200);} } void delay(uint z)//延时函数,z的取值为这个函数的延时ms数 {

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);

一台一件

}

实验结果说明:要使发光管闪烁,只需设置合适的时间延时即可。

②实验内容2 : 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

源程序:

#include

#include //后面要用到它里面的_crol_(k,l)函数 //这个函数的意思是把一个字符变量k 循环左移l 位 #define uint unsigned int

//宏定义

unsigned char a,b,k,j;

//定义五个字符变量 sbit beep=P2^3;// 定义蜂鸣器的接口

void delay(uint z)//延时函数,z的取值为这个函数的延时ms数 {

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);}

void main(){

k=0xfe;//先给k一个初值11111110等待移位 while(1){

delay500ms();

beep=0;//打开蜂鸣器

delay500ms();//让它响500ms

beep=1;//关闭蜂鸣器

j=_crol_(k,1);//把k循环左移一位

k=j;//把移完的值再送给k

P1=j;//同时把值送到P1口点亮发光二极管 } //再次循环 }

实验结果说明:在此程序中用到了_crol_(k,l)函数,此函数的功能在于循环移位,在每次发光管闪烁相应时间后左移一位,把移完的值再送到P口,点亮对应的发光管。这样循环往复,达到发光管流动的效果。

③实验内容3 :用8个发光管演示出8位二进制数累加过程,即用8个二极管表示8个二进制位(亮为1,灭为0),依次以二进制形式显示0,1,2,……255。

源程序: #include

#include //包含有左右循环移位子函数的库 #define uint unsigned int

//宏定义 #define uchar unsigned char //宏定义

void delay(uint z)//延时函数,z的取值为这个函数的延时ms数,{

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);} void main()

//主函数 {

} uchar a;while(1)

//大循环 {

} a++;P1=~a;delay(200);

实验结果说明:在此定义一个无符号字符变量a,a的值进行累加,但是由于表示的二进制数要求亮为1,灭为0,与发光管的0亮1灭正好相反,所以将a的计数取反并设置相应延时,重复此过程就得到了在发光管上显示八位二进制数的累加过程。

④实验内容4 :间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

源程序:

#include //52单片机头文件

#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义

void delay(uint z)//延时函数,z的取值为这个函数的延时ms数 {

uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);} void main()//主函数 { uchar a,i,j;while(1)//大循环

} {

} a=0xfe;//赋初值

for(j=0;j<8;j++){ for(i=0;i<8-j;i++)//左移

} {

P1=a;//点亮小灯

delay(300);//延时300毫秒

a=_crol_(a,1);//将a变量循环左移一位

} a=_crol_(a,j);//补齐,方便下面的左移一位 P1=0xff;//全部关闭

a=a<<1;//左移一位让多一个灯点亮

4.心得体会:此次实验中练习较多的就是闪烁和移位,在编程过程中,设置闪烁的时间必须达到人眼正常观察的要求,这就需要计算合适的闪烁时间,不停的尝试,最终选择适宜观察的时间间隔。发光管的循环移位时调用_crol_(k,l)函数

10.电子商务案例实训个人小结 篇十

总结内容应包括:

本学期本班以小组的方式进行案例分析,每个小组选取一家电商企业,在此次案例分析中,你主要做了什么,你有什么收获? 如果让你去应聘该企业,你最想应聘什么岗位,为什么?你对该企业有什么建议? 我们第一组是做百度公司的,我是第一组的组长,我主要在任务是分配小组任务和资料搜集PPT演讲等,我的主要收获是对任务进程的控制上得到一定程度的加强,与组员之间的沟通方面得到提高最后对负责一个任务有一定的思路,我如果是去百度应聘的话,我想我应该是应聘“百度IT实习生”因为在这个岗位上我相信自己一定会有所收获的,只有自己得到一定的锻炼后,才能向干更高的山峰前进!招聘要求如下图

11.单片机万年历实训报告 篇十一

部:电气自动化系

级:13电信2班

名:周祝福

指导老师:黄丽英、侯聪玲

实训时间:2015年1月19日~23日

用AT89C51与LCD1602设计 的可调式电子日历时钟

一、总体设计

1.1、设计目的

为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与AT89C51 设计可调式电子日历时钟。

1.2、设计要求

(1)显示:年、月、日、时、分、秒和星期;

(2)设置年、月、日、时、分、秒和星期的初始状态;

(3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期 ;

完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。控制程序的编写等。

1.3、系统基本方案选择和论证

1.3.1、单片机芯片的选择方案

方案一:

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。方案二:

采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。但造价较高。1.3.2、显示模块选择方案和论证:

方案一:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。所以不用此种作为显示。方案二:

采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。所以也不用此种作为显示。方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。LCD1602可实现显示2行十六个字符。1.3.4、电路设计最终方案决定

综上各方案所述,对此次作品的方案选定:采用80C51作为主控制系统; LCD1602液晶带汉字库显示屏作为显示部分。

二、硬件设计

2.1、电路设计模块图如图

AT89C51 块按键控制模LCD162

2.3、用proteus仿真软件仿真并抓图。

三、软件设计

3.1、画出各个函数流程图。

3.1.1、LCD1602液晶显示控制流程图如图

入口 对1602初始化写入显示设置命令 延时一段时间 检查忙标志 BF= 7>? 设置字符显示位置 延时一段时间 向1602中写入数据 LCD显示内容 返回主程序

是 3.1.2、调时函数控制流程如图

开始 控制键有效,调整年 控制键有效,调整月 等待按键程序 等待按键程序 加有效 减有效 加有效 减有效 年加 1 年减 1 月加 1 月减 1 控制键有效,调整日 控制键有效,调整星期 等待按键程序 等待按键程序 加有效 减有效 加有效 减有效 日加 1 日减 1 星期加 1 星期减 1 控制键有效,调整时 等待按键程序 加有效 时加 1 减有效 时减 1 控制键有效,调整分 等待按键程序 加有效 分加 1 减有效 分减 1 按键有效跳出调时程序,进入主循环

实训心得:通过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥补了在课堂上学习的不足。相信这对我们以后的学习和工作都会有很大的帮助。我们一定要在最短的时间里对这些不足加以改正!在试训中有苦有甜,当我们为一个很难攻破的程序找出路时,心情烦躁,感觉自己很不可理喻,当程序一点一点编好后,自己从心底感觉到一点小小的安慰,看着自己的成果。感觉很欣慰。总而言之,单片机课程设计对于我们有很大的帮助,我们从中受益匪浅。

程序代码。

#include #define uchar unsigned char #define uint unsigned int

uchar a,count,S1num,xqnum;uchar yue,ri,shi,fen,miao;uint nian;

sbit lcdrs=P2^5;sbit lcdrw=P2^4;sbit lcden=P2^3;

sbit S1=P3^0;

//定义键--进入设置 sbit S2=P3^1;

//定义键--增大 sbit S3=P3^2;

//定义键--减小 sbit S4=P3^3;

//定义键--退出设置

uchar code table0[]=“2015-01-11 SUN”;uchar code table1[]=“00:00:00”;uchar code xingqi[][3]={“MON”,“TUE”,“WED”,“THU”,“FRI”,“SAT”,“SUN”};

void delay(uint z){ uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);}

/************************************************** 1602液晶显示器模块

*************************************************/ void write_com(uchar com)

//液晶写指令 { lcdrw=0;lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}

void write_data(uchar dat)

//液晶写数据 { lcdrw=0;lcdrs=1;P0=dat;delay(5);lcden=1;delay(5);lcden=0;}

/******************************************** 年月日写入1602函数

********************************************/ void write_sfm(uchar add,uchar dat)

//写时分秒函数 { uchar shi,ge;shi=dat/10;ge=dat%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);} void write_yr(uchar add,uchar dat)

//写月日函数 { uchar shi,ge;shi=dat/10;ge=dat%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);} void write_nian(uchar add,uint dat)

//写年函数 { uint qian,bai,shi,ge;qian=dat/1000;bai=dat%1000/100;shi=dat%100/10;ge=dat%10;write_com(0x80+add);write_data(0x30+qian);write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);} /*************************************************** 1602初始化

***************************************************/ void init_lcd()

//液晶初始化 { lcden=0;

nian=2015;yue=1;ri=11;shi=0;

//初始shi、fen、miao fen=0;miao=0;

write_com(0x38);

//设置16x2显示,5x7点阵,8位数据口

write_com(0x0c);

//设置开显示,不显示光标

write_com(0x06);

//写一个字符后地址指针加1 write_com(0x01);

//显示清0,数据指针清0 }

void init()

//初始化函数 { init_lcd();

//液晶初始化

write_com(0x80);

//设置显示初始坐标

for(a=0;a<14;a++)

//显示年月日初始值

{

write_data(table0[a]);

delay(5);} write_com(0x80+0x40);

//设置显示初始坐标

for(a=0;a<8;a++)

//显示时分秒初始值

{

write_data(table1[a]);

delay(5);}

write_nian(0,nian);write_sfm(6,miao);

//分别将shi、fen、miao送去液晶显示

write_sfm(3,fen);write_sfm(0,shi);

count=0;xqnum=0;S1num=0;

//初始化全局变量count

TMOD=0x01;

//设置定时器0工作模式1 TH0=(65535-50000)/256;

//定时器装初始值

TL0=(65535-50000)%256;EA=1;

//开总中断

ET0=1;

//开定时器0中断

TR0=1;

//启动定时器0 }

/************************************************** 独立键盘

*************************************************/ void keyscan(){ if(S1==0){

delay(5);

//确认定义键被按下

if(S1==0)

{

S1num++;

//定义键S1按下次数记录

while(!S1);

//释放按键确认

if(S1num==1)//S1按下一次时

{

TR0=0;

//关闭定时器

write_com(0xc0+7);//光标定位到秒位置

write_com(0x0f);//光标闪烁

}

if(S1num==2)

//S1按下两次时

{

write_com(0xc0+4);//光标定位到分位置

}

if(S1num==3)

//S1按下三次时

{

write_com(0xc0+1);

//光标定位到时位置

}

if(S1num==4)

//S1按下四次时

{

write_com(0x80+13);

//光标定位到星期位置

}

if(S1num==5)

//S1按下五次时

{

write_com(0x80+9);

//光标定位到日位置

}

if(S1num==6)

//S1按下六次时

{

write_com(0x80+6);

//光标定位到月位置

}

if(S1num==7)

//S1按下七次时

{

write_com(0x80+3);

//光标定位到年位置

}

if(S1num==8)

//S1按下八次时

{

S1num=0;

//S1记录按键次数清零

TR0=1;

//开启定时器

write_com(0x0c);

//取消光标闪烁

} } } if(S1num!=0)

//只有定义键按下后S2、S3、S4才有效 { if(S2==0){

delay(5);

//防抖

if(S2==0)

//确认按键被按下

{

while(!S2);

//释放按键确认

if(S1num==1)//S1按下一次时

{

miao++;

//调整秒加1

if(miao==60)//满60清零

miao=0;

write_sfm(6,miao);

//每调节一次送液晶显示一次

write_com(0x80+0x40+6);

//显示位置重新回到调节处

}

if(S1num==2)

//S1按下两次时

{

fen++;

//调整分加1 if(fen==60)

fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);} if(S1num==3)

//S1按下三次时 { shi++;

//调整时加1 if(shi==24)

shi=0;write_com(0x80+0x40);write_sfm(0,shi);} if(S1num==4)

{ xqnum++;if(xqnum==7)

xqnum=0;write_com(0x80+0x0b);for(a=0;a<3;a++){

write_data(xingqi[xqnum][a]);

delay(5);} } if(S1num==5)

{ ri++;if(yue==2){

if(nian%400==0)

{

if(ri==30)

{

ri=1;

}

}

if(nian%400!=0)

{

if(ri==29)

{

ri=1;

}

//星期加调整

//日加调整

} } else if(yue<=7){

if(yue%2==0&yue!=2)

{

if(ri==31)

{

ri=1;

}

}

else if(yue%2!=0&yue!=2)

{

if(ri==32)

{

ri=1;

}

} } else if(yue>=8){

if(yue%2==0)

{

if(ri==32)

{

ri=1;

}

}

else if(yue%2!=0)

{

if(ri==31)

{

ri=1;

}

} } write_yr(8,ri);} if(S1num==6)

{ yue++;if(yue==13)

yue=1;write_yr(5,yue);

//月加调整

}

if(S1num==7)

//年加调整

{

nian++;

if(nian==2019)

nian=2014;

write_nian(0,nian);

} } } if(S3==0){ delay(5);if(S3==0)

//确认按键被按下

{

while(!S3);

if(S1num==1)

{

miao--;

//调整秒减1

if(miao==-1)

//减到00后再减重新设置为59

miao=59;

write_sfm(6,miao);

write_com(0x80+0x40+6);

}

if(S1num==2)

{

fen--;

//调整分减1

if(fen==-1)

fen=59;

write_sfm(3,fen);

write_com(0x80+0x40+3);

}

if(S1num==3)

{

shi--;

//调整时减1

if(shi==-1)

shi=23;

write_sfm(0,shi);

write_com(0x80+0x40);

}

if(S1num==4)

{

xqnum--;

//调整星期减一

if(xqnum==-1)

xqnum=6;write_com(0x80+0x0b);for(a=0;a<3;a++){

write_data(xingqi[xqnum][a]);

delay(5);} } if(S1num==5)

//调整日 { ri--;

if(yue==2){

if(nian%400==0)

{

if(ri==0)

{

ri=29;

}

}

if(nian%400!=0)

{

if(ri==0)

{

ri=28;

}

} } else if(yue<=7)

{

if(yue%2==0&yue!=2)

{

if(ri==0)

{

ri=30;

}

}

else if(yue%2!=0&yue!=2)

{

if(ri==0)

{

ri=31;

}

}

}

else if(yue>=8)

{

if(yue%2==0)

{

if(ri==0)

{

ri=31;

}

}

else if(yue%2!=0)

{

if(ri==0)

{

ri=30;

}

}

}

write_yr(8,ri);

}

if(S1num==6)

{

yue--;

if(yue==0)

yue=12;

write_yr(5,yue);

}

if(S1num==7)

{

nian--;

if(nian==2013)

nian=2018;

write_nian(0,nian);

} } } if(S4==0)

{ delay(5);if(S4==0){

S1num=0;

TR0=1;

write_com(0x0c);

//调整月

//调整年

//退出设置、开启中断

}

} } }

/************************************************** 定时器0 *************************************************/ void timer0()interrupt 1

//定时器0中断服务程序 { TH0=(65535-50000)/256;

//重装定时器初始值

TL0=(65535-50000)%256;count++;

//中断次数累加

if(count==20)

//20次50毫秒即一秒

{

count=0;

miao++;

if(miao==60)

//秒加到60时分进位

{

miao=0;

fen++;

if(fen==60)

//分加到60时时进位

{

fen=0;

shi++;

if(shi==24)

//时加到24时清0

{

shi=0;

xqnum++;

ri++;

if(yue==2)

//如果是二月

{

if(nian%400==0)

//闰年判断

{

if(ri==30)

{

ri=1;

yue++;

write_yr(5,yue);

}

}

if(nian%400!=0)

//平年判断

{

if(ri==29)

{

ri=1;

yue++;

write_yr(5,yue);

}

}

}

else if(yue<=7&yue!=2)

//一月到七月

{

if(yue%2==0)//偶数月(除二月)

{

if(ri==31)

{

ri=1;

yue++;

}

}

else if(yue%2!=0)

//奇数月

{

if(ri==32)

{

ri=1;

yue++;

}

}

write_yr(5,yue);

}

else if(yue>=8)

//八月到12月

{

if(yue%2==0)//偶数月(除二月)

{

if(ri==32)

{

ri=1;

yue++;

if(yue==13)

//如果判断月份为12月,则加一后重新定义月份为1

{

yue=1;

nian++;

write_nian(0,nian);

}

write_yr(5,yue);

}

}

else if(yue%2!=0)

//奇数月

{

if(ri==31)

{

ri=1;

yue++;

write_yr(5,yue);

}

}

}

write_yr(8,ri);

if(xqnum==7)

//星期写入

xqnum=0;

write_com(0x80+0x0b);

for(a=0;a<3;a++)

{

write_data(xingqi[xqnum][a]);

delay(5);

}

}

write_sfm(0,shi);

//重新写入数据

}

write_sfm(3,fen);

//重新写入数据

}

write_sfm(6,miao);

//重新写入数据

} } /************************************************* 主函数

*************************************************/ void main(){ init();while(1){

keyscan();

//不停的检测按键是否被按下

上一篇:农业电子商务发展前景较大下一篇:2018工商银行春季校园招聘考试教材_用书