单片机数据显示延时实训报告
单片机实训报告通用总结

一、前言单片机作为现代电子设备的核心控制单元,具有体积小、功能强、功耗低等特点。
通过单片机实训,可以让我们更好地掌握单片机的原理、编程和应用。
本文将对单片机实训的过程、收获和心得进行总结。
一、实训过程1. 实训内容本次单片机实训主要包括以下内容:(1)单片机原理及基本结构(2)单片机编程语言C语言(3)单片机外围电路设计(4)单片机应用系统开发2. 实训步骤(1)学习单片机原理及基本结构,了解其工作原理和特点。
(2)学习单片机编程语言C语言,掌握基本语法和编程技巧。
(3)学习单片机外围电路设计,了解常用元器件的功能和作用。
(4)结合所学知识,设计并实现一个简单的单片机应用系统。
二、实训收获1. 理论知识方面(1)掌握了单片机的基本原理和结构,了解了其工作过程。
(2)学会了C语言编程,掌握了单片机编程的基本方法和技巧。
(3)了解了单片机外围电路的设计方法和常用元器件的应用。
2. 实践能力方面(1)提高了动手能力,学会了单片机的组装和调试。
(2)培养了团队协作精神,学会了与他人共同完成项目。
(3)锻炼了问题解决能力,学会了在遇到困难时寻求帮助和解决方案。
三、实训心得1. 学以致用,理论与实践相结合在实训过程中,我们不仅要学习理论知识,还要将其应用到实际项目中。
通过实践,我们才能真正掌握单片机的原理和应用。
2. 注重细节,严谨求实在单片机设计和调试过程中,细节至关重要。
一个微小的错误可能导致整个项目失败。
因此,我们要严谨求实,注重每一个细节。
3. 团队合作,共同进步单片机实训是一个团队项目,需要大家共同协作。
在实训过程中,我们要学会与他人沟通、交流,共同解决问题,实现共同进步。
4. 持续学习,不断进步单片机技术发展迅速,我们要保持学习的热情,不断更新知识,提高自己的技能水平。
四、总结通过本次单片机实训,我们不仅掌握了单片机的原理和应用,还提高了自己的实践能力和团队协作精神。
在今后的学习和工作中,我们将继续努力,不断进步,为我国电子产业的发展贡献自己的力量。
单片机综合应用实训报告

一、实训背景与目的随着科技的不断发展,单片机作为嵌入式系统中的核心部件,其在各个领域的应用日益广泛。
为了提高学生的实践能力,培养其动手操作和问题解决能力,本次实训以单片机为平台,通过综合应用实训,使学生深入了解单片机的工作原理,掌握单片机的编程技巧,并能将其应用于实际项目中。
二、实训内容与步骤本次实训内容主要包括以下几个方面:1. 单片机基础原理- 了解单片机的结构、工作原理及常用接口。
- 学习51单片机的指令系统、寄存器及中断系统。
2. 单片机编程- 掌握Keil uVision软件的使用,进行C51语言编程。
- 学习编写简单的单片机程序,如LED流水灯、按键控制等。
3. 单片机硬件电路- 学习绘制电路原理图,了解电路元器件的选用和焊接工艺。
- 实践搭建单片机最小系统,并进行调试。
4. 单片机综合应用- 设计并实现一个基于单片机的交通灯控制系统。
- 设计并实现一个基于单片机的数字时钟显示系统。
三、实训过程与结果1. 单片机基础原理学习- 通过阅读教材、查阅资料,了解单片机的基本知识。
- 在实验室进行实验,验证单片机的基本功能。
2. 单片机编程实践- 使用Keil uVision软件,编写LED流水灯程序,实现LED灯的闪烁效果。
- 编写按键控制程序,实现按键的读取和响应。
3. 单片机硬件电路搭建- 使用Protel软件绘制电路原理图,确定元器件型号和数量。
- 搭建单片机最小系统,包括电源电路、晶振电路、复位电路等。
- 使用焊接工具进行元器件焊接,并进行调试。
4. 单片机综合应用实现- 设计并实现交通灯控制系统,实现红黄绿灯的定时切换和倒计时功能。
- 设计并实现数字时钟显示系统,实现时分秒的显示和调整。
四、实训总结与收获通过本次实训,我收获颇丰:1. 加深了对单片机原理的理解- 通过理论学习、实验操作和项目实践,我对单片机的结构、工作原理和编程方法有了更深入的了解。
2. 提高了编程能力- 通过编写LED流水灯、按键控制等程序,我掌握了C51语言编程技巧,提高了编程能力。
关于单片机实训报告万能【六篇】

