嵌入式实验报告(51单片机)

合集下载

嵌入式单片机实习报告

嵌入式单片机实习报告

实习报告:嵌入式单片机实习一、实习目的和意义本次实习的主要目的是通过嵌入式单片机系统的实际操作,深入理解嵌入式系统的工作原理,掌握单片机的编程、调试和应用技巧。

通过实习,使学生能够将所学的理论知识与实际操作相结合,提高解决实际问题的能力,为未来的职业发展打下坚实的基础。

二、实习内容和过程实习的主要内容包括单片机系统的设计、焊接、装配、测试和程序编制等。

在实习过程中,我们使用了经典的51系列单片机,通过搭建不同的电路系统,实现了对单片机的各种控制功能。

首先,我们学习了单片机的硬件组成,包括CPU、存储器、输入输出端口等,并通过焊接电路板的方式,亲自组装了一个单片机系统。

在这个过程中,我们深刻理解了电路原理图及电子线路的基本焊接装配工艺、规范及注意事项。

然后,我们对组装好的系统板进行了测试,通过观察和分析系统板的工作原理及性能,掌握了元器件及系统故障的排除方法。

此外,我们还学习了程序编制及调试方法,完成了系统初始化、存储器操作、端口操作、键盘显示等程序的编制及调试。

在实习的过程中,我们使用了汇编语言和C语言进行编程,通过不断地尝试和调试,我们逐渐掌握了单片机的各种编程技巧,解决了一些挑战性问题。

同时,我们也学习了如何通过调试工具对程序进行调试和优化,提高了程序的稳定性和性能。

三、实习收获和反思通过本次实习,我对嵌入式单片机系统有了更深入的理解,掌握了单片机的编程、调试和应用技巧。

我意识到,嵌入式系统的设计和开发不仅需要扎实的理论知识,还需要良好的实际操作能力。

同时,我也明白了团队合作的重要性,通过与团队成员的分工合作,我们共同完成了实习任务。

然而,我也发现自己在实习过程中还存在一些不足之处。

例如,我在编程时有时过于依赖调试工具,没有充分发挥自己的编程能力。

此外,我在团队协作中也存在一些沟通不畅的问题,需要进一步提高自己的沟通能力。

四、实习总结通过本次嵌入式单片机实习,我收获颇丰。

我不仅掌握了单片机的编程技巧,还提高了解决实际问题的能力。

51单片机实验报告

51单片机实验报告

实验一:开发环境的搭建一、(1)、keil的安装与破解点击Keil安装包,一键傻瓜式操作,安装完成后以管理员身份打开Keil,在File里选择license management 把CID复制到注册机里的CID栏,注册机里的Target选择C51,然后点击Generate,将生成的激活码复制到license management里的LIC栏,并点击Add LIC,即完成破解。

(2)、CH340驱动安装(3)、普中烧录软件的使用波特率选择9600,速度选择低速,文件路径选择HEX文件的路径(4)、keil的使用新建工程并保存,在CPU 里面选择STC90C52RC ,再新建C 文件,注意保存时手动加上.c 后缀,再在Source Group 1 右击选择 Add Files to Group'Source Group 1'找到刚才新建的C 文件,然后找到图标并点击,再Target 里将晶振频率改为12MHz,将Output 里生成HEX 文件的勾打上即可生成HEX 文件。

(5)、protues的安装与破解双击安装包开始安装,等进入到Labcenter Licence Manager1.6,也就是许可证管理页面,点击Browse For Key File,找到下载解压软件包中的LICENCE.lxk文件,并打开,再点击install,再点击“是”,继续傻瓜式操作。

破解时以管理员身份运行破解软件,目标文件里找到安装的路径,再点击升级,即可完成破解。

(6)、protues的使用双击蓝色ISIS图标即可打开Proteus,File里新建并保存,然后点击“P”即可选择自己所需元器件,输入AT89C52单片机,确定后在图纸中点击即可,双击单片机将对话框中的Program File 选择Keil生成的HEX文件,电路及程序都完成后,点击左下角即可开始仿真,点击停止仿真。

