C51单片机定时器及数码管控制实验报告.docx

昆明理工大学信息工程与自动化学院学生实验报告(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++;}。

合集下载

【报告】单片机定时器计数器实验报告

【报告】单片机定时器计数器实验报告

【关键字】报告单片机定时器计数器实验报告篇一:单片机计数器实验报告计数器实验报告㈠实验目的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单片机实验报告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单片机是一种常用的微控制器,具有体积小、功耗低、功能强大等优点,广泛应用于各种电子设备中。

本文将介绍本次实训的目标、实验步骤、实验结果以及实训中遇到的问题及解决方案。

二、实训目标本次实训的目标是通过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单片机实验报告
一、实验内容
本次实验的目的是实现用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单片机数码管显示实验报告

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单片机的基础知识和使用方法。

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