关于单片机实训报告万能【六篇】【篇1】单片机实训报告万能通过今次单片机实训,使我对单片机的认识有了更深刻的理解。
系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。
例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。
当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。
这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。
这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。
希望这次的经历能让我在以后学习中激励我继续进步。
【篇2】单片机实训报告万能通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。
了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。
LED显示器:LED显示器是由发光二管组成显示字段的器件。
通常的8段LED显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。
有段选码和和位选码。
当LED显示器每段的平均电流位5MA时,就有较满意的亮度,一般选择断码5-10MA 电流;位线的电流应选择40-80MA。
LED显示器的显示方式有动态和静态两种。
7289A芯片是具有SPI串行接口功能的显示键盘控制芯片,它可同时取得8位共阴极数码管和64个键的键盘矩阵。
单片机实训实验报告总结

一、实验背景与目的随着科技的不断发展,单片机作为一种微小的计算机系统,在工业控制、智能家居、汽车电子等领域得到了广泛的应用。
为了提高学生的实践能力和创新意识,本实训课程旨在通过实际操作,让学生掌握单片机的原理、编程和调试方法,培养学生的动手能力和团队协作精神。
本次实训以51单片机为核心,结合数码管、LED灯、按键等外围电路,设计了多个实验项目,包括LED流水灯、交通灯控制系统、简易计算器、温湿度监控系统等。
通过这些实验,使学生深入了解单片机的硬件结构和软件编程,提高学生的实际操作能力和问题解决能力。
二、实验内容与过程1. 实验一:LED流水灯(1)实验目的:掌握51单片机的I/O口编程,实现LED灯的流水效果。
(2)实验步骤:① 硬件连接:将LED灯连接到P1口;② 编写程序:使用循环语句和延时函数控制LED灯的流水效果;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察LED灯的流水效果。
2. 实验二:交通灯控制系统(1)实验目的:学习单片机在交通灯控制系统中的应用,实现红黄绿灯的变换及倒计时功能。
(2)实验步骤:① 硬件连接:将LED灯连接到P1口,按键连接到外部中断INT0;② 编写程序:设置定时器中断,实现倒计时功能;编写外部中断程序,实现红黄绿灯的变换;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察交通灯的工作状态和倒计时效果。
3. 实验三:简易计算器(1)实验目的:掌握矩阵键盘扫描原理、LCD1602显示屏控制,实现基本的四则运算。
(2)实验步骤:① 硬件连接:将矩阵键盘和LCD1602显示屏连接到单片机;② 编写程序:实现矩阵键盘扫描、LCD1602显示控制和运算逻辑处理;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察计算器的工作状态和运算结果。
4. 实验四:温湿度监控系统(1)实验目的:学习单片机在温湿度监控系统中的应用,实现温度和湿度的实时显示。
(2)实验步骤:① 硬件连接:将温度传感器和湿度传感器连接到单片机,将LED灯连接到P1口;② 编写程序:实现温度和湿度的实时采集,并根据采集到的数据控制LED灯的亮灭;③ 程序下载:将程序烧录到单片机中;④ 实验验证:观察LED灯的亮灭状态和数码管上的温度、湿度值。
单片机时钟显示实训报告