二、实验结论在实验一里学会了开发环境的搭建,学会并熟练了Keil u Vision4 和Proteus 7.8以及普中烧录软件的使用,基本实现了用Keil编写程序并且生成HEX文件,能够用Proteus 画基本仿真图并且成功实现仿真,在仿真过程中出现了win10电脑不能正常实现仿真的问题,在经过百度等多方面查找之后找到了如下解决办法:1、路径上不能有中文2、仿真时出现cannot open'C:User\?\AppData\Local\Temp\LISA5476.SDF'的错误时:右击我的电脑-属性-高级系统设置-环境变量,在“用户变量”栏里找到TEMP与TMP,分别双击,将变量值都改为%SystemRoot%\TEMP如果还不行将下面的“系统变量”栏里的TEMP与TMP同样修改方法,如果没有新建就行。

at89c51实验报告

at89c51实验报告

at89c51实验报告AT89C51实验报告引言:AT89C51是一款经典的8位单片机,被广泛应用于各种嵌入式系统中。

本实验报告将介绍我对AT89C51的实验过程和结果,以及对该单片机的一些理解和应用。

实验目的:1. 熟悉AT89C51单片机的基本特性和功能;2. 掌握AT89C51单片机的编程方法和调试技巧;3. 实现简单的功能模块并验证其正确性。

实验过程:1. 硬件准备在实验开始前,我准备了一块AT89C51开发板、一台电脑、一根USB数据线以及一些连接线。

将开发板与电脑连接,确保能够正常通信和编程。

2. 软件设置我选择了Keil C51作为开发工具,打开软件后,新建一个工程,并选择AT89C51作为目标芯片。

接着,我编写了一个简单的程序,用于点亮开发板上的LED灯。

3. 编程调试将编写好的程序下载到AT89C51单片机中,然后通过调试工具进行程序的调试和运行。

在调试过程中,我发现程序中存在一处错误,经过仔细排查后,成功修复了问题。

4. 功能实现在程序调试通过后,我开始尝试实现一些功能模块。

首先,我实现了一个简单的计数器,通过按下开发板上的按钮,可以实现数字的加减操作。

接着,我尝试了一些其他的功能,如LED灯的闪烁、蜂鸣器的发声等。

实验结果:经过一系列的实验和调试,我成功地实现了以上功能模块,并验证了其正确性。

AT89C51单片机表现出了良好的稳定性和可靠性,在进行各种操作时没有出现明显的延迟或错误。

对AT89C51的理解和应用:通过这次实验,我对AT89C51单片机有了更深入的了解。

AT89C51作为一款经典的8位单片机,具有较强的处理能力和丰富的外设接口,可以广泛应用于各种嵌入式系统中。

在实际应用中,AT89C51可以用来控制各种外设,如LED灯、LCD显示屏、温度传感器等。

通过编写相应的程序,可以实现各种功能,如数据采集、数据处理、控制操作等。

此外,AT89C51还支持多种通信协议,如UART、SPI、I2C等,可以与其他设备进行数据交互。

51单片机实验报告(共五则)

51单片机实验报告(共五则)

51单片机实验报告(共五则)第一篇:51单片机实验报告51单片机实验报告实验一点亮流水灯实验现象 Led灯交替亮,间隔大约10ms。

实验代码#include 〈reg51、h> void Delay10ms(unsigned int c);voidmain(){)1(elihwﻩ{ ﻩP0= 0x00;Delay10ms(50);;ffx0 =0Pﻩﻩ;)05(sm01yaleDﻩ } } void Delay10ms(unsigned int c){unsigned char a,b;for(;c>0;c-—){)——b;0〉b;83=b(rofﻩ{ ﻩﻩfor(a=130;a〉0;a--);}ﻩﻩ}} 实验原理W W hi i le(1)表示一直循环。

循环体内首先将P0 得所有位都置于零,然后延时约5 5 0*10=500ms,接着 0 P0 位全置于 1 1,于就是 D LED 全亮了。

接着循环,直至关掉电源..延迟函数就是通过多个for r 循环实现得。

