C51单片机定时器及数码管控制实验报告.docx
【报告】单片机定时器计数器实验报告
【关键字】报告单片机定时器计数器实验报告篇一:单片机计数器实验报告计数器实验报告㈠实验目的1. 学习单片机内部定时/计数器的使用和编程方法;2. 进一步掌握中断处理程序的编程方法。
㈡实验器材1. 2. 3. 4. 5.G6W仿真器一台MCS—51实验板一台PC机一台电源一台信号发生器一台㈢实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。
㈣实验说明1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入定时器T0。
单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。
2. 计数脉冲由信号发生器输入(从T0端接入)。
3. 计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421码表示,个位用L8~L5的8421码表示4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示㈤实验框图(见下页)程序源代码ORG 00000H LJMP MAINORG 001BH AJMP MAIN1 MAIN:MOV SP,#60HMOV TMOD,#15H MOV 20H,#14H MOV TL1,#0B0H MOV TH1,#3CHMOV TL0,#00H;T0的中断入口地址;设置T1做定时器,T0做计数器,都于方式1工作;装入中断次数;装入计数值低8位;装入计数值高8位MOV TH0,#00HSETB TR1 ;启动定时器T1 SETB TR0 ;启动计数器T0 SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $;等待中断MAIN1: PUSH PSW PUSH ACC CLR TR0CLR TR1 MOV TL1,#0B0H MOV TH1,#3CHDJNZ 20H,RETUNT MOV 20H ,#14HSHOW: MOV R0,TH0 MOV R1,TL0MOV A,R1 MOV B,#0AH DIV ABMOV C,ACC.3MOV P1.0,C MOV C,ACC.2 MOV P1.1,C MOV C,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,CMOV A,B MOV C,ACC.3MOV P1.4,C MOV C,ACC.2 MOV P1.5,C MOV C,ACC.1 MOV P1.6,C MOV C,ACC.0MOV P1.7,C ;保护现场;装入计数值低8位;装入计数值高8位,50ms;允许T1中断;未到1s,继续计时;1s到重新开始;显示计数器T0的值;读计数器当前值;将计数值转为十进制;显示部分,将A中保存的十位赋给L0~L3 将B中保存的各位转移到A中;将个位的数字显示在L4~L7上;RETUNT:MOV TL0,#00H;将计数器T0清零MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回在频率为1000HZ时,L0~L7显示为50;频率为300HZ时,L0~L7显示为15,结果正确,程序可以正确运行。
单片机定时器实验报告
一、实验目的1. 理解单片机定时器的工作原理和功能。
2. 掌握单片机定时器的编程方法,包括初始化、设置定时时间、启动定时器等。
3. 学会使用定时器实现定时功能,并通过实验验证其效果。
二、实验器材1. 单片机实验板2. 连接线3. 51单片机4. 计时器5. 示波器6. 电脑7. Keil软件三、实验原理定时器是单片机的一种重要外设,用于实现定时功能。
51单片机内部有两个定时器,分别为定时器0和定时器1。
定时器的工作原理是通过定时器计数器对机器周期进行计数,当计数器达到设定值时,定时器溢出,并产生中断请求。
定时器0和定时器1都具有四种工作模式,分别为:1. 模式0:13位定时器/计数器2. 模式1:16位定时器/计数器3. 模式2:8位自动重装模式4. 模式3:两个8位计数器本实验采用定时器0工作在模式1,实现50ms的定时功能。
四、实验步骤1. 将单片机实验板连接到电脑,并启动Keil软件。
2. 创建一个新的项目,并添加51单片机头文件(reg51.h)。
3. 编写定时器初始化函数,设置定时器0工作在模式1,并设置定时时间为50ms。
4. 编写定时器中断服务函数,用于处理定时器溢出事件。
5. 编写主函数,设置定时器中断,并启动定时器。
6. 编译并下载程序到单片机实验板。
7. 使用示波器观察定时器0的溢出信号。
五、实验代码```c#include <reg51.h>#define TIMER0_MODE1 0x01// 定时器0初始化函数void Timer0_Init() {TMOD &= 0xF0; // 清除定时器0模式位TMOD |= TIMER0_MODE1; // 设置定时器0工作在模式1TH0 = 0xFC; // 设置定时器0高8位初值TL0 = 0x18; // 设置定时器0低8位初值ET0 = 1; // 开启定时器0中断EA = 1; // 开启总中断TR0 = 1; // 启动定时器0}// 定时器0中断服务函数void Timer0_ISR() interrupt 1 {TH0 = 0xFC; // 重新加载定时器0高8位初值TL0 = 0x18; // 重新加载定时器0低8位初值// ... (其他处理)}void main() {Timer0_Init(); // 初始化定时器0while(1) {// ... (其他处理)}}```六、实验结果与分析1. 编译并下载程序到单片机实验板,使用示波器观察定时器0的溢出信号,可以看到定时器0每隔50ms产生一个溢出信号。
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。
51单片机实训报告
51单片机实训报告一、引言51单片机是一种常用的微控制器,具有体积小、功耗低、功能强大等优点,广泛应用于各种电子设备中。
本文将介绍本次实训的目标、实验步骤、实验结果以及实训中遇到的问题及解决方案。
二、实训目标本次实训的目标是通过51单片机的学习和实践,掌握单片机的基本原理和编程技巧。
具体来说,我们需要实现以下几个功能:1. 熟悉51单片机的硬件组成和工作原理;2. 学习使用Keil C编译器进行单片机程序的编写和调试;3. 掌握基本的输入输出控制方法,如LED灯的控制、数码管的显示等;4. 学习使用定时器、中断等功能模块,实现一些实际应用,如蜂鸣器的发声、电机的控制等。
三、实验步骤1. 硬件准备:将51单片机与外围电路进行连接,如连接LED灯、数码管、蜂鸣器等;2. 编写程序:使用Keil C编译器编写相应的程序,包括引入头文件、定义宏、声明变量、编写主函数等;3. 调试程序:将程序下载到51单片机中,通过单片机的调试功能进行程序的调试,排除可能存在的错误;4. 运行程序:将调试好的程序运行在51单片机上,观察实验结果是否符合预期。
四、实验结果在本次实训中,我们顺利完成了以下几个实验:1. LED灯闪烁:通过控制51单片机的输出口,使LED灯以一定频率进行闪烁;2. 数码管显示:通过控制51单片机的输出口,使数码管显示指定的数字或字符;3. 蜂鸣器发声:通过控制51单片机的输出口,产生一定频率的方波信号,使蜂鸣器发出相应的声音;4. 电机控制:通过控制51单片机的输出口,控制电机的转动方向和速度。
五、实训中遇到的问题及解决方案在实训过程中,我们遇到了一些问题,但通过团队的共同努力和老师的指导,最终都得到了解决。
下面列举了其中的几个问题及解决方案:1. 问题:LED灯无法闪烁;解决方案:检查LED灯的连接是否正确,确认是否存在接触不良或短路等问题。
2. 问题:数码管无法正常显示;解决方案:检查数码管的连接是否正确,确认是否存在引脚连接错误或接触不良等问题。
C51单片机实验报告
C51单片机实验报告
一、实验内容
本次实验的目的是实现用C51单片机实现简易的闹钟功能:即用户可以设置闹钟时间,当到达闹钟的设定时间的时候,单片机会控制LED灯或者蜂鸣器发出报警信号来提醒用户。
二、实验任务
本次实验任务如下:
1.使用C51单片机读取外部时钟的时间。
2.实现从按键输入闹钟设定的时间。
3.使用定时器实现任务调度,即在每个时刻检查一次外部时钟的时间是否到达闹钟的设定时间,如果到达设定时间,则控制LED灯或者蜂鸣器发出报警信号。
三、实验过程
1.硬件部分:本实验使用的硬件是硬件C51单片机,它具有单片机主频11.059MHz,外部内存2K和内部RAM 128字节。
本次实验采用的C51单片机核心是AT89C51,它具有4K字节的Flash存储器,它有128个8位I/O口和3个定时器/计数器。
本次实验使用到的外设有:LCD1602显示模块、4个4*4的数字键盘、AT24C02的IIC从机存储器、LED灯和蜂鸣器。
2.软件部分:本次实验使用的软件工具是Keil C51编译器,使用它来编写C51单片机程序。
51单片机数码管显示实验报告
51单片机数码管显示实验实验内容:1)编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复。
2)C语言程序#include<reg52.h>#define uint unsigned intvoid display();void num();int i;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表void delayms(uint);void main(){while(1){num();display();}}void display(){P2=0xff;//消隐P0连接段选,P1节位选P1=0x00;//8个数码管同时显示P2=table[i];//数码管显示数码0 delayms(1000);//延时5ms}void num(){if(i<9)i++;elsei=0;}void delayms(uint x){uint i,j;for(i=0;i<x;i++)for(j=0;j<110;j++);}3)汇编语言:ORG 0000HLJMP MAINORG 0100H;P2连接段选,P1节位选MAIN: MOV P1,#00H ;所有的数码管都显示MOV R2,#00H ;从0开始显示LOOP: MOV A,R2 ;为下面的基址加变址寄存器寻址方式做准备MOV DPTR,#TAB1 ;把数组的首地址赋给DPTRMOVC A,@A+DPTR ;取数组中的数字MOV P2,A ;把取得的值送给P0口显示ACALL DELAY ;延时一会INC R2 ;为取下一个数加一CJNE R2,#10,LOOP ;只要数小于10就继续循环显示MOV R2,#00H ;如果加到10后重新从0开始LJMP LOOP ;进入循环函数;****************************************** TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H; 数组DB 92H,82H,0F8H,80H,90HRET;****************************************** DELAY: MOV R3,#3 ;延时函数DE1: MOV R4,#0FFHDE2: MOV R5,#0FFHDJNZ R5,$DJNZ R4,DE2DJNZ R3,DE1RET;*************************************************END(3)编写程序学习数码管的动态显示,让8只数码管从从左往右显示1、2、3……8。
c51单片机实验报告
c51单片机实验报告C51单片机实验报告引言C51单片机作为一种常见的微控制器,广泛应用于各种电子设备中。
本实验报告旨在介绍C51单片机的基本原理、实验过程和结果分析,以及对其在实际应用中的潜力进行探讨。
一、C51单片机的基本原理C51单片机是一种高度集成的微处理器,由中央处理器、存储器、输入输出接口和时钟电路等组成。
其核心是Intel公司开发的8051系列单片机,具有高性能、低功耗和易于编程等优点。
C51单片机采用汇编语言进行编程,可以实现各种功能,如数据处理、控制和通信等。
二、实验过程本次实验选取了LED灯的控制作为示例,通过C51单片机控制LED灯的亮灭来展示其基本功能。
1. 实验材料准备准备工作包括C51单片机开发板、连接线、电源和LED灯等。
确保所有材料齐全并连接正确。
2. 编写程序使用汇编语言编写程序,通过控制特定的IO口来控制LED灯的亮灭。
程序需考虑到时序和逻辑关系,确保正确的控制信号发送到LED灯。
3. 烧录程序将编写好的程序通过烧录器烧录到C51单片机中,确保程序能够正确运行。
4. 运行实验将电源接入开发板,开启电源。
通过按下相应的按键或其他输入方式,触发C51单片机发送控制信号,从而控制LED灯的亮灭。
三、实验结果分析经过实验,我们成功地实现了通过C51单片机控制LED灯的亮灭。
通过改变程序中的控制信号,我们可以实现不同的灯光效果,如闪烁、流水灯等。
这说明C51单片机具有良好的可编程性和控制能力。
此外,我们还发现C51单片机具有较高的稳定性和可靠性。
在实验过程中,单片机能够稳定地工作,并根据程序的要求正确地控制LED灯的状态。
这为其在实际应用中提供了良好的基础。
四、C51单片机在实际应用中的潜力C51单片机作为一种常见的微控制器,广泛应用于各种电子设备中。
其可编程性和控制能力使得它在工业自动化、家电控制、通信设备和电子产品等领域有着广阔的应用前景。
例如,在工业自动化领域,C51单片机可以用于控制机器人、自动化生产线和仪器设备等。
51单片机实验报告
51单片机实验报告一、引言51单片机是一种广泛应用于嵌入式系统开发的微控制器芯片。
本实验旨在通过对51单片机的实验研究,加深对该芯片的理解和应用。
二、实验一:LED灯闪烁控制本实验通过编写程序,控制51单片机上的LED灯以特定的频率闪烁。
为了实现这个目标,我们首先需要了解51单片机的引脚布局,确定LED灯的连接方式。
然后,通过编写相应的汇编程序,控制引脚的电平变化,从而实现LED灯的闪烁。
三、实验二:数码管显示数码管是一种常见的输出设备,通过控制引脚的输出来显示特定的数字。
本实验中,我们通过编写程序,实现通过51单片机控制数码管的显示。
通过对数码管的驱动原理和编程的学习,我们可以灵活地控制数码管的显示内容和频率。
四、实验三:蜂鸣器发声蜂鸣器是一种常见的声音输出设备,通过控制引脚的输出来产生特定的声音。
本实验中,我们通过编写程序,实现通过51单片机控制蜂鸣器的发声。
通过学习蜂鸣器的驱动原理和编程,我们可以根据需要产生不同频率和节奏的声音。
五、实验四:温湿度检测温湿度检测是一种常见的环境监测需求。
本实验中,我们通过引入温湿度传感器,实现通过51单片机获取环境的温度和湿度信息。
通过编写程序和读取传感器的数据,我们可以实时监测环境的温湿度,并进行相应的控制和反馈。
六、实验五:红外遥控红外遥控是一种常见的无线通信方式,通过发送和接收红外信号来实现远程控制。
本实验中,我们通过引入红外发射和接收模块,实现通过51单片机进行红外遥控。
通过编写相应的程序,设置红外遥控的编码和解码方式,我们可以实现对外部设备的遥控操作。
七、实验六:定时器应用定时器是51单片机中的重要模块,它可以实现定时和计数等功能。
本实验中,我们通过学习定时器的工作原理和编程,实现通过51单片机进行定时和计数的应用。
通过编写相应的程序和设置定时器的参数,我们可以实现不同的定时和计数功能,满足各种需要。
八、实验七:串口通信串口通信是一种常见的数据通信方式,通过串口接口发送和接收数据。
单片机定时器实训报告
一、实训背景随着电子技术的不断发展,单片机作为嵌入式系统中的核心部件,得到了广泛应用。
定时器作为单片机的重要功能模块,能够实现定时、计数等功能,是单片机应用系统设计的关键技术之一。
为了提高学生的单片机应用能力,本次实训选取了基于51单片机的定时器应用作为实训内容。
二、实训目的1. 掌握51单片机定时器的基本原理和工作方式;2. 学会使用定时器实现定时、计数等功能;3. 培养学生动手实践能力和解决实际问题的能力;4. 提高学生对单片机应用系统的设计水平。
三、实训内容本次实训主要涉及以下内容:1. 51单片机定时器原理及工作方式;2. 定时器初始化编程;3. 定时器中断编程;4. 定时器应用实例:LED流水灯控制。
四、实训步骤1. 学习51单片机定时器原理及工作方式,掌握定时器的工作模式、定时器计数范围等参数;2. 编写定时器初始化程序,包括定时器模式选择、计数初值设置等;3. 编写定时器中断服务程序,实现定时功能;4. 编写LED流水灯控制程序,实现定时器中断触发LED流水灯效果;5. 将程序烧录到单片机中,进行实验验证。
五、实训结果与分析1. 定时器初始化编程:根据实训要求,设置了定时器模式、计数初值等参数,实现了定时器定时功能;2. 定时器中断编程:编写了定时器中断服务程序,实现了定时器中断触发功能;3. LED流水灯控制:通过定时器中断触发,实现了LED流水灯效果,验证了定时器应用实例的正确性。
在实训过程中,遇到以下问题及解决方法:1. 定时器计数初值设置错误:通过查阅资料,了解了定时器计数初值的计算方法,正确设置了计数初值;2. 定时器中断服务程序编写错误:通过分析程序,发现中断服务程序中存在逻辑错误,修改后程序运行正常。
六、实训心得通过本次实训,我深刻认识到以下内容:1. 定时器在单片机应用系统中的重要作用,掌握了定时器的基本原理和工作方式;2. 编程过程中,要注重代码的可读性和可维护性,提高编程效率;3. 在遇到问题时,要善于查阅资料,分析问题原因,并采取有效措施解决问题;4. 实训过程中,要注重理论与实践相结合,提高动手实践能力。
51单片机实验报告
51单片机实验报告51单片机是一种广泛应用于控制领域的微型处理器。
本文将介绍我所进行的两个基础实验,包括实验目的、实验内容、实验原理和实验结果。
实验一——点亮LED灯实验目的:了解51单片机的基本接口和编程方法;学会使用单片机的开发工具和调试器;掌握51单片机控制LED灯的方法。
实验内容:将LED灯连接至51单片机的P1.0引脚,并进行控制。
编写程序,使得LED灯能稳定地点亮。
实验原理:单片机可通过其IO口控制外部设备,使用高低电平来控制LED灯的开关。
P1.0是51单片机的一个输出端口,可通过赋予其电平状态从而控制LED的点灯与熄灭。
当单片机输出高电平时,LED灯会点亮,否则会熄灭。
实验结果:经过编写程序和调试后,成功实现了LED灯的点亮和熄灭。
按下按键即可改变LED的状态。
实验二——数码管计数器实验目的:了解51单片机的数字口和中断响应机制;掌握编写定时器中断程序的方法;学会使用键盘进行输入和外接数码管进行输出。
实验内容:通过对8位数码管控制台的编程,实现对数字的控制,使用定时器中断实现计数器功能,加深对51单片机中断响应机制的理解。
实验原理:单片机中断请求源包括外部中断源、定时器/计数器中断源以及串口中断源。
本次实验使用定时器中断,可实现一定时间间隔内数字的加减;使用键盘进行输入,采用P3口中断请求源实现按键响应,输出则通过数码管接口外设实现。
实验结果:通过定时器计数器、中断响应和数码管接口外设,成功实现一组数字的计数。
按下按键即可进行数字的加减,并通过数码管显示出来。
结语:本文所述实验为51单片机的基础操作,相信可以为读者提供实用的参考和帮助,帮助大家更加深入地理解51单片机的基础知识和使用方法。
c单片机定时器及数码管控制实验报告
图1LED数码管电路原理图
for(j=0;j<110;j++);
}
voidT0_time()interrupt1//定时器T0程序
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
}
voidT1_time()interrupt3//定时器T1程序
{
TH1=(65536-45872)/256;
}
else
display(bai,shi,ge);//当没计满3s时,继续显示之前的6位数
}
}
bai=c;
ge=count%10;
}
display(bai,shi,ge);
}
}
voidinit()//main()函数的初始化
{
TMOD=0x11;//定时器T0,T1的工作方式都是1
计算初值公式
定时模式1th0=(216-定时时间)/256tl0=(216-定时时间)%256
四、实验步骤
1、按实验要求在KeilC中创建项目,编辑、编译程序。
2、将编译生成的目标码文件(后缀为.Hex)下载到实验板电路中。
3、在实验板中运行程序,观察实验运行结果并记录。
五、实验结果
开始时数码管的数字是765432,随后是765429,流水灯显示的是第一个灯,实验结果如下图所示:
单片机C51程序设计实验报告书(word文档良心出品)
实验一并行输入输出口的使用一、实验目的:学会设计proteus 7仿真电路,学习P1口的使用方法和延时子程序的编写用Keil uVision 3编程实现发光二极管的流水点亮。
二、实验原理:P1口为8位准双向I/O口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1)。
P1口作为输出,接8个发光二极管D1~D8经限流电阻分别接至8个引脚。
本实验仿真电路图、流程图如下:三、实验代码:#include<reg51.h>#include<intrins.h> //移位库函数包含于此头文件中void delay(unsigned int d) //定义延时子函数{ while(--d>0);}void main(){ unsigned char i,sel;while(1){ sel=0xfe;for(i=0;i<=8;i++){ P1=sel; //显示变量赋给P1口delay(50000); //延时sel=_crol_(sel,1); //改变显示变量}}}四、实验结论:用while语句实现发光二极管循环流水点亮,从上到下一次点亮。
实验二C51分支程序设计一、实验目的:学习多分支选择结构和switch语句,了解循环的嵌套。
二、实验原理:do while 循环先执行后判断是否循环,switch括号中的表达式的值与某case后的常量表达式的值相同时,就执行它后面的语句,遇到break语句则退出switch语句。
本实验仿真电路图、流程图如下:(仿真电路图)(流程图)三、实验代码:#include <reg51.h>void main(){ char a;do{ P1=0xff;a=P1;a=a&0x03;switch(a){ case 0:P2=0x0e;break;case 1:P2=0x0d;break;case 2:P2=0x0b;break;case 3:P2=0x07;break;}}while(1);}四、实验结论:多分支选择的switch/case语句,可直接处理并行多分支选择问题,从匹配表达式的括号开始执行,不再进行判断。
单片机指示灯和数码管的中断控制实验报告.doc
单片机指示灯和数码管的中断控制实验报告.doc本次实验是对单片机指示灯和数码管的中断控制的探索与实验。
本次实验采用的控制芯片是C8051F020,并使用了Keil uVision 5软件进行编程,通过搭建的硬件电路实现指示灯和数码管的控制。
一、实验目的1.了解中断的基本概念和中断的处理过程;2.学习如何设置中断优先级和使用中断嵌套;4.进一步巩固单片机的编程基础。
二、实验内容1.实现定时器中断控制指示灯,每隔一定时间改变指示灯的亮灭状态2.实现外部中断控制数码管,当外部引脚有电平变化时,更新数码管的显示内容三、实验原理中断是单片机系统中常用的一种处理机制。
引发中断的事件可以是定时器计数器溢出,外部I/O口电平跳变、串口数据到达等多种情况。
在中断响应后,单片机会暂停当前的程序执行,先转到相应的中断服务程序中执行,待中断处理完成后再从原来暂停的位置继续执行。
本次实验中,通过使用单片机的定时器和外部中断控制指示灯和数码管。
定时器中断每隔一定时间改变指示灯的状态,外部中断控制数码管显示内容的改变。
在编程时,需要设置中断的优先级和中断嵌套的情况。
四、实验步骤1.硬件连接将指示灯连接到P0.0引脚,将数码管连接到P2口对应的引脚,在数码管的位选接口处接入一个按键(用于模拟外部中断)。
2.编写定时器中断代码在Keil uVision中打开一个新的工程,编写定时器中断的代码,具体代码如下://包含头文件和全局变量定义#include<reg51.h>unsigned char ledStatus = 0;//定时器中断服务程序void tmr0_isr(void) interrupt 1{TMOD &= 0xf0;TH0 = (65536-50000)/256;}//定时器初始化ET0 = 1;unsigned char code num_c[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//LED灯控制函数control_led();//外部中断初始化//数码管更新函数P0 = num_c[num];P2 = ~(0x01<<num);4.实验结果将编写好的程序下载到单片机控制芯片上,按下数码管的位选按键,就可以看到数码管上的数字不断改变,同时指示灯每隔一定时间改变一次状态。
c51单片机实验报告
c51单片机实验报告
《C51单片机实验报告》
C51单片机是一种广泛应用于嵌入式系统中的微控制器,具有高性能、低功耗和丰富的外设接口,因此在各种电子设备中得到了广泛的应用。
本次实验将以C51单片机为研究对象,通过实验验证其性能和功能。
实验一:LED灯控制实验
首先,我们将C51单片机与LED灯连接起来,通过程序控制LED灯的亮灭。
实验结果表明,C51单片机可以准确地控制LED灯的亮度和闪烁频率,具有良好的稳定性和可靠性。
实验二:蜂鸣器控制实验
接着,我们将C51单片机与蜂鸣器连接起来,通过程序控制蜂鸣器的发声。
实验结果显示,C51单片机可以精准地控制蜂鸣器的音调和音量,具有较高的音频输出质量。
实验三:温湿度传感器实验
最后,我们将C51单片机与温湿度传感器连接起来,通过程序读取并显示温湿度数值。
实验结果表明,C51单片机可以准确地读取传感器的数据,并通过显示屏输出,具有良好的数据处理能力。
通过以上实验,我们验证了C51单片机在LED灯控制、蜂鸣器控制和温湿度传感器应用方面的性能和功能。
C51单片机具有较高的稳定性、可靠性和可编程性,适用于各种嵌入式系统的设计与开发。
希望本次实验报告能够对C51单片机的应用和研究提供一定的参考价值。
C51单片机定时器及数码管控制实验报告
昆明理工大学信息工程与自动化学院学生实验报告( 201 —201学年第1 学期)课程名称:单片机技术开课实验室: 年月日一、实验目的1. 掌握定时器 T0、T1 的方式选择与编程方法,了解中断服务程序的设计方法, 学会实时程序的调试技巧。
2. 掌握 LED 数码管动态显示程序设计方法。
二、实验原理1.89C51 单片机有五个中断源(89C52 有六个),分别就是外部中断请求 0、外部中断请求 1、定时器/计数器 0 溢出中断请求、定时器/计数器 0 溢出中断请求及串行口中断请求。
每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器 TCON 与 SCON 中。
当中断源请求中断时,相应标志分别由 TCON 与SCON 的相应位来锁寄。
五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。
在同一优先级别中,靠内部的查询逻辑来确定响应顺序。
不同的中断源有不同的中断矢量地址。
中断的控制用四个特殊功能寄存器 IE、IP、TCON (用六位)与 SCON(用二位), 分别用于控制中断的类型、中断的开/关与各种中断源的优先级别。
中断程序由中断控制程序(主程序)与中断服务程序两部分组成:1)中断控制程序用于实现对中断的控制;2)中断服务程序用于完成中断源所要求的中断处理的各种操作。
C51 的中断函数必须通过 interrupt m 进行修饰。
在 C51 程序设计中,当函数定义时用了 interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段与尾段,并按 MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。
在该修饰符中,m 的取值为 0~31,对应的中断情况如下:0——外部中断 01——定时/计数器 T02——外部中断 13——定时/计数器 T14——串行口中断5——定时/计数器 T2其它值预留。
89C51 单片机内设置了两个可编程的 16 位定时器 T0 与 T1,通过编程,可以设定为定时器与外部计数方式。
C51单片机实验:数码管
实验三八段数码管显示实验
一、实验目的:
1.学会数码管驱动显示方法;
2.掌握用数码管动态显示的方法;
3.了解数码管消除重影的方法。
二、实验仪器:
单片机开发板、下载线、应用软件及微机
三、实验原理
数码管静态和动态显示的原理。
四、实验内容:
1.先驱动一个数码管显示数字0~9;
2.调整各个显示数字之间的时间间隔,观察时间长短对显示数字的影响;
3.驱动两个数码管显示两位数字;
4.观察时间长短对于动态显示的影响;
5.消除重影现象的方法。
五、实验报告要求
1、实验目的和要求
2、实验的原理
3、电路原理图
4、实验程序流程框图和实验程序清单
5、实验总结
6、实验思考题
六、思考题
1、如何给数码管显示加上小数点?。
51单片机数码管实验报告
51单片机数码管实验报告51单片机数码管实验报告一、引言51单片机是一种非常常见的单片机芯片,广泛应用于各种电子设备中。
数码管作为一种常见的显示器件,也经常与51单片机一起使用。
本实验旨在通过使用51单片机控制数码管的显示,了解其工作原理和使用方法。
二、实验目的1. 理解51单片机的基本原理和工作方式。
2. 掌握51单片机与数码管的连接方法。
3. 学会使用51单片机控制数码管进行数字显示。
三、实验材料1. 51单片机开发板2. 数码管3. 杜邦线4. 电源线5. 电阻四、实验步骤1. 将数码管与51单片机开发板相连接。
根据数码管的引脚连接方式,将数码管的正极与51单片机的VCC引脚相连,负极与51单片机的GND引脚相连,然后将数码管的A、B、C、D、E、F、G引脚与51单片机的IO引脚相连。
2. 编写51单片机的程序代码。
通过控制51单片机的IO引脚输出高低电平信号,来控制数码管的显示内容。
根据数码管的真值表,设置相应的IO引脚输出高低电平信号,实现数字的显示。
3. 将编写好的程序下载到51单片机开发板中。
使用下载线将开发板与计算机相连接,通过下载软件将程序下载到51单片机中。
4. 运行程序,观察数码管的显示效果。
根据程序中设置的数字,数码管应该能够正确显示相应的数字。
五、实验结果与分析经过实验,我们成功地使用51单片机控制数码管进行数字显示。
根据程序中设置的数字,数码管能够正确显示相应的数字。
这说明我们对51单片机的使用方法有了一定的了解,并且掌握了控制数码管的基本原理。
六、实验总结通过本次实验,我们深入学习了51单片机的基本原理和使用方法,并成功地控制了数码管进行数字显示。
这为我们进一步学习和应用单片机技术打下了基础。
同时,我们也发现了一些问题,例如在连接数码管时需要注意引脚的对应关系,以及在编写程序时需要准确设置IO引脚的输出信号。
这些问题对我们今后的学习和实践都有一定的启示意义。
七、展望在今后的学习中,我们将进一步深入研究51单片机的原理和应用,探索更多有趣的实验和项目。
单片机(C51)实验报告
实验一熟悉ADEK单片机教学实验系统一、实验目的1.熟悉 ADEK 单片机教学实验系统和仿真器的结构和功能。
2.了解如何安装 51MINI 仿真器驱动程序。
二、ADEK 单片机教学实验系统组成图 1-1 AEDK 单片机教学实验系统外观图如图 1-1 所示, ADEK-EAT598 单片机教学实验系统遵循了模块化的设计思路,有丰硕的接口,而且具有良好的扩展性,以下为组成模块和利用的要紧芯片。
1.步进电机2.直流电机3.温度操纵( DS18B20、热敏电阻 B3470)4.模数转换( ADC0809)5.串行实验区( EEPROM X25045、 AT24C08、时钟芯片 HT1380、数模转换 TLC5615、模数转换 TLC1543)6. RAM( HM62256)7. ROM( M27C512)8.地址译码( 74LS138)9.数模转换( DAC0832)10.仿真机通信口:原厂仿真器的串口通信口,这部份功能已不用。
11.串并转换( 74LS164)12.频率源( CD4020)213.扩展输出( 74LS273)14.扩展输入(74LS244)15.电源开关16.液晶显示(MSC-G12232DYEW-7N)17.语音录放(ISD1730)18.扩展通信口(D8251、HIN232)19.八位开关20.交通灯21.单脉冲(HD74LS240)22.继电器(946H-1C-5D)23.电辅音调(9012)24.蜂鸣器25.光耦(TLC521)26.电位器27.点阵显示28.PS2 接口29.并行接口(8255)30.键盘显示(8279)31.扩展实验区32.打印机接口33.单片机核心板(EAT598_31)34.带USB 接口的51MINI 仿真器三、实验内容1.熟悉整个实验箱的硬件资源。
2.利用51MINI仿真器连接电脑,在电脑的设备治理器中可找到以下图所示的COM口。
实验二Keil集成开发环境练习一、实验目的1.把握开发环境Keil的安装方式。
51单片机动态数码管实验报告
51单片机动态数码管实验报告
本文介绍了51单片机动态数码管实验的步骤和结果。
动态数码管是一种常用的数字显示器件,它可以显示数字、字母和一
些图形。
在51单片机中,为了控制动态数码管的显示,我们需要使用定
时器和中断。
作为一个经典的单片机实验,动态数码管实验是初学者熟悉51单片机开发的重要步骤之一。
本次实验使用的是常见的4位共阳极动态数码管。
电路图如下:
在电路中使用了四个PNP三极管作为驱动器,共阳极接Vcc(5V),
母线接0V,通过控制每个数码管对应的位选引脚(EN1、EN2、EN3、EN4)来实现选定要显示的数码管,再由程序向选定的数码管的a、b、c、d、e、f、g引脚发送对应的信号,以实现数字显示的功能。
程序上,我们需要使用定时器和中断来驱动动态数码管的显示。
具体
步骤如下:
1.定义计数器和数组,数组定义每位数码管显示的数字,计数器控制
当前轮到哪个数码管显示。
2.初始化定时器和中断,并启动定时器。
3.在中断函数中,将数码管的位选引脚依次拉高并依次向数码管a、
b、c、d、e、f、g中发送数据信号。
4.在每个数码管的对应位选时间内,通过对控制数组的操作,改变数
码管显示的数字。
5.循环执行第3~4步,显示不同的数字。
最后,我们通过改变控制数组的值,实现了动态数码管显示不同数字和字母的功能。
总之,通过动态数码管实验,我们进一步熟悉了51单片机的定时器和中断,了解了动态数码管的驱动原理和程序设计方法,为后续更复杂的单片机实验和应用打下了基础。
C单片机定时器及数码管控制实验报告
C单片机定时器及数码管控制实验报告一、实验目的:1.理解单片机的定时器的工作原理和使用方法;2.掌握单片机控制数码管显示的方法;3.综合运用单片机定时器和数码管控制来实现对时间的计时功能。
二、实验器材:1.STC89C52单片机开发板;2.4位数码管;3.相关电源电缆;4.相关串口连接线;5.PC机。
三、实验原理:1.定时器的工作原理:定时器是单片机中的一个重要模块,它可以用来产生一定时间间隔的定时中断。
在STC89C52单片机中,有两个可编程定时器,分别是Timer0和Timer1、定时器的工作方式有两种:定时器工作模式和计数器工作模式。
通过设定定时器的工作模式、预分频系数以及计数初值,可以实现定时中断。
2.数码管的控制原理:数码管是一种常见的数码显示器材,一般由多个LED组成,通过对LED的开关控制来实现不同数字的显示。
使用单片机控制数码管可以实现数字的动态显示。
通常使用行扫描和列驱动两种方法来控制数码管的显示。
在本实验中,我们使用列驱动的方法来控制数码管的显示。
3.单片机定时器和数码管控制实验的原理流程:(1)初始化定时器设置,包括设定工作模式、预分频系数和计数初值。
(2)初始化数码管连接引脚,并将引脚置为输出状态。
(3)在定时器中断中,通过改变数码管显示的值来实现时间的动态显示。
四、实验步骤:1.硬件连线将STC89C52单片机开发板上的P0口连接到4位数码管的输入口,共7根线。
其中6根线对应4位数码管的6个段输入,另外1根线连接到4位数码管的控制端,用于控制数码管的选通位。
2.软件编程(1)定义头文件和端口变量#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit DIG1=P0^0; // 数码管第1位sbit DIG2=P0^1; // 数码管第2位sbit DIG3=P0^2; // 数码管第3位sbit DIG4=P0^3; // 数码管第4位sbit DULA=P0^4; // 数码管段选sbit WELA=P0^5; // 数码管位选uchar code ledData[16]={ // 共阳数码管动态显示数值表,共16个字符0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};(2)初始化函数void Init_Timer0(void) // 初始化定时器0TMOD,=0x01;//设定为定时器模式,工作模式1TH0=0xfc; // 给定初值,定时1msTL0=0x18;ET0=1;//打开定时器0中断TR0=1;//启动定时器0void Init_Timer1(void) // 初始化定时器1TMOD,=0x10;//设定为定时器模式,工作模式1TH1=0xf8; // 给定初值,定时10msTL1=0xcc;ET1=1;//打开定时器1中断TR1=1;//启动定时器1(3)定时器中断函数void Timer0Interrupt( interrupt 1 // 计时定时器中断函数static uchar count=0;TH0=0xfc;TL0=0x18;count++;if(count>=1000) // 1秒到count=0;LED_Place=0; // 置位数码管位置Digit_Index++; // 下一个要显示的数字if(Digit_Index>=8)Digit_Index=0;}if(LED_Place==1) // 第2位数码管LEDX=ledData[N%10];DIG2=0;DIG1=1;//第2位数码管显示}else if(LED_Place==2) // 第3位数码管LEDX=ledData[N/10%10];DIG3=0;DIG2=1;//第3位数码管显示}else if(LED_Place==3) // 第4位数码管LEDX=ledData[N/100%10];DIG4=0;DIG3=1;//第4位数码管显示}else // 第1位数码管LEDX=ledData[N/1000%10];DIG1=0;DIG4=1;//第1位数码管显示}}(4)主函数void mainInit_Timer0(; // 初始化定时器0Init_Timer1(; // 初始化定时器1EA=1;//全局中断使能while(1)//主函数其他处理}五、实验效果:经过上述步骤的硬件连接和软件编程,当单片机开始运行后,数码管将开始显示时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
昆明理工大学信息工程与自动化学院学生实验报告(201 —201学年第1学期)课程名称:单片机技术开课实验室:年月曰一、实验目的1.掌握定时器T0 、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。
2.掌握LED 数码管动态显示程序设计方法。
二、实验原理1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求0 、外部中断请求1、定时器/ 计数器0 溢出中断请求、定时器/ 计数器0 溢出中断请求及串行口中断请求。
每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCoN和SCoN中。
当中断源请求中断时,相应标志分别由TCoN 和SCON 的相应位来锁寄。
五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。
在同一优先级别中,靠内部的查询逻辑来确定响应顺序。
不同的中断源有不同的中断矢量地址。
中断的控制用四个特殊功能寄存器IE、P、TCON用六位)和SCON用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。
中断程序由中断控制程序(主程序)和中断服务程序两部分组成:1)中断控制程序用于实现对中断的控制;2)中断服务程序用于完成中断源所要求的中断处理的各种操作。
C51 的中断函数必须通过interrupt m 进行修饰。
在C51 程序设计中,当函数定义时用了interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。
在该修饰符中,m 的取值为0~31,对应的中断情况如下:0——外部中断01——定时/ 计数器T02——外部中断13——定时/ 计数器T14——串行口中断5——定时/ 计数器T2其它值预留。
89C51单片机内设置了两个可编程的16位定时器T0和T1 ,通过编程,可以设定为定时器和外部计数方式。
T1 还可以作为其串行口的波特率发生器。
2.定时器T0 由特殊功能寄存器TL0 和TH0 构成,定时器T1 由TH1 和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。
定时器的中断由中断允许寄存器IE ,中断优先权寄存器IP 中的相应位进行控制。
定时器T0 的中断入口地址为000BH,T1 的中断入口地址为001BH。
定时器的编程包括:1 )置工作方式。
2)置计数初值。
3)中断设置。
4)启动疋时器。
定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常 数也就不同。
3•单片机的拉电流比较小(100~200uA ,灌电流比较大(最大是25mA — 般不能超过10mA ,不能直接驱动数码管,需要扩流电路。
可以用三级管来驱 动,但是51单片机只有32个I/O 口,可能需要外接多种器件,I/O 口是 不够用的。
故可选用74HC573锁存器来解决这个问题,开发板上数码管的硬件 设计电路图,如图1所示。
TX-1C 实验开发板用两个74HC573锁存器(输出电流较大,接口简单),通 过P0 口控制六个数码管的段选及位选,其中P2.6控制锁存器UI (DULA,P2.7 控制锁存器U2 (WELA 。
单片机控制锁存器的锁存端,进而控制锁存器的输出, 这种分时控制的方法可方便地控制任意数码管显示任意数字。
图1 LED 数码管电路原理图三、实验内容利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的 速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS 速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也 停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显 示出 “HELLO 。
到此保持住。
Ji*n -X I7∏K3干frr ∙ftι 口科斗R 计■«『B"⅛X ,C J计算初值公式定时模式1 thθ=(216-定时时间)/ 256 tlθ=(216- 定时时间)% 256四、实验步骤1、按实验要求在KeiIC 中创建项目,编辑、编译程序。
2、将编译生成的目标码文件(后缀为.Hex)下载到实验板电路中3、在实验板中运行程序,观察实验运行结果并记录。
五、实验结果开始时数码管的数字是765432,随后是765429,流水灯显示的是第一个灯, 实验结果如下图所示:当数码管显示765398时,流水灯显示的是第七个灯,由于 LED 灯变化快, 难以捕捉到此时刻,以下图片是随后 LED 闪烁,数码管保持765398的现象:[3βS∣5∣S l ι8当数码管显示765406时,流水灯显示是第六个灯,实现现象如下图所示:1*SfiSSSS■ ■*⅛ -I -JYHrlJ FinH£LOJ. T⅛,rtΓ4t Γ∏H i■■ A⅛ ⅞⅛I T - J/*' ■ τ¾cliJLL .ft->M平H ∣. j最后流水灯全部关闭,数码管显示 HELLC 字样的现象:六、心得体会通过这次实验,巩固了流水灯的操作,在此之上,加深了八段数码管的动态 显示的理解,对定时器中断的理解和运用,虽然在实验的的过程中遇到了各种各 样的问题,但是在老师和同学们的帮助下,我失算顺利的完成了这次实验,为后 续的学习打下了坚实的基础。
七、思考1 •若用定时器1方式2 ,程序如何修?答:对定时器/计数器的工作方式进行修改, 即:TMoD = 0x21; //0010 ' 00012 •若显示从“ 99”开始递减,程序如何修改?答:只需选择第一个和第二个数码管即可,当递减到 0时停止,或者继 改回数字99,程序的其他部分基本不变。
八、源代码#in elude <reg52.h> #i nclude Vintrin s.h>#defi ne UChar Un Sig ned Char #defi ne Uintun Sig ned int Sbit led1 = P1^0; Sbit dula = P2^6; Sbit wela = P2^7;uchar code table[]={ //建一张 table 数组,元素是 0~F 字样 0x3f,0x06,0x5b,0x4f,flβββflβ*•#Fj 小』- Tk-Ie^ ⅛i I* F~ -17UwLl 1 VMtf I ∣∙ Γ∩H LI 口” ■一*l JF i b * j' i ħiΛ :口E 囂匚'0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};uchar code Hello[]={ //建一张HELLO 数组,元素是H,E,L,L,O 字样0x76,0x79,0x38,0x38,0x3f};void init();//main() 函数初始化的函数的声名void delayms(uint); //延时函数声名VOid display(uchar,uchar,uchar);/数码管显示函数声名void disHello(); //HELLO 显示函数声名uchar num1,num2,bai,shi,ge; //定义全局变量int cOunt,temp;VOid main(){init();while(1){if(nUm仁=10)//定时器每次计时50ms,当计满500ms时,LED灯流动{num1=0;P1 = _crOl_(P1,1); //循环左移}if(num2==2)//当计满0.1s时,数码管的值减1{num2 = 0;cOunt--;if(count==398)//当数码管减到765398时,保持该数,8个LED灯闪//烁{TR1 = 0;TR0 = 0;bai = count/100;//获得398的个、十、百位shi = count/10%10;ge = count%10;display(bai,shi,ge); //显示数码管的六位数P1 = 0x00; //8 个LED 闪烁的初始状态num1 = 0; //重新启动定时器T0 时,num1 重新初始化为0 TR0 =1;while(1){ if(num1%10==0) //8 个LED 每隔500ms 闪烁P1 = ~P1; //LED 灯取反if(num1 == 60)//当计满3s时,关闭LED灯,在数码管上显//示HELLO{TR0 = 0; //关闭定时器T0P1 = 0xff; //关闭LED 灯disHello(); //显示HELLO}elsedisplay(bai,shi,ge); //当没计满3s时,继续显示之前的6}位数}bai = count/100;shi = count/10%10; ge = count%10;}display(bai,shi,ge);void init() //mai n()函数的初始化{TMOD = 0x11; //定时器T0,T1 的工作方式都是1TH0 = (65536-45872)/256; //T0 计数寄存器的初始化TL0 = (65536-45872)%256;TH1 = (65536-45872)/256;//T1 计数寄存器的初始化TL1 = (65536-45872)%256;P1 = 0xfe; //LED 的初始化count = 432; //计数器的初始化,因为只有后三位变化EA = 1; //打开总中断ET0 = 1; //打开计时器T0TR0 = 1; //打开计时器T1ET1 = 1; //开启计时器T0TR1 = 1; //开启计时器T1void disHello()//HELLO 显示程序{ wela = 1;P0 = 0xfe; wela = 0;P0 = 0xff;dula = 1;P0 = Hello[0]; dula = 0; delayms(5);wela = 1; P0 = 0xfd;wela = 0; P0 = 0xff;dula = 1; P0 = Hello[1];dula = 0; delayms(5);wela = 1; P0 = 0xfb;wela = 0; P0 = 0xff;dula = 1; P0 = Hello[2];dula = 0; delayms(5);wela = 1; P0 = 0xf7;wela = 0; P0 = 0xff;dula = 1; P0 = Hello[3];dula = 0; delayms(5);wela = 1; P0 = 0xef;wela = 0;P0 = 0xff;dula = 1;P0 = Hello[4];dula = 0; delayms(5);}void display(uchar bai,uchar shi,uchar ge) /数/ 码管显示程序{ wela = 1;P0 = 0xfe;wela = 0;P0 = 0xff;dula = 1;P0 = table[7];dula = 0;delayms(5);wela = 1; P0 = 0xfd; wela = 0; P0 = 0xff; dula = 1;P0 = table[6]; dula = 0; delayms(5);wela = 1; P0 = 0xfb; wela = 0; P0 = 0xff; dula = 1; P0 = table[5]; dula = 0; delayms(5);wela = 1; P0 = 0xf7;wela = 0; P0 = 0xff;dula = 1; P0 = table[bai];dula = 0;delayms(5);wela = 1; P0 = 0xef;wela = 0; P0 = 0xff;dula = 1; P0 = table[shi];dula = 0; delayms(5);wela = 1; P0 = 0xdf; wela = 0; P0 = 0xff; dula = 1;P0 = table[ge]; dula = 0; delayms(5);}void delayms(uint xms){uint i,j;for(i=0;i<xms;i++)for(j=0;j<110;j++);}void T0_time() interrupt 1 //定时器T0 程序{TH0 = (65536-45872)/256;TL0 = (65536-45872)%256;num1++;}void T1_time() interrupt 3 //定时器T1 程序{TH1 = (65536-45872)/256;TL1 = (65536-45872)%256;num2++;}。