一、实训背景随着科技的不断发展,单片机技术得到了广泛应用。
单片机具有体积小、成本低、功能强大等特点,因此在电子设备中得到了广泛的应用。
本实训旨在通过设计一个基于单片机的时钟显示系统,让学生了解单片机的原理、编程方法和接口电路设计,提高学生的实践能力和创新意识。
二、实训目的1. 掌握单片机的原理和编程方法;2. 熟悉单片机的接口电路设计;3. 学会使用LCD液晶显示器和按键进行人机交互;4. 提高学生的实践能力和创新意识。
三、实训内容1. 硬件设计(1)硬件组成:本实训采用AT89C51单片机作为核心控制单元,使用LCD1602液晶显示器进行时间显示,并使用DS1302实时时钟芯片提供准确的时间。
(2)电路设计:① AT89C51单片机电路:包括电源电路、晶振电路、复位电路等;② DS1302实时时钟芯片电路:包括电源电路、时钟晶振电路、数据通信电路等;③ LCD1602液晶显示器电路:包括电源电路、数据通信电路等;④ 键盘电路:包括按键输入电路和单片机接口电路。
2. 软件设计(1)软件组成:本实训的软件设计包括主程序、按键扫描程序、时间显示程序和DS1302时钟读取程序。
(2)程序设计:① 主程序:负责系统初始化、按键扫描、时间显示和DS1302时钟读取等功能;② 按键扫描程序:负责检测按键是否被按下,并根据按键输入进行相应操作;③ 时间显示程序:负责将DS1302实时时钟芯片读取的时间显示在LCD1602液晶显示器上;④ DS1302时钟读取程序:负责从DS1302实时时钟芯片读取当前时间。
3. 系统调试(1)硬件调试:连接好硬件电路,检查各个模块的连接是否正确,并进行必要的调试;(2)软件调试:使用Proteus软件进行仿真调试,确保程序能够正常运行。
四、实训过程1. 硬件制作(1)根据电路原理图,焊接好各个模块的电路板;(2)将各个模块连接到单片机上,并检查连接是否正确。
2. 软件编写(1)使用Keil C51软件编写程序;(2)将编写好的程序烧录到单片机中。
单片机实训报告【三篇】

【导语】实训报告是展⽰⾃⾝实训收获成长的重要报告。
以下是⽆忧考整理的单⽚机实训报告,欢迎阅读!更多相关⽂章请关注⽆忧考报告频道!单⽚机实训报告篇⼀ 通过为期⼀周的单⽚机实训,是我们对这门课有了许多新的了解,弥补了在课堂上学习的不⾜。
相信这对我们以后的学习和⼯作都会有很⼤的帮助。
我们⼀定要在最短的时间⾥对这些不⾜加以改正! ⾸先,在这次试训中我被单⽚机强⼤的功能所震撼,以前在课堂上完全没有能理解可编程单⽚机的优越性。
这次通过实体仿真软件等辅助软件的共同效果,是这次试训有了鲜明的活⼒。
换是我们认识到这次试训不仅仅是⼀个软件的应⽤,更多的是使我们认识到学习到很多在课堂上⽆法得到的东西。
特别是protues软件的功能是我们了解了当今开发系统的新⽅向,简直太不可思议啦! 单⽚机作为⼀种最简单的软件,与我们的⽇常⽣活息息相关,了解⼀些单⽚机程序的简单录⼊是⾮常必要的。
如:LED显⽰器、键盘和显⽰器的应⽤和原理。
在被刺实训中我们每个⼈通过⼀个⼋位流⽔灯的制作,使我们深深地体会到了单⽚机在现实⽣活中的⼩⼩应⽤,既增强了我们的好奇⼼,⼜巩固了我们的理论知识。
更让我们体会到了单⽚机⼿动的开始平台的完善与成熟。
只要你有想法,单⽚机就有可能让他成为现实。
这⾥我学习完protues软件后的第⼀感觉是,虽然这软件⼯作不稳定,但是会有相当不错的效果出来。
这对我以后的⼯作⼀定会有帮助的。
在这次试训中不仅只对单⽚机编程有了新的认识,还对整个单⽚机的开发平台都有了⼀厅的了解,这是⼀笔不错的收获。
通过这⼏天的试训,使我的感触很深,真实“条条⼤路通罗马”,要达到⽬的,不同的⼈就有不同的⽅法。
只要你的⽅法不错!五花⼋门都可以,⽽且是各有特⾊。
⾛出来的结果都有各⾃的独到之处。
在编程中“简”字贯穿于整个程序设计中,越简单越好,毕竟单⽚机留给⽤户的资源是有限的,所以我们要充分利⽤这些资源,达到更好的效果,这些是我们在以后的学习⽣活中应值得注意的地⽅。
单片机课程实验报告-延时子程序