实验 2 流水灯(不运用库函数)实验现象起初 led 只有最右面得那一个不亮,半秒之后从右数第二个led也不亮了,直到最后一个也熄灭,然后 led 除最后一个都亮,接着上述过程 #includemain(){unsigned char LED;LED = 0xfe;while(1){ ﻩ;DEL = 0PﻩDelay10ms(50);00x0 == 0P(fiﻩ {;1〈〈 DEL = DELﻩ)ﻩ;efx0 = DELﻩ} ﻩ}ﻩ} void Delay10ms(unsigned int c){unsigned char a,b;for(;c>0;c-—){)—-b;0〉b;83=b(rofﻩ{ ﻩﻩﻩ;)--a;0>a;031=a(rofﻩ} ﻩ} ﻩ} 实验原理这里运用了C语言中得位运算符, , 位运算符左移, , 初始值得二进制为1111 1 110, 之后左移一次变成1111 1 100 0,当变成00000 0000 时通过 f if 语句重置 1 1 11 1 11110、延迟函数在第一个报告已经说出了,不再多说..实验 3 流水灯(库函数版)实验现象最开始还就是最右边得一个不亮,然后不亮得灯转移到最右边得第二个,此时第一个恢复亮度,这样依次循环.实验代码#include 〈reg51、h> #include 〈intrins、h〉void Delay10ms(unsigned int c); void main(void){unsigned char LED;;EFx0 = DELﻩ)1(elihwﻩ{ ﻩP0 = LED;;)05(sm01yaleDﻩﻩ;)1,DEL(_lorc_ = DELﻩ} ﻩ} void Delay10ms(unsigned in t c){unsigned chara, b;for(;c〉0;c——){ ﻩfor(b=38;b〉0;b—-){ ﻩﻩ;)-—a;0〉a;031=a(rofﻩ} ﻩ}}实验原理利用头文件中得函数,_cro l_(,), 可以比位操作符更方便得进行 2 2 进制得移位操作, , 比位操作符优越得就是,该函数空位补全时都就是用那个移位移除得数据, , 由此比前一个例子不需要f if 语句重置操作..数码管实验实验现象单个数码管按顺序显示0-9与 A-F。

嵌入式系统试验报告

嵌入式系统试验报告

嵌入式系统实验报告学院:计算机科学与工程姓名:___________学号:_______________专业:_______________指导老师:______________完成日期:______________实验一:流水灯案例、8位数码管动态扫描案例一、实验目的1.1 进一步熟悉Keil C51集成开发环境调试功能的使用;1.2 学会自己编写程序,进行编译和仿真测试;1.3 利用开发板下载hex 文件后验证功能。

二、实验原理2.1 :实验原理图030B 〜I ।卜RSI I ™Hi 」 口 UICDR Hr hJJK RR 18q U I. 海水灯电浒周LhE U_EEM^Li > > 第 X > k >n - » =白 L a £0EBS2.2:工作原理2.2.1:流水灯电路中有LO,1,L2,L3,4,L5,L6,L7共八个发光二极管,当引脚LED_ SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。

A〜H引脚连接STM32F108VB芯片的PE8〜PE15,程序初始化时,对其进行初始设置。

引脚LED_SEL为1时,发光二极管才工作,否则右边的数码管工作。

注意,LED SEL 连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的I0不可用,需对AFIO_ MAPR寄存器进行设置,设置其为10可用。

2.2.2: 8位数码管数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一-定的电压差值时,便会点亮该段。

当£3输入为1,也就是LED_ 5£1输入为0时,根据SELO〜SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。

三、实验结果3.1:流水灯对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。

单片机嵌入式实训报告

单片机嵌入式实训报告

单片机嵌入式实训报告一、引言在当今的电子技术领域,单片机已经成为嵌入式系统设计的核心组件。

为了更好地理解和应用单片机,我们进行了一次单片机嵌入式实训。

本报告将详细介绍实训的目的、过程、发现的问题、解决方案以及对实训的反思和个人的收获。

二、实训目的和岗位认识实训的主要目的是培养我们的实际操作能力,将单片机理论知识与实际应用相结合,使我们更好地理解单片机的选型、外围电路设计、程序编写与调试等技能。

