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 单片机实现分组控制灯实验的基本步骤:
1. 硬件准备:
- 51 单片机开发板
- 连接线
- 不同颜色的LED 灯(根据需要选择)
2. 连接电路:
- 将LED 灯连接到单片机的I/O 口,确保每个LED 灯与一个单独的I/O 口相连。
3. 软件编写:
- 使用C 语言或汇编语言编写单片机程序。
- 定义LED 灯对应的I/O 口。
- 创建一个延时函数,用于控制灯的闪烁时间。
- 编写主函数,根据需要进行分组控制。
- 遍历每个分组,将相应的I/O 口设置为高电平或低电平,以控制灯的亮灭。
4. 编译和下载程序:
- 使用相应的编译器将编写的程序编译成可执行的hex 文件。
- 使用下载工具将hex 文件下载到单片机中。
5. 运行和测试:
- 连接单片机开发板到电源,并运行程序。
- 观察LED 灯的状态,确保每个分组的灯按照预期进行控制。
51单片机实验手册
51单片机实验手册一、概述51单片机是一种经典的8位微控制器,具有广泛的应用领域。
本实验手册旨在提供详细的实验指导,帮助初学者快速入门,并为进一步的学习提供基础。
二、实验准备在进行51单片机实验之前,我们需要准备以下材料:1. 一块51单片机开发板2. USB数据线或者串口线3. 电脑及编程软件4. 面包板及对应的连接线5. 红、绿、蓝LED以及相应的电阻三、实验一:LED闪烁LED闪烁是最基础的实验之一,通过控制51单片机的I/O口状态,使LED灯交替亮灭。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将LED的长脚连接到P1.0引脚,短脚连接到GND引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>void main() {while(1) {P1 = 0x00; // P1置低电平,LED灯熄灭Delay(1000); // 延时1秒P1 = 0xFF; // P1置高电平,LED灯点亮Delay(1000); // 延时1秒}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
4. 运行实验将USB数据线或串口线连接到51单片机开发板和电脑,将开发板上的开关打开,观察LED灯的闪烁情况。
四、实验二:数码管显示通过控制51单片机的I/O口状态,驱动数码管显示数字。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将数码管的A、B、C、D、E、F、G引脚分别连接到P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>unsigned char code segment[] = { // 数码管段码表0x3F, // 数字00x06, // 数字10x5B, // 数字20x4F, // 数字30x66, // 数字40x6D, // 数字50x7D, // 数字60x07, // 数字70x7F, // 数字80x6F // 数字9};void main() {unsigned int i;while(1) {for(i = 0; i < 10; i++) {P1 = segment[i]; // 依次在数码管上显示数字0-9 Delay(1000); // 延时1秒}}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
51单片机仿真100实例
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第 01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){{P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsignedchar#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
51单片机5个例程修改实验报告课件.doc
.MCS-51单片机实验报告专业:通信工程指导老师:学号:姓名:1-1. 实验要求:修改例程一的源程序(1)将A寄存器的初值改为80H(正逻辑,数据位为 1 表示发光二极管点亮),再对源程序进行简单修改,使程序运行后发光二极管点亮情况与修改前相同。
(2)将LED向左循环移位点亮改为向右循环移位点亮。
(3)加快LED循环移位点亮的速度。
实验过程:针对三个小问题,分别有以下实验方法:(1)对A赋值80H,然后对A取反可达到原始点亮情况。
(2)改变A内位移数据的方向。
(3)减少调用DELAY函数的次数。
原程序:MOV A,#0FFH ; 清除挂接在总线上的数码管的显示内容MOV DPTR,#00HMOVX @DPTR,AMOV A,#07FH ; 赋初始值并在发光二极管上显示该数值MOV P1,ALOOP: CALL DELAYCALL DELAYRR A ;A 寄存器内容右移 1 位并送发光二极管显示MOV P1,AAJMP LOOP ; 无限循环DELAY: MOV R5,#0H; 延时子程序D1: MOV R6,#0HDJNZ R6,$DJNZ R5,D1RETEND最终程序:$include (C8051F020.inc)INIT: LCALL Init_DeviceMOV A,#080HCPL AMOV P3,ALOOP: CALL DELAYCALL DELAYCALL DELAYCALL DELAYRL AMOV P3,AAJMP LOOPDELAY: MOV R5,#0HD1: MOV R6,#00HDJNZ R6,$DJNZ R5,D1RET$include (Init_Device.inc)END1-2. 实验要求:将例程二0-F 的循环显示改为0-9 的循环显示实验过程:减少了数字显示,修改循环语句中归零判定语句的判定值即可原程序:ORG 0000HLJMP INITTAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ; 字符段码表0-7DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH ; 字符段码表8-FINIT:MOV A,#0FFH ; 清除挂接在总线上的数码管的显示内容MOV DPTR,#00HMOVX @DPTR,AMOV R1,#00H ; 操作数据初始值MOV A,R1MAIN:MOV DPTR,#TAB ; 读取与 A 中数值对应的显示段码MOVC A,@A+DPTRMOV P1,A ; 段码送并行口 1 显示CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYINC R1 ; 操作数据(R1) 增1MOV A,R1CJNE A,#10H,MAIN ; 检查操作数据是否大于显示范围(F)SJMP INIT ; 无限循环DELAY: MOV R5,#0H ; 延时子程序D1: MOV R6,#0HDJNZ R6,$DJNZ R5,D1RETEND最终程序:$include (C8051F020.inc)ORG 0000HLJMP INITTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB 080H,090HINIT: LCALL Init_DeviceINIT1: MOV R1,#00HMOV A,R1MAIN: MOV DPTR,#TABMOVC A,@A+DPTRMOV P5,ACALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYINC R1MOV A,R1CJNE A,#0AH,MAINSJMP INIT1DELAY: MOV R5,#0HD1: MOV R6,#0HDJNZ R6,$DJNZ R5,D1RET$include (Init_Device.inc)END2-1 实验要求:通过对例程 5 的程序进行修改和上机调试,改变原程序的功能。
ec1151单片机频率输出例程
ec1151单片机频率输出例程
ec1151单片机频率输出例程为:通过定时中断翻转IO口电平。
PWM波一个周期需要两次电平翻转,因为高电平时间与低电平时间可能不相对,所以定时器需要根据该电平状态的持续时间来负初值,也就是说,不能用常量。
赋初值后启动定时器,中断时翻转IO口电平,实现PWM波的输出。
IO口及变量定义,定义IO口以及高低电平持续时间对应定时器初值的暂存变量。
总结一下,由于是通过定时器中断调制的脉宽,所以,高低电平持续时间都不能大于65535个机器周期。
同事,由于中断处理函数也需要时间,高低电平持续时间也都不能太短,最好在10个机器周期以上,如果太短,CPU就没时间干其他事了。
这算是一个缺点把,但这个ec1151单片机频率输出例程范围应该也够用了。
51单片机实验报告
51单片机实验报告
根据所提供的信息,我可以为您提供一个基本的51单片机实验报告的样例。
以下是一个可能的实验报告结构:
实验名称:51单片机的基本使用
实验目的:掌握51单片机的基本使用方法和功能。
实验器材:51单片机开发板、USB接口线、计算机、电源。
实验步骤:
1. 连接电源,将开发板与计算机连接。
2. 打开软件IDE,新建一个工程。
3. 在工程中编写代码,实现将LED灯进行亮灭交替的功能。
4. 将编写好的代码下载到51单片机开发板中。
5. 检查电路连接是否正确,确保没有问题。
6. 启动51单片机开发板,观察LED灯的亮灭情况。
7. 记录实验结果。
8. 关闭开发板和计算机。
实验结果:
通过编写的代码,成功地实现了LED灯的亮灭交替功能。
LED灯每隔一段时间亮起,然后又灭掉,不断循环。
实验分析:
实验结果表明,51单片机因其高性价比和广泛应用领域,可以使用简单的代码实现一些基本功能。
在这个实验中,我们使
用了51单片机的GPIO口控制LED灯的亮灭,通过不断循环的方式实现了交替闪烁的效果。
实验总结:
通过这次实验,我了解了51单片机的基本使用方法,学会了如何编写简单的代码来控制外部设备。
这对于我以后的学习和应用起到了很好的基础作用。
51单片机实验报告
51单片机实验报告一、引言51单片机是一种广泛应用于嵌入式系统开发的微控制器芯片。
本实验旨在通过对51单片机的实验研究,加深对该芯片的理解和应用。
二、实验一:LED灯闪烁控制本实验通过编写程序,控制51单片机上的LED灯以特定的频率闪烁。
为了实现这个目标,我们首先需要了解51单片机的引脚布局,确定LED灯的连接方式。
然后,通过编写相应的汇编程序,控制引脚的电平变化,从而实现LED灯的闪烁。
三、实验二:数码管显示数码管是一种常见的输出设备,通过控制引脚的输出来显示特定的数字。
本实验中,我们通过编写程序,实现通过51单片机控制数码管的显示。
通过对数码管的驱动原理和编程的学习,我们可以灵活地控制数码管的显示内容和频率。
四、实验三:蜂鸣器发声蜂鸣器是一种常见的声音输出设备,通过控制引脚的输出来产生特定的声音。
本实验中,我们通过编写程序,实现通过51单片机控制蜂鸣器的发声。
通过学习蜂鸣器的驱动原理和编程,我们可以根据需要产生不同频率和节奏的声音。
五、实验四:温湿度检测温湿度检测是一种常见的环境监测需求。
本实验中,我们通过引入温湿度传感器,实现通过51单片机获取环境的温度和湿度信息。
通过编写程序和读取传感器的数据,我们可以实时监测环境的温湿度,并进行相应的控制和反馈。
六、实验五:红外遥控红外遥控是一种常见的无线通信方式,通过发送和接收红外信号来实现远程控制。
本实验中,我们通过引入红外发射和接收模块,实现通过51单片机进行红外遥控。
通过编写相应的程序,设置红外遥控的编码和解码方式,我们可以实现对外部设备的遥控操作。
七、实验六:定时器应用定时器是51单片机中的重要模块,它可以实现定时和计数等功能。
本实验中,我们通过学习定时器的工作原理和编程,实现通过51单片机进行定时和计数的应用。
通过编写相应的程序和设置定时器的参数,我们可以实现不同的定时和计数功能,满足各种需要。
八、实验七:串口通信串口通信是一种常见的数据通信方式,通过串口接口发送和接收数据。
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单片机的基础知识和使用方法。
51单片机入门实验及示例程序
实验题1、由按键S1产生外部中断1,S1按一次L0、L2、L4、L6亮,再按一次L1、L3、L5、L7亮。
2、由按键S1产生外部中断1控制T0启停,T0产生100ms定时,使4个数码管循环显示0中的一段,每段显示时间为1S。
3、T1工作于方式2,产生250uS精确定时,产生0~9秒计时,并显示在数码管上。
4、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的任何字符,都立刻转发给PC。
5、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘0’~‘9’,回送0~9,当收到‘a’~‘z’时回送‘A’~‘Z’。
6、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘1’,回送字符串“Start”,并启动T0产生1S的方波控制L0~L7闪烁,当收到‘2’时回送字符串“Stop”,并停止控制L0~L7。
7、串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘Start’,回送字符串“Ok1”,并启动T0产生1S的方波控制L0~L7闪烁,当收到‘Stop’时回送字符串“Ok2”,并停止控制L0~L7。
8、当S1工作于独立按键方式时(需考虑按键抖动,软件滤波),按第1次,L0~L3以0.5秒为周期闪烁,串口以9600bps波特率发送字符‘1’一次,按第2次,L4~L7以1秒为周期闪烁,串口以9600bps波特率发送字符‘2’一次,按第3次,L0~L7以2秒为周期闪烁,串口以9600bps波特率发送字符‘3’一次。
再按一次回到第一次的模式,如此循环。
本人自己写的示例程序,验证可用,仅供参考学习用:附部分原理图:1、#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit P33=P3^3;sbit P35=P3^5;bit flag=1;void delay_115(int x) //延时函数{int i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void main(){EA=1; //中断总允许位IT1=0; //设置外部中断1的触发方式为电平触发EX1=1; //开外部中断P35=0;P1=0xaa; //初始化P1,方法二中必须写这句while(1);}void t1_115() interrupt 2{/* delay_115(20); //按键消抖while(!P33); //当松开按钮时程序才往下执行,否则一直停留在此处delay_115(20); //按键消抖*///方法一:/* if(P1==0x55)P1=0xaa;elseP1=0x55; *///方法二:(若使用方法二则给P1初始化为0xaa或0x55)// P1=~P1; //取反if(P33==0){delay_115(15);if(P33==0){if(flag){P1=~P1;flag=0;}}else{// key=0;flag=1;}}else{// key=0;flag=1;}}2、#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit P33=P3^3;sbit P35=P3^5;uchar count_115=0;void delay_115(int x) //延时函数int i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void main(){uchar temp_115=0xfe;EA=1; //中断总允许位TMOD=0x01; //设置T0的工作方式为方式1IT1=0; //设置外部中断1的触发方式为电平触发EX1=1; //开外部中断ET0=1; //开定时器T0TR0=1; //定时器T0启动TH0=0x3C; //设置初值TL0=0xB0;P35=0;P0=0x10; //打开4位数码管while(1){if(count_115==20) //该变量每50ms加1,当count_115等于20时,即时间间隔为1s{count_115=0; //将计数变量重置为0,以便开始下1s的定时P1=temp_115;temp_115=temp_115<<1; //左移一位temp_115=temp_115+0x01; //最低位补1}if(temp_115==0xbf) //由于只需要点亮最外圈的六个管子,故此处重置temp_115为0xfetemp_115=0xfe;}}void t0_115() interrupt 1{TH0=0x3C; //装入初值此处为50ms执行一次中断TL0=0xB0;count_115++; //每执行一次中断,该变量加1void t1_115() interrupt 2{delay_115(20); //按键消抖while(!P33); //当松开按钮时程序才往下执行,否则一直停留在此处delay_115(20); //按键消抖TR0=~TR0; //暂停或启动定时器T0}3、此题过于简单,略。
C51单片机实验报告程序
{
while (--j);
} while (--i);
}
void flick()
{
uchar d;
while(d<=2)
{
P2=0x00;
P3=0xc3;
Delay100ms();
P2=0xff;
P3=0xff;
Delay100ms();
d++;
}
}
void show()
{
char j;
switch(j)
while(!ki2);
}
if(!ki3)
{
Delay5ms();
if(!ki3)
a=6;
while(!ki3);
}
if(a!=n)
{
SBUF=a;
while(!TI);
TI=0;
}
if(RI)
{
b=SBUF;
RI=0;
}
P1=tab1[b];
}
}
实验四 交通灯实验
最终实现:上电之后进行初始设置,2号键增加红绿灯时间,3号键增加黄灯时间,初始时间都为零;1号键开始工作;按3、4、5任意键急停,按3、4、5任意键继续(从第一步开始。
}
show();
}
void main()
{
uchar m,k;
uint n=1;
P1M1=0x00;
P1M0=0xff;
TMOD=0x10;
TH1=0xfc;
TL1=0x67;
ET1=1;
EA=1;
while(1)
{
if(!TR1)
{
k=0;
for(k=0;k<50;k++)
c51单片机实验报告
C51单片机实验报告实验目的本实验旨在通过对C51单片机的学习和实践,了解单片机的基本原理和使用方法,掌握C语言与单片机的编程技巧。
实验器材•C51单片机•电脑•C语言开发环境•连接线实验步骤步骤一:准备工作1.将C51单片机与电脑连接,确保连接线连接正确且稳固。
2.在电脑上安装C语言开发环境,如Keil等。
3.打开C语言开发环境,创建一个新的工程。
步骤二:编写程序1.在新建的工程中,打开主程序文件。
2.根据实验要求,编写相应的C语言程序。
3.确保程序逻辑正确,没有语法错误。
步骤三:编译程序1.在C语言开发环境中,点击编译按钮,对程序进行编译。
2.检查编译结果,确保没有出现错误提示。
步骤四:下载程序1.将编译成功的程序下载到C51单片机中。
2.确保下载过程中连接稳定,避免中断导致下载失败。
步骤五:运行程序1.完成程序下载后,断开C51单片机与电脑的连接。
2.将C51单片机连接到相应的电路中。
3.打开电源,启动C51单片机。
4.观察程序的运行情况,检查是否符合预期的结果。
实验结果根据实验要求,我们可以通过观察C51单片机的运行结果来验证程序的正确性。
如果程序实现了预期的功能,且单片机能够正常运行,即可认为实验结果是成功的。
实验总结本次实验通过对C51单片机的学习和实践,我们掌握了单片机的基本原理和使用方法,同时也提升了C语言与单片机的编程技巧。
在实验中,我们遵循了一步一步的思路,从准备工作到编写程序、编译程序、下载程序以及最终的运行程序,每个步骤都有条不紊地进行,确保实验的顺利进行。
通过本次实验,我们深刻认识到了单片机在现代电子技术中的重要性,它广泛应用于各个领域,如家电、汽车、通信等。
掌握单片机的原理和使用方法,对于我们今后的学习和工作都具有重要的意义。
参考资料[1] C51单片机实验指导书[2] C语言与单片机编程教程。
51单片机开发板实例程序
51单片机实验开发板实验程序1.P1口第一个二极管亮#include<reg52.h>void main(){P1=0xfd;}2. P1口第一个二极管闪烁#include<reg52.h>#define unit unsigned int#define uchar unsigned charsbit led1=P1^0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){unit x,y;for(x=100;x>0;x--)for(y=2000;y>0;y--);}3.1602液晶显示器移屏显示字符#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="I LIKE MCU!";uchar code table1[]="";sbit lcden=P3^4;sbit lcdrs=P3^5;sbit dula=P2^6;sbit wela=P2^7;uchar num;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){dula=0;wela=0;lcden=0;write_com(0x38); //设置16x2显示。
c51单片机实验报告
c51单片机实验报告
《C51单片机实验报告》
C51单片机是一种广泛应用于嵌入式系统中的微控制器,具有高性能、低功耗和丰富的外设接口,因此在各种电子设备中得到了广泛的应用。
本次实验将以C51单片机为研究对象,通过实验验证其性能和功能。
实验一:LED灯控制实验
首先,我们将C51单片机与LED灯连接起来,通过程序控制LED灯的亮灭。
实验结果表明,C51单片机可以准确地控制LED灯的亮度和闪烁频率,具有良好的稳定性和可靠性。
实验二:蜂鸣器控制实验
接着,我们将C51单片机与蜂鸣器连接起来,通过程序控制蜂鸣器的发声。
实验结果显示,C51单片机可以精准地控制蜂鸣器的音调和音量,具有较高的音频输出质量。
实验三:温湿度传感器实验
最后,我们将C51单片机与温湿度传感器连接起来,通过程序读取并显示温湿度数值。
实验结果表明,C51单片机可以准确地读取传感器的数据,并通过显示屏输出,具有良好的数据处理能力。
通过以上实验,我们验证了C51单片机在LED灯控制、蜂鸣器控制和温湿度传感器应用方面的性能和功能。
C51单片机具有较高的稳定性、可靠性和可编程性,适用于各种嵌入式系统的设计与开发。
希望本次实验报告能够对C51单片机的应用和研究提供一定的参考价值。
51单片机应用(数码管)实验(汇编)
实验一单片机I/O并口视觉实验(数码管)(仅供参考) 开课学院及实验室:xxxx实验时间: xxxx实验目的1、了解简单单片机应用系统的设计方法。
2、掌握应用KEIL软件编辑、编译源程序的操作方法。
3、掌握应用PROTEUS仿真软件的操作方法。
4、掌握C51的编程方法。
5、培养良好的实验习惯。
实验内容1、AT89S52为主控芯片,用PROTEUS仿真设计简单单片机应用系统。
2、用6个数码管显示学号后4位。
3、使用按键控制学号后四位的加减,步进为34、行列式键盘(选作);时钟(选作)实验原理1、数码管显示(1)实验原理图(2)流程图(个人见解,不知正确)1、实验一:2、实验二:(3)实验程序实验一:ORG 000HMAIN:MOV 30H, #3MOV 31H, #0MOV 32H, #6MOV 33H, #3MOV DPTR,#TABSTART:MOV R0,#30HMOV R1,#0FEHMOV R2,#4LOOP:MOV A,@R0MOVC A,@A+DPTRMOV P2,#0FFHMOV P0,AMOV P2,R1LCALL DELAYINC R0MOV A,R1RL AMOV R1,ADJNZ R2,LOOPSJMP STARTDELAY:MOV R3,#10DJNZ R3,$RETTAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH DB 7DH, 07H, 7FH, 6FH, 76HEND实验二:ORG 0000HAJMP MAINORG 0003HAJMP KEYUPORG 0013HAJMP KEYDOWNMAIN:MOV 30H, #3MOV 31H, #0MOV R7, #63 ;初始化学号MOV DPTR,#TAB ;制表SETB IT0SETB EX0 ;中断0SETB IT1SETB EX1 ;中断1SETB EA ;总中断START:MOV R0,#30HMOV R1,#0FEHMOV R2,#4LOOP:LCALL BREAKMOV A,@R0MOVC A,@A+DPTRMOV P2,#0FFHMOV P0,AMOV P2,R1LCALL DELAYINC R0MOV A,R1RL AMOV R1,ADJNZ R2,LOOPSJMP STARTKEYUP:INC R7CJNE R7,#67,GOMOV R7,#60RETIKEYDOWN:DEC R7CJNE R7,#59,GOMOV R7,#66RETIGO:RETIBREAK:MOV A,R7MOV B,#10DIV ABMOV 33H,BMOV 32H,ARETDELAY:MOV R3,#10DJNZ R3,$RETTAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH DB 7DH, 07H, 7FH, 6FH, 76HEND实验总结1、实验中出现的问题,如何解决2、心得体会。
51单片机实验
51单片机实验1、LED灯闪烁实验2、LED流水灯实验3、无源蜂鸣器实验4、继电器控制实验5、数码管显示实验6、独立按键实验1、LED灯闪烁实验#includevoid Delay(unsigned int i) //延时程序,i是形式参数,i为1时延时约1MS{unsigned int j;for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值for(j=0;j<125;j++) //j由0自增到125 所用的时间大约是1MS{;}}void main() //主函数{P0=0xff; //初始化端口全部置1高电平LED熄灭P1=0xff; //初始化端口全部置1 高电平LED熄灭while(1) //无限循环一直执行以下程序{P0=0x00; //灯亮P1=0x00; //灯亮Delay(500); // 将实际参数500传递给形式参数i,延时500ms 也就是0.5SP0=0xff; //灯灭P1=0xff; //灯灭Delay(500); //将实际参数500传递给形式参数i,延时500ms 也就是0.5S}}2、LED流水灯实验#include函数功能:延时一段时间void Delay(unsigned int i) //延时程序,i是形式参数,i为1时延时约1MS{unsigned int j;for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值for(j=0;j<125;j++){;}}void main(void){P0=0xff;P1=0xff;while(1) //无限循环执行程序{P0=0xfe; //P0第一个灯亮P1=0xfe; //P1第一个灯亮Delay(200); //调用延时函数P0=0xfd; //P0第二个灯亮P1=0xfd; //P1第二个灯亮Delay(200); //调用延时函数P0=0xfb; //P0第三个灯亮P1=0xfb; //P1第三个灯亮Delay(200); //调用延时函数P0=0xf7; //P0第四个灯亮P1=0xf7; //P1第四个灯亮Delay(200); //调用延时函数P0=0xef; //P0第五个灯亮P1=0xef; //P1第五个灯亮Delay(200); //调用延时函数P0=0xdf; //P0第六个灯亮P1=0xdf; //P1第六个灯亮Delay(200); //调用延时函数P0=0xbf; //P0第七个灯亮P1=0xbf; //P1第七个灯亮Delay(200); //调用延时函数P0=0x7f; //P0第八个灯亮P1=0x7f; //P1第八个灯亮Delay(200); //调用延时函数}}3、无源蜂鸣器实验#includesbit BEEP=P3^6; //定义蜂鸣器控制端P36sbit L00=P0^0; //定义L0.0 LED灯void Delayst(unsigned int i) //延时程序,i是形式参数,i 为1时延时约250US{unsigned int j;for(;i>0;i--) /变量i由实际参数传入一个值,因此i不能赋初值for(j=0;j<31;j++) // 此数值为125时大约延时1MS 由此计算出为1时延时大约8US 31X8=248US≈250US {;}}void Delay(unsigned int i) //延时程序,i是形式参数,i为1时延时约1MS{unsigned int j;for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值for(j=0;j<125;j++){;}}void main() //主函数{unsigned int j;while(1) //无限循环一直执行以下程序{L00=0; //点亮L00 LED灯for(j=1000;j>0;j--) //蜂鸣器响大约500MS{BEEP = ~BEEP;Delayst(2); //延时500US 发出大约1KHZ频率的响声}L00=1; //熄灭L00 LED灯BEEP=1; //蜂鸣器不响Delay(500); //将实际参数500传递给形式参数i,延时500ms 也就是0.5S}}4、继电器控制实验#include //包含单片机头文件sbit Reley=P3^7; //定义继电器控制端P37sbit L00=P0^0; //定义L0.0 LED灯sbit K5=P1^4; //定义K5独立按键sbit K6=P1^5; //定义K6独立按键void Delay(unsigned int i) //延时程序,i是形式参数,i为1时延时约1MS{unsigned int j;for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值for(j=0;j<125;j++){;}}void main() //主函数{while(1) //无限循环一直执行以下程序{if(K5==0) //按键K5按下{Delay(20); //延时20MS 按键消抖if(K5==0) //再次确认按键是否按下{L00=0; //点亮L00 LED灯Reley=0; //继电器吸合}}if(K6==0) //按键K6按下{Delay(20); //延时20MS 按键消抖if(K6==0) //再次确认按键是否按下{L00=1; //熄灭L00 LED灯Reley=1; //继电器释放}}}}5、数码管显示实验#include //包含52单片机寄存器定义的头文件void delay(void) //延时函数,延时约0.6毫秒{unsigned char i;for(i=0;i<200;i++); //空循环起延时作用}void main(void){P0=0xff; //初始化端口P2=0xff; //初始化端口while(1) //无限循环//假定数码管从左到右依次是DS0-DS7{P2=0xfe; //P2.0引脚输出低电平,DS0点亮P0=0xf9; //数字1的段码delay();P2=0xfd ; //P2.1引脚输出低电平,DS1点亮P0=0xa4; //数字2的段码delay();P2=0xfb; //P2.2引脚输出低电平,DS2点亮P0=0xb0; //数字3的段码delay();P2=0xf7; //P2.3引脚输出低电平,DS3点亮P0=0x99; //数字4的段码delay();P2=0xef; //P2.4引脚输出低电平,DS4点亮P0=0x92; //数字5的段码delay();P2=0xdf ; //P2.5引脚输出低电平,DS5点亮P0=0x82; //数字6的段码delay();P2=0xbf; //P2.6引脚输出低电平,DS6点亮P0=0xf8; //数字7的段码delay();P2=0x7f; //P2.7引脚输出低电平,DS7点亮P0=0x80; //数字8的段码delay();P2=0xff;}}6、独立按键实验#include#define uchar unsigned char#define uint unsigned int //数据类型的宏定义sbit K1 = P3^2; //定义独立按键K1sbit K2 = P3^3; //定义独立按键K2sbit K3 = P3^4; //定义独立按键K3sbit K4 = P3^5; //定义独立按键K4sbit K5 = P1^4; //定义独立按键K5sbit K6 = P1^5; //定义独立按键K6sbit K7 = P1^6; //定义独立按键K7sbit K8 = P1^7; //定义独立按键K8sbit BEEP = P3^6; //蜂鸣器控制端口P36/* 延时子程序*/void delay1(uchar x){ uchar j;while((x--)!=0){ for(j=0;j<125;j++){;}}}------------------------------------------------- void delay0(uchar x) //x*0.14MS{unsigned char i;while(x--){for (i = 0; i<13; i++) {}}}------------------------------------------------- void delay(uint ms){uchar t;while(ms--){for(t = 0; t < 120; t++);}}-------------------------------------------------void beep() //蜂鸣器响一声函数{unsigned char i;for (i=0;i<100;i++){delay0(4);BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器delay1(250); //延时}-------------------------------------------------main(){P1 = 0xff; //初始化端口P2 = 0x7f; //初始化端口选通数码管最右侧点亮while(1){P0 = 0xbf; //显示“-”if(K1==0){delay(20);if(K1==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0xf9; //显示”1“delay(1000); //延时大约1秒维持显示状态}}else if(K2==0){delay(20); //延时20MS 按键消抖if(K2==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0xa4; //显示”2“delay(1000); //延时大约1秒维持显示状态}}else if(K3==0){delay(20); //延时20MS 按键消抖if(K3==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0xb0; //显示“3”delay(1000); //延时大约1秒维持显示状态}}else if(K4==0){delay(20); //延时20MS 按键消抖if(K4==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0x99; //显示“4”delay(1000); //延时大约1秒维持显示状态}}else if(K5==0){delay(20); //延时20MS 按键消抖if(K5==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0x92; //显示“5”delay(1000); //延时大约1秒维持显示状态}}else if(K6==0){delay(20); //延时20MS 按键消抖if(K6==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0x82; //显示“6”delay(1000); //延时大约1秒维持显示状态}}else if(K7==0){delay(20); //延时20MS 按键消抖if(K7==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0xf8; //显示“7”delay(1000); //延时大约1秒维持显示状态}}else if(K8==0){delay(20); //延时20MS 按键消抖if(K8==0){beep(); //调用蜂鸣器响一声函数告知有按键按下P0 = 0x80; //显示“8”delay(1000); //延时大约1秒维持显示状态}}} }。
51单片机150个例程.zip
51单片机150个例程.zip简介:1-IO输出-点亮1个LED灯方法1"2-IO输出-点亮1个LED灯方法2"3-IO输出-点亮多个LED灯方法1"4-IO输出-点亮多个LED灯方法2"5-闪烁1个LED"6-不同频率闪烁1个LED灯"7-不同频率闪烁多个LED灯"8-8位LED左移"9-8位LED右移"10-LED循环左移"11-LED循环右移"12-查表显示LED灯"13-双灯左移右移闪烁"14-花样灯"15-PWM调光"16-共阳数码管静态显示"17-1个共阳数码管显示变化数字"18-单个数码管模拟水流"19-按键控制单个数码管显示"20-单个数码管指示逻辑电平"21-8位数码管显示其中之一"22-8位数码管静态显示其中之二"23-8位数码管动态扫描显示"24-8位数码管动态扫描原理演示"25-数码管显示动态数据"26-9累加"27-99累加"28-999累加"29-9999累加"30-9累减"31-99累减"32-999累减"33-9999累减"34-显示小数点"35-数码管消隐"36-数码管递加递减带消隐" 37-数码管左移"38-数码管右移"38-数码管右移1"39-数码管右移2"40-数码管循环左移"41-数码管循环右移"41-数码管循环右移1"42-数码管循环右移2"43-数码管闪烁"44-数码管局部闪烁"45-定时器0"46-定时器1"47-定时器2"48-产生1mS方波"49-产生200mS方波"50-产生多路不同频率方波"51-1个独立按键控制LED"52-1个独立按键控制LED状态转换"53-2按键加减操作"53-2按键加减操作数码管显示"54-多位数按键加减(闪烁)"54-多位数按键加减(闪烁)数码管显示" 55-多位数按键加减(不闪烁)"55-多位数按键加减(不闪烁)数码管显示" 56-定时器扫描数码管(不闪烁)"57-按键长按短按效果"58-抢答器"59-独立按键依次输入数据"60-按键从右至左输入"61-8位端口检测8独立按键"62-矩阵键盘行列扫描"63-矩阵键盘反转扫描"64-矩阵键盘中断扫描"65-矩阵键盘密码锁"66-矩阵键盘简易计算器"67-外部中断0电平触发"68-外部中断1电平触发"69-外部中断0下降沿触发"70-外部中断1下降沿触发"71-T0外部计数输入"72-T1外部计数输入"73-看门狗溢出测试"74-按键喂狗"75-喇叭发声原理"76-警车声音"77-救护车声音"78-喇叭滴答声"79-报警发声"80-消防车警报"81-音乐播放"82-步进电机转动原理"83-步进电机正反转"84-步进电机按键控制"85-步进电机转速数码管显示"86-双步进电机综合控制"86-步进电机调速原理"87-双步进电机综合控制"87-步进电机综合控制"87-步进电机调速原理"88-直流电机按键控制"89-直流电机调速控制"90-继电器控制原理"91-双继电器模拟洗衣机电机控制" 92-1602液晶静态显示"93-1602液晶动态显示"94-1602液晶滚动显示"95-1602液晶移动显示"96-1602液晶按键输入显示"97-2402存储1个数据"98-24c02存储多个数据"99-24c02存储花样流水灯"100-24c02记忆开机次数"101-24c02存储上次使用中状态"102-DS1302 时钟原理"103-DS1302可调时钟"104-DS1302时钟串口自动更新时间"105-1602液晶显示DS1302时钟"106-字库ST7920 12864液晶基础显示" 107-按键 12864显示"108-PCF8591 1路AD数码管显示"109-PCF8591 4路AD数码管显示"110-PCF8591 DA输出模拟"111-PCF8591 输出锯齿波"112-PCF8591 1602液晶显示"113-串口通讯"114-串口通讯中断应用"115-RS485基本通讯原理"116-红外接收原理"117-红外解码数码管显示"118-红外解码1602液晶显示"119-红外发射原理"120-红外收发测试"121-双红外发射避障原理测试"122-1个18B20 温度传感器数码管显示" 123-1个18b20温度传感器1602液晶显示" 124-多个18b20温度传感器1602液晶显示" 125-超温报警测试"126-温度可调上下限1602"126-温度可调上下限1602显示"127-PS2键盘输入1602液晶显示"128-双色点阵1种颜色显示测试"129-双色点阵2种颜色显示测试" 130-双色点阵显示特定图形" 131-双色点阵交替图形显示" 132-双色点阵双色交替动态显示" 133-热敏电阻测试数码管显示" 134-光敏电阻测试数码管显示" 135-自动调光测试"136-串转并数字芯片测试"137-非门数字芯片测试"138-电子琴"139-实用99分钟倒计时器" 140-外部频率测试"141-定时做普通时钟可调"142-1602液晶显示的密码锁" 143-实用密码锁"144-1602液晶显示的计算器" 145-秒表"146-串口测温电脑显示"147-交通灯测试"148-点阵模拟电梯上行下行" 149-点阵流动广告模拟"150-综合测试程序"。
51单片机的40个实验(实例介绍)
1.闪烁灯1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#202个机器周期2D1:MOV R7,#2482个机器周期22+2×248=49820×DJNZ R7,$2个机器周期2×248498DJNZ R6,D12个机器周期2×20=4010002因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY:MOV R5,#20D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG0START:CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY:MOV R5,#20;延时子程序,延时0.2秒D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7.C语言源程序#include<AT89X51.H>sbit L1=P1^0;void delay02s(void)//延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}}2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
51单片机实验程序
用查表方式编写y=x13+x23+x33。
(x为0~9的整数)#include<reg51。
h>void main(){int code a[10]={0,1,8,27,64,125,216,343,512,729};//将0~9对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255或-128~+127之间的话就用char,而现在的值明显超过这个范围,用int较合适.int的范围是0~65535或-32768~32767。
int y,x1,x2,x3;//此处定义根据习惯,也可写成char x1,x2,x3但是变量y一定要用int 来定义。
x1=2;x2=4;x3=9;//x1,x2,x3三个的值是自定的,只要是0~9当中的数值皆可,也可重复.y=a[x1]+a[x2]+a[x3];while(1);//单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。
}//结果的查询在Keilvision软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch的框架内双击“double-click or F2 to add”文字输入y后按回车,右侧会显示其16进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10进制数。
1、有10个8位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的数据(1的个数为偶数)都要存到内RAM50H开始的数据区中。
试编写有关程序。
#include〈reg51。
h>void main(){int a[10]={0,1,5,20,24,54,64,88,101,105};//将所要处理的值存入RAM中,这些可以根据个人随意设定,但建议不要超过0~255的范围.char i; //定义一个变量char *q=0x50;//定义一个指针*q指向内部0x50这个地址。
for(i=9;i〉=0;i--)//9~0循环,共十次,也可以用for(i=0;i〈10;i++){ACC=a[i];//将a[i]的值赋给累加器ACCif (P==0)//PSW0位上的奇偶校验位,如果累加器ACC内数值1的个数为偶数那么P为0,若为奇数,P为1。
51单片机例程汇总
51单片机例程汇总.txt性格本身没有好坏,乐观和悲观对这个世界都有贡献,前者发明了飞机,后者发明了降落伞。
本文由wyq贡献pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
实验 11-闪烁灯1. 实验任务如图 4.1.1 所示:在 P1.0 端口上接一个发光二极管 L1,使 L1 在不停地一亮一灭,一亮一灭的时间间隔为 0.2 秒。
2. 电路原理图图 4.1.13. 系统板上硬件连线把“单片机系统”区域中的 P1.0 端口用导线连接到“八路发光二极管指示模块”区域中的 L1 端口上。
4. 程序设计内容(1).延时程序的设计方法1作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图 4.1.1 所示的石英晶体为 12MHz,因此,1 个机器周期为 1 微秒机器周期微秒 MOV R6,#20 2 个机器周期 D1: MOV R7,#248 2 个机器周期 DJNZ R7,$ 2 个机器周期 DJNZ R6,D1 2 个机器周期 2 2 2×248 2×20=40 2+2×248=498 20× 498 10002因此,上面的延时程序时间为 10.002ms。
由以上可知,当 R6=10、R7=248 时,延时5ms,R6=20、R7=248 时,延时 10ms,以此为基本的计时单位。
如本实验要求 0.2 秒=200ms, 10ms×R5=200ms,则 R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制如图 1 所示,当 P1.0 端口输出高电平,即 P1.0=1 时,根据发光二极管的单向导电性可知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0=0 时,发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0 端口输出高电平,使用 CLR P1.0 指令使 P1.0 端口输出低电平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章实验及实践课题
1.闪烁灯
1.实验任务
如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图
图4.1.1
3.系统板上硬件连线
把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容
(1).延时程序的设计方法
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁
时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,
插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体
介绍其原理:
如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒
机器周期微秒
MOV R6,#20 2个 2
D1: MOV R7,#248 2个22+2×248=498 20×DJNZ R7,$ 2个2×248(498
DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,
以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5
=20,延时子程序如下:
DELAY: MOV R5,#20
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
(2).输出控制
如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导
电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,
发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使
用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图
如图4.1.2所示
图4.1.2
6.汇编源程序
ORG 0
START: CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY
LJMP START
DELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
7.C语言源程序
#include <A T89X51.H>
sbit L1=P1^0;
void delay02s(void) //延时0.2秒子程序
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
while(1)
{
L1=0;
delay02s();
L1=1;
delay02s();
}
}。