单片机实验报告实验报告单片机实验报告一、实验目的:学习P1口的使用方法,学习延时子程序的编写二、实验要求:以P1口作为输出口,控制6个发光二极管,模拟交通信号灯的管理。
在实验仪上选择两组红、黄、绿指示灯,代表交通信号灯。
设有一个十字路口为东西南北方向,其中东西方向为支路,南北方向为主路。
初始状态为4个路口的红灯全亮。
之后,南北路口的绿灯亮,东西路口的红灯亮。
南北路口方向通车,延时20秒后,南北路口绿灯熄灭,黄灯开始闪烁,闪烁5次后红灯亮。
而同时东西方向路口的绿灯亮,东西方向开始通车,延时10秒后,东西路口的绿灯熄灭,而黄灯开始闪烁。
闪烁5次后,在切换到南北路口的绿灯亮,东西路口的红灯亮。
之后重复上述过程。
三、实验电路:四、程序框图:五、程序清单:ORG 4000H ;定义程序存放区域的起始地址START: CLR P1.0 ;红灯亮LOOP: SETB P1.1SETB P1.2CLR P1.5SETB P1.6SETB P1.7ACALL DELAYSSETB P1.0 ;南北绿灯亮,东西红灯亮CLR P1.2ACALL DELAYL2 ;长延时20sMOV R3,#5 ;南北黄灯闪烁5次,东西红灯亮YELLOW1: ;南北黄灯亮,东西红灯亮CLR P1.1SETB P1.2ACALL DELAYS ;短延时;南北黄灯灭,东西红灯亮SETB P1.1ACALL DELAYS ;短延时DJNZ R3,YELLOW1;南北红灯亮,东西绿灯亮CLR P1.0SETB P1.5CLR P1.7ACALL DELAYL1 ;长延时10sMOV R3,#5 ;南北红灯亮,东西黄灯闪烁五次YELLOW2:CLR P1.6 ;东西黄灯亮SETB P1.7ACALL DELAYS ;短延时SETB P1.6 ;南北红灯灭,东西黄灯亮ACALL DELAYS ;短延时DJNZ R3,YELLOW2AJMP LOOP ;循环DELAYL2:MOV R4,#200 ;长延迟20sDELAY1: MOV R5,#200DELAY2: MOV R6,#250DELAY3: DJNZ R6,DELAY3DJNZ R5,DELAY2DJNZ R4,DELAY1RETDELAYS: MOV R4,#10 ;短延迟1sDELAY4: MOV R5,#200DELAY5: MOV R6,#250DELAY6: DJNZ R6,DELAY6DJNZ R5,DELAY5DJNZ R4,DELAY4RETDELAYL1:MOV R4,#100 ;长延迟10sDELAY7: MOV R5,#200DELAY8: MOV R6,#250DELAY9: DJNZ R6,DELAY9DJNZ R5,DELAY8DJNZ R4,DELAY7六、LST文件A51 MACRO ASSEMBLER LED04/21/2010 16:50:30 PAGE 1MACRO ASSEMBLER A51 V7.01OBJECT MODULE PLACED IN LED.OBJASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE LED.asm SET(SMALL) DEBUGEPLOC OBJ LINE SOURCE0000 1 ORG 0000H230000 7590DE 4 START: MOV P1,#11011110B0003 1155 5 CALL DALY1 ;0.5S0005 7590DB 6 MOV P1,#11011011B0008 1133 7 CALL DALY ;20S000A 7805 8 MOV R0,#5H000C 74DD 9 LOOP1: MOV A,#11011101B000E F590 10 MOV P1,A0010 1155 11 CALL DALY1 ;0.-5S0012 74DF 12 MOV A,#11011111B0014 F590 13 MOV P1,A0016 1155 14 CALL DALY10018 D8F2 15 DJNZ R0,LOOP1001A 747E 16 MOV A,#01111110B001C F590 17 MOV P1,A001E 1144 18 CALL DALY2 ;10S 0020 7805 19 MOV R0,#5H0022 74BE 20 LOOP2: MOV A,#10111110B0024 F590 21 MOV P1,A0026 1155 22 CALL DALY10028 74FE 23 MOV A,#11111110B002A F590 24 MOV P1,A002C 1155 25 CALL DALY1002E D8F2 26 DJNZ R0,LOOP20030 020000 27 LJMP START2829 ;20S0033 7C64 30 DALY:MOV R4,#1000035 7B64 31 DELAY1:MOV R3,#1000037 7A14 32 DELAY2:MOV R2,#200039 792D 33 DELAY3:MOV R1,#45003B D9FE 34 DELAY4:DJNZ R1,DELAY4003D DAFA 35 DJNZ R2,DELAY3003F DBF6 36 DJNZ R3,DELAY20041 DCF2 37 DJNZ R4,DELAY10043 22 38 RET3940 ;10S0044 7C64 41 DALY2:MOV R4,#1000046 7B64 42 DEAY1:MOV R3,#1000048 7A0A 43 DEAY2:MOV R2,#10004A 792D 44 DEAY3:MOV R1,#45004C D9FE 45 DEAY4:DJNZ R1,DEAY4004E DAFA 46 DJNZ R2,DEAY30050 DBF6 47 DJNZ R3,DEAY20052 DCF2 48 DJNZ R4,DEAY10054 22 49 RET5051 ;0.5S0055 7C64 52 DALY1:MOV R4,#1000057 7B64 53 DEY1:MOV R3,#1000059 7A19 54 DEY2:MOV R2,#25005B DAFE 55 DEY3: DJNZ R2,DEY3005D DBFA 56 DJNZ R3,DEY2005F DCF6 57 DJNZ R4,DEY10061 22 58 RETA51 MACRO ASSEMBLER LED 04/22/2010 16:20:30 PAGE 25960 ENDA51 MACRO ASSEMBLER LED 04/21/2010 16:50:30 PAGE 3SYMBOL TABLE LISTING------ ----- -------N A M E T Y P E V A L U E ATTRIBUTESDALY . . . . . . . C ADDR 0033H ADALY1. . . . . . . C ADDR 0055H ADALY2. . . . . . . C ADDR 0044H ADEAY1. . . . . . . C ADDR 0046H ADEAY2. . . . . . . C ADDR 0048H ADEAY3. . . . . . . C ADDR 004AH ADEAY4. . . . . . . C ADDR 004CH ADELAY1 . . . . . . C ADDR 0035H ADELAY2 . . . . . . C ADDR 0037H ADELAY3 . . . . . . C ADDR 0039H ADELAY4 . . . . . . C ADDR 003BH ADEY1 . . . . . . . C ADDR 0057H ADEY2 . . . . . . . C ADDR 0059H ADEY3 . . . . . . . C ADDR 005BH ALOOP1. . . . . . . C ADDR 000CH ALOOP2. . . . . . . C ADDR 0022H AP1 . . . . . . . . D ADDR 0090H ASTART. . . . . . . C ADDR 0000H AREGISTER BANK(S) USED: 0ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)七、实验步骤:(1)根据书中设计流程图编写源程序(见实验程序)(2)用keil软件仿真:(3)更改参数:(4)下载:1.正确连接实验仪与主机的RS-232通信电缆和电源2.把实验仪的工作模式选择开关切换到LOAD处,复位系统使实验仪工作于下载状态3.运行DPFlash下载软件4.把实验仪的工作模式选择开关切换到RUN处,复位系统使实验仪工作观察发光二极管的运行情况。
单片机系统实验实训报告