在实训过程中,我对单片机嵌入式系统工程师这一岗位有了更深入的认识。

单片机嵌入式系统工程师需要具备扎实的电子技术基础、编程能力、电路设计能力以及问题解决能力。

同时,他们需要熟悉各种单片机及其开发工具,能够根据项目需求进行系统设计和优化。

三、实训过程与问题解决在实训过程中,我们首先根据项目需求选择了合适的单片机型号。

接着,我们进行了外围电路设计,包括电源电路、输入输出接口电路等。

在编程方面,我们使用了C语言进行编程,并利用开发工具进行了程序烧写和调试。

在实训过程中,我们遇到了一些问题。

首先,在电路设计时,我们发现某个元件的参数选择不当,导致系统无法正常工作。

通过查阅资料和讨论,我们确定了正确的元件参数,并重新进行了电路设计。

其次,在程序调试过程中,我们发现程序存在逻辑错误,导致系统运行异常。

通过逐步调试和代码审查,我们找到了错误的原因并进行了修正。

四、实训总结与收获通过本次实训,我深刻体会到了单片机嵌入式系统设计的复杂性和挑战性。

我不仅学会了如何根据项目需求进行单片机选型、外围电路设计和程序编写,还掌握了单片机的调试技巧和常见问题的解决方法。

同时,实训也锻炼了我的团队协作能力,使我明白了在项目中各成员间沟通与合作的重要性。

五、对实训不足之处的反思与建议虽然本次实训收获颇丰,但我认为仍有一些不足之处。

首先,我在时间管理方面仍有待提高,部分任务进度滞后。

为此,我应提前规划好每个阶段的任务,确保按计划进行。

其次,我在问题解决方面过于依赖已有知识,忽视了新知识的学习。

嵌入式实验报告(51单片机)

嵌入式实验报告(51单片机)

实验报告内容实验题目:P口输出实验实验目的:通过实验了解P口做为输入输出方式使用时,CPU对P口的操作方式实验要求:控制8个LED灯,完成从左到右然后再从右到左再从左到右依次的循序流水实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#include "reg52.h"#include<intrins.h>typedef unsigned int u16;typedef unsigned char u8;#define led P2void delay(u16 i){while(i--);}void main(){u8 i;led=0x7f;delay(50000);while(1){for(i=0;i<7;i++){led=_cror_(led,1);delay(50000);}for(i=0;i<7;i++){led=_crol_(led,1);delay(50000);}}}实验结果分析:实验日期:2017.10.24成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验报告内容实验要求:利用动态扫描和定时器0在数码管上显示出从200开始以1/10秒的速度往下递减直至100并保持此数,以此同时利用定时器1以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时LED灯全亮。

实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;uchar t0=0,t1,temp;uchar temp,bai,shi,ge;uint shu=200;uchar codesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39 ,0x5e,0x79,0x71};void delay(uint i){while(i--);}void xianshi(uchar bai,uchar shi,uchar ge){LSA = 0;LSB=0;LSC=0;P0=smgduan[ge];delay(250);P0=0x00;LSA=1;LSB=0;LSC=0;P0=smgduan[shi];delay(250);P0=0x00;LSA=0;LSB=1;LSC=0;P0=smgduan[bai];delay(250);P0=0x00;}void main(){TMOD=0x11;TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;ET0=1;ET1=1;TR0=1;TR1=1;temp=0xfe;P2=0xfe;while(1){xianshi(bai,shi,ge);}}void T0_time() interrupt 1 {TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++;if(t0==10){t0=1;temp=_crol_(temp,1);P2=temp; }}void T1_time() interrupt 3 {TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1++;if(t1==2){t1=0;shu--;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu==100){TR1=0;TR0=0;P2=0x00;}}}实验结果分析:实验日期:2017.11.30成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验要求:以单片机为核心,设计数字秒表。

51单片机实验报告

51单片机实验报告

51单片机实验报告
实验目的:
本实验旨在让学生熟悉并掌握51单片机的基本知识和编程能力,进一步了解单片机的原理和应用。

实验内容:
本次实验主要包括以下几个内容:
1.熟悉51单片机的基本原理和结构;
2.学习51单片机的汇编语言编程;
3.使用51单片机进行简单的I/O控制;
4.学习串口通信的原理和编码。

实验步骤:
1. 配置开发环境:安装Keil C编译器和Proteus电路仿真软件;
2.学习汇编语言编程基础知识,包括寄存器的使用、指令的执行等;
3.编写第一个程序:实现将一个数字显示在数码管上;
4.学习I/O控制:通过按键来控制LED灯的亮灭;
5.学习串口通信:通过串口与计算机进行通信,实现数据的发送与接收。

实验结果:
在实验过程中,我成功编写了几个基本的程序,并在Proteus中进行
了仿真。

通过按键来控制LED灯的亮灭,也成功地使用串口进行了数据的
发送和接收。

通过实验,我更深入地理解了51单片机的工作原理和编程
方法。

实验总结:
通过本次实验,我对51单片机有了更深的理解,并掌握了一些基本
的编程技巧。

通过实际操作,我培养了自己的动手能力和问题解决能力。

作为一门基础课程,51单片机为我今后的学习打下了坚实的基础。

我相信,在今后的学习和实践中,我能够更加熟练地运用51单片机进行各种
应用和项目的设计。

该报告共计1200字。

参考资料:
[1]《单片机技术与应用》.吕春阳、吕立民、钱锋.电子工业出版社,2024年。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告内容实验题目:P口输出实验实验目的:通过实验了解P口做为输入输出方式使用时,CPU对P口的操作方式实验要求:控制8个LED灯,完成从左到右然后再从右到左再从左到右依次的循序流水实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#include "reg52.h"#include<intrins.h>typedef unsigned int u16;typedef unsigned char u8;#define led P2void delay(u16 i){while(i--);}void main(){u8 i;led=0x7f;delay(50000);while(1){for(i=0;i<7;i++){led=_cror_(led,1);delay(50000);}for(i=0;i<7;i++){led=_crol_(led,1);delay(50000);}}}实验结果分析:实验日期:2017.10.24成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验报告内容实验要求:利用动态扫描和定时器0在数码管上显示出从200开始以1/10秒的速度往下递减直至100并保持此数,以此同时利用定时器1以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时LED灯全亮。

实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;uchar t0=0,t1,temp;uchar temp,bai,shi,ge;uint shu=200;uchar codesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39 ,0x5e,0x79,0x71};void delay(uint i){while(i--);}void xianshi(uchar bai,uchar shi,uchar ge){LSA = 0;LSB=0;LSC=0;P0=smgduan[ge];delay(250);P0=0x00;LSA=1;LSB=0;LSC=0;P0=smgduan[shi];delay(250);P0=0x00;LSA=0;LSB=1;LSC=0;P0=smgduan[bai];delay(250);P0=0x00;}void main(){TMOD=0x11;TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;ET0=1;ET1=1;TR0=1;TR1=1;temp=0xfe;P2=0xfe;while(1){xianshi(bai,shi,ge);}}void T0_time() interrupt 1 {TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++;if(t0==10){t0=1;temp=_crol_(temp,1);P2=temp; }}void T1_time() interrupt 3 {TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1++;if(t1==2){t1=0;shu--;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu==100){TR1=0;TR0=0;P2=0x00;}}}实验结果分析:实验日期:2017.11.30成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验要求:以单片机为核心,设计数字秒表。

设计要求计时范围:0~59分59.59秒,整数四位数和小数两位数显示;计时精度10毫秒;复位按钮,计时器清零,并做好下次及时准备;可以对三个对象(A、B)计时,具有启/停控制;设开始、停止A、停止B、显示A、显示B、复位按钮。