一、实验目的1. 熟悉单片机的基本结构和原理。
2. 掌握单片机的编程方法和调试技巧。
3. 培养单片机应用系统的设计能力。
4. 提高实际操作能力和团队协作精神。
二、实验内容本次实验实训主要围绕单片机应用系统展开,包括以下内容:1. 单片机最小系统搭建- 熟悉单片机的最小系统组成,包括复位电路、晶振电路、VCC、GND等。
- 掌握电路板焊接和调试方法。
2. LED流水灯实验- 学习使用51单片机进行简单的单片机应用系统硬件设计。
- 掌握单片机GPIO端口的使用方法。
- 通过编程实现LED灯的流水效果。
3. 按键控制LED灯实验- 学习使用按键输入控制LED灯的亮灭。
- 掌握按键去抖动技术。
4. LCD1602显示屏控制实验- 学习使用LCD1602显示屏显示文字和数字。
- 掌握LCD1602的初始化和显示控制方法。
5. 串口通信实验- 学习使用单片机串口进行通信。
- 掌握串口初始化和通信协议。
6. 温湿度传感器实验- 学习使用温湿度传感器获取环境温度和湿度信息。
- 掌握传感器数据读取和温度湿度计算方法。
7. 多功能密码锁实验- 学习使用单片机实现密码锁功能。
- 掌握按键输入、密码存储和匹配方法。
三、实验步骤1. 实验一:单片机最小系统搭建- 根据实验指导书,准备好实验器材,包括51单片机、电路板、焊接工具等。
- 按照电路图焊接电路,确保电路连接正确。
- 上电测试,观察LED灯是否亮起,确认电路工作正常。
2. 实验二:LED流水灯实验- 编写LED流水灯程序,使用51单片机GPIO端口控制LED灯的亮灭。
- 烧录程序到单片机,观察LED灯的流水效果。
3. 实验三:按键控制LED灯实验- 编写按键控制LED灯的程序,使用按键输入控制LED灯的亮灭。
- 烧录程序到单片机,测试按键控制功能。
4. 实验四:LCD1602显示屏控制实验- 编写LCD1602显示屏显示文字和数字的程序。
- 烧录程序到单片机,观察LCD1602显示屏的显示效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实训报告
一、流程图
1、主程序
开始
显示“HELLO-”,外部中断0初始化
P3.2键有无按下?
定时器T0初始化并启动定时器,扩展芯片初始化显示“OP51”,读取计数值
K12键有无按下?
显示“年月”,读取计数值
结束N
Y
N Y
2、外部中断
开始
外部中断0初始化
N
P3.2键有无按下?
Y N
响应外部中断0服务程序:uint k++
K>0?
Y
定时器T0初始化并启动定时器,扩展芯片初始化
显示“OP51”,读取计数值
结束
3、定时器中断
开始
P3.2键有无按下?
定时器T0中断初始化,启动定时器
10ms 时间到?
计数个位加1
结束
计数个位=10?
响应定时器T0中断服务程序,关闭T0,重新初赋值,启动定时器
1秒时间到?
计数十位加1
计数十位=10?
计数清零
读取计数值
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
4、按键
开始
外部扩展芯片初始化
K12键有无按下?
显示“年月”,读取计数值
结束N
Y
二、附录:程序
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define OSC_FREQ 12000000
#define __10ms (65536 - OSC_FREQ/(12000000/9970))
#define COM8255 XBYTE[0XFFF3]
#define PA8255 XBYTE[0XFFF0]
#define PB8255 XBYTE[0XFFF1]
#define PC8255 XBYTE[0XFFF2]
sbit P1_2=P1^2;
sbit P1_1=P1^1;
sbit P1_0=P1^0;
sbit P0_4=P0^4;
sbit P2_4=P2^4;
uchar led1;
uchar led2;
uchar i=0;
uint k=0;
uchar T0_10ms=0;
void dis_HELLO();
void disp_OP51();
void disp_led1();
void disp_led2();
void disp_date();
void Set_Init_Dint();
void DelayX1ms(uint count);
void Set_Init_Xint();
void Set_Init_Timer0();
uchar code HELLO[]={0x89,0x86,0xC7,0xC7};
uchar code dis_OP51[]={0xc0,0x8c,0x92,0xf9};
uchar code tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; void main (void) //主程序
{
for(;;)
{
SCON=0X00;
dis_HELLO(); //共阳数码管显示“HELLO-”
Set_Init_Xint(); //外部中断0初始化
if(k>=1)
{
Set_Init_Timer0(); //定时器T0中断初始化
for(;;)
{
disp_OP51(); // 共阳数码管显示“OP51”
disp_led2(); // 读取计数值
disp_led1();
Set_Init_Dint(); // 外部扩展芯片8255初始化
if(PB8255==0XEF)
{
for(;;)
{
disp_date(); // 共阳数码管显示“年月”
disp_led2(); // 读取计数值
disp_led1();
for(i=0;i<0xff;i++);
}
}
}
}
}
}
void Set_Init_Dint() // 外部扩展芯片8255初始化{
COM8255=0X82;
P1_0=0;
P1_1=1;
P1_2=0;
}
void Set_Init_Xint() //外部中断0初始化{
IT0=1;
EX0=1;
EA=1;
}
void Set_Init_Timer0() //定时器中断T0初始化{
TMOD=0X01;
TH0 = __10ms/256;
TL0 = __10ms%256;
EA=1;
ET0=1;
TR0 = 1;
}
void disp_OP51() //“OP51”送显
{
P1=0x72;
P2=dis_OP51[0 ];
DelayX1ms(5);
P1=0xB2;
P2=dis_OP51[1 ];
DelayX1ms(5);
P1=0xD2;
P2=dis_OP51[2];
DelayX1ms(5);
P1=0xE2;
P2=dis_OP51[3];
DelayX1ms(5);
}
void dis_HELLO() //“HELLO-”送显
{
SBUF=0xFC;
P2_4=0;
while(!TI);
TI = 0;
P2_4=1;
SBUF=0X02;
P2_4=0;
while(!TI);
TI = 0;
P2_4=1;
P1=0x7F;
P2=HELLO[0 ];
DelayX1ms(5);
P1=0xBF;
P2=HELLO[1 ];
DelayX1ms(5);
P1=0xDF;
P2=HELLO[2];
DelayX1ms(5);
P1=0xEF;
P2=HELLO[3];
DelayX1ms(5);
}
void disp_led1() //计数个位送显{
SBUF=tab[led1];
P2_4=0;
while(!TI);
TI = 0;
P2_4=1;
}
void disp_led2() //计数十位送显{
SBUF=tab[led2];
P2_4=0;
while(!TI);
TI = 0;
P2_4=1;
}
void disp_date() //“年月”送显
{
P1=0x72;
P2=0xCF;
DelayX1ms(5);
P1=0xB2;
P2=0XA4;
DelayX1ms(5);
P1=0xD2;
P2=0xCF;
DelayX1ms(5);
P1=0xE2;
P2=0XA4;
DelayX1ms(5);
}
void DelayX1ms(uint count) //延时
{
uint j;
while(count--!=0)
{ for(j=0;j<72;j++);
}
}
void Run_Xint(void) interrupt 0 using 1 //外部中断0服务程序{
k++;
}
void Time0(void) interrupt 1 using 2 //定时器中断T0服务程序{
TR0 = 0;
TH0 = __10ms/256;
TL0 = __10ms%256;
TR0 = 1;
T0_10ms++;;
if(T0_10ms==200 )
{
T0_10ms = 0;
led1++;
if( led1== 10 )
{
led2++;
led1 = 0;
}
if( led2==10 )
{led2=0;}
}
}。