实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#include<reg52.h>#define uint unsigned int //宏定义无符号整型#define uchar unsigned char //宏定义无符号字符型#define DUAN (P0) //宏定义数码管段代码#define WEI (P2) //宏定义数码管位代码sbit keystart_stop = P3^2; //定义启动/停止按键sbit keyrest = P3^3; //定义复位/清零按键sbit keyrecord = P3^4; //定义计数/存储按键sbit keydispaly = P3^5; //定义计数/显示按键sbit beep = P3^6; //定义蜂鸣器sbit led = P3^7; //定义uchar x,msec5,msec10,second,minute; //时间变量uchar msec,sec,min; //显示变量uchar code table1[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管数组不带点显示uchar code table2[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x58,0x00,0x10}; //共阳数码管带点显示/********************************函数名称: 延时函数delay功能: 延时指定毫秒参数: uchar x返回值: 无********************************/void delay(uchar x){uint b,c;for(b = x;b>0;b--)for(c = 110;c>0;c--);}/********************************函数名称: 定时器初始化函数time_init(void)功能: 定时器初始化参数: 无返回值: 无*********************************/void time_init(void){msec5=0;TMOD = 0x01;TH0 = (65536-9174)/256;TL0 = (65536-9174)%256;ET0 = 1;TR0 = 1;EA = 1;}/********************************函数名称: 显示函数display()功能: 数码管显示参数: uchar msec,uchar sec,uchar min返回值: 无*********************************/void display(uchar msec,uchar sec,uchar min){DUAN = table1[(msec%10)%10];// 0.01秒 5.64%10=64%10=0.04 WEI = 0x01;delay(2);WEI = 0x00;DUAN = table1[(msec/10)%10];// 0.1秒 5.64/10=56%10=0.6WEI = 0x02;delay(2);WEI = 0x00;DUAN = table2[(sec%10)]; // 1秒564%10=6WEI = 0x04;delay(2);WEI = 0x00;DUAN = table1[(sec/10)]; // 10秒564/10=56%10=6WEI = 0x08;delay(2);WEI = 0x00;DUAN = table1[(min%10)]; // 1分564/10=56%10=6WEI = 0x10;delay(2);WEI = 0x00;DUAN = table1[(min/10)]; // 10分564/10=56%10=6WEI = 0x20;delay(2);WEI = 0x00;}/******************************** 函数名称: 蜂鸣器函数功能: 蜂鸣器发声参数: 无返回值: 无*********************************/ void beep_led(){beep = 0;delay(600);beep = 1;delay(600);led = 0;delay(600);led = 1;}/******************************** 函数名称: 按键函数功能: 调试按键的函数参数: 无返回值: 无*********************************/ void keys(){if(keystart_stop==0){delay(5);if(keystart_stop==0)TR0 = ~TR0;beep_led();while(!keystart_stop);}if(keyrest==0){delay(5);if(keyrest==0)TR0 = 0;msec5=0;msec10=0,second=0;minute=0;beep_led();while(!keyrest);}}/********************************函数名称: 主函数功能:参数: 无返回值:*********************************/void main(){uchar jishu=0;uchar flag=0;uchar msec1=0,sec1=0,min1=0;uchar msec2=0,sec2=0,min2=0;time_init();while(1){keys(); // 键盘的扫描函数一定要放在while循环里边msec=msec10;sec=second;min=minute;if(flag==1){display(msec1,sec1,min1);}else if(flag==0){display(msec,sec,min);}else{display(msec2,sec2,min2);}if(keyrecord==0){delay(5);if(keyrecord==0){beep_led();jishu++;if(jishu>2){jishu=0;}else if(jishu==1){msec1=msec10;sec1=second;min1=minute;}else if(jishu==2){msec2=msec10;sec2=second;min2=minute;}}while(!keyrecord);}if(keydispaly==0){delay(5);if(keydispaly==0){beep_led() ;flag++;if(flag>2)flag=0;}while(!keydispaly);}}}/**********************************函数名称: 中断函数功能:参数: 无返回值:***********************************/void timer0 () interrupt 1{TH0 = (65536-9174)/256;TL0 = (65536-9174)%256;msec10++; // msec10加一次等于10ms if(msec10==100) // j=100 为1s{msec10 = 0;second++;if(second==60) // second=60 为1minute{second=0 ;minute++;if(minute==60) // minute=60 为1hour{minute=0 ;}}}}实验结果分析:实验日期:2017.12.01成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日。

相关文档
最新文档