AT89S51单片机实例35例汇编+C语言对照带电路图及说明-闪烁灯

合集下载

AT89C51三灯间隔一秒闪烁

AT89C51三灯间隔一秒闪烁

1.系统分析本系统对定时器预先进行置数。

将定时器初始值置为15536,这样定时器就会从15536开始计数,当计到65536时,定时器定时就为50ms而产生一个溢出信号。

溢出出20个信号,也即用的时间为1s 之后执行子程序,程序使其中的等取反并且连续循环,从而达到连续闪烁的现象。

2.系统原理图定时/计数器的应用(一)电路图3.程序流程图4.程序ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP,#60HMOV TMOD,#001HMOV TH1,#3CHMOV TL1,#0B0HSETB TROCLR P0.0SETB P0.1SETB P0.2MOV R6,#00HMOV R7,#00HLOOP: JNB TF0,LOOPMOV TH1,#3CHMOV TL1,#0B0HINC R6CLR TF0CJNE R6,#14H,LOOPINC R7CJNE R7,#03H,LOOP1MOV R7,#00HCPL P0.0CPL P0.2AJMP MAINLOOP1: MOV R6,#00HCJNE R7,#02H,LOOP3LOOP2:MOV R6,#00HCPL P0.1CPL P0.2AJMP LOOPLOOP3: CPL P0.0CPL P0.1AJMP LOOPEND5.调试与仿真打开Keil程序,执行菜单命令“Project”“New project”创建“定时/计数器的应用(二)”项目,并选择单片机型号为A T89C51。

执行菜单命令“File”“New”创建文件,输入汇编源程序,保存为“定时计数器的应用(二).ASM”。

在Project栏的File项目管理窗口中右击文件组,选择“Add File to Group …source Group1‟,将源程序“定时计数器的应用(二).ASM”添加到项目中。

执行菜单命令“Project”“Option for Target‟Target1‟”, 在弹出的对话框中选择“Output”选项卡,选中“Create HEX file”。

运用AT89C51使LED 灯闪烁

运用AT89C51使LED 灯闪烁

运用AT89C51使LED 灯闪烁1. 概述本文档将介绍如何使用AT89C51微控制器来控制LED灯的闪烁。

AT89C51是一种高性能、低功耗的8位单片机,具备丰富的GPIO(通用输入输出)引脚,适合用于各种嵌入式应用中。

2. 硬件准备在开始编程之前,我们需要准备以下硬件设备:•AT89C51单片机开发板•LED灯•220欧姆电阻(用于限流)3. 连接电路在连接电路之前,确保开发板和所需的元件处于关机状态。

按照以下步骤连接电路:1.连接LED灯的长脚(阳极)到AT89C51的P1.0引脚。

2.连接LED灯的短脚(阴极)通过220欧姆电阻接地。

确保连接正确后,即可准备开始编程。

4. 编程以下是使用AT89C51使LED灯闪烁的示例程序:#include <REG51.h>#define LED P1_0 // 定义LED控制引脚为P1.0void delay(int milliseconds){int i, j;for (i = 0; i < milliseconds; i++)for (j = 0; j < 120; j++);}void main(){while (1){LED = 1; // 将LED引脚置高,点亮LEDdelay(1000); // 延时1秒LED = 0; // 将LED引脚置低,熄灭LEDdelay(1000); // 延时1秒}}在上面的示例代码中,我们使用P1.0引脚来控制LED灯的开关。

程序使用了一个简单的延时函数delay来实现LED灯的闪烁效果。

当LED引脚置高时,LED 灯亮起;当LED引脚置低时,LED灯熄灭。

通过在LED灯亮起和熄灭之间加入适当的延时,我们可以实现LED灯的闪烁效果。

5. 下载程序在编程完成后,我们需要将程序下载到AT89C51单片机中。

以下是下载程序的步骤:1.将AT89C51单片机开发板连接到电脑的USB口或串口上。

keilproteus仿真AT89C51单片机点亮一个灯泡并让灯泡不停闪烁

keilproteus仿真AT89C51单片机点亮一个灯泡并让灯泡不停闪烁

keilproteus仿真AT89C51单片机点亮一个灯泡并让灯泡不停闪烁用单片机点亮一个灯泡并让灯泡不停闪烁,这几乎是单片机的入门课程了。

网上有很多图文并茂的资料把这个步骤写得很详细,我就不再画蛇添足了,有兴趣的同学请在网上搜索,很easy.最近在看计算机组成原理,对电路略有兴趣,捡起多年前玩过的东东,呵呵,宝刀不老, 我还能记清楚自己当时点亮一个灯泡并让灯泡不停闪烁的那种激动的心情。

虽然现在工作完全用不到了,但兴趣犹在。

先让单片机点亮一个灯泡,不需要程序,只用proteus即可:下面来用keil c写程序,并把生成的hex文件导入到proteus的单片机中, keil c 界面如下:程序如下:1.#include<reg51.h>2.3.sbit P1_3 = P1^3;4.5.void delay(int n)6.{7.int i = 0;8.int j = 0;9.for(i = n; i > 0; i--)10.{11.for(j = 110; j > 0; j--)12.{13.;14.}15.}16.}17.18.void main()19.{20.int i = 0;21.while(1)22.{23.P1_3 = (i++ % 2)? 0 : 1 ;24.delay(200);25.}26.}生成hex文件,导入到单片机中,运行,灯泡不停闪烁,很简单,但挺有意思的:有点意思。

对了,要说明的是,图中的电源是没有画出的,实际上肯定有电源。

AT89S51单片机控制红、绿、黄交通灯亮及闪烁时间与顺序。

AT89S51单片机控制红、绿、黄交通灯亮及闪烁时间与顺序。

桂林电子科技大学微机单片机接口设计报告指导老师:吴兆华学生:冯贤明学号: 092011133桂林电子科技大学机电工程学院一设计题目 (1)二设计目的要求和意义 (1)2.1设计目的要求 (1)2.2 系统设计意义 (1)三系统硬件电路图设计 (2)3.1 系统结构框图 (2)3.2 系统硬件电路图 (2)3.3 电路设计PCB图 (3)四程序流程图与源代码 (4)4.1 程序流程图 (4)4.2 程序源代码 (4)五系统功能分析与说明 (5)5.1 微处理器 (5)5.2 复位电路的设计 (9)5.3 二极管输出电路 (9)5.4 晶振电路 (10)5.5 制作PCB图 (10)六设计体会 (12)七参考文献 (13)一设计题目按桂林市微笑堂十字街的交通规则用AT89S51单片机控制红、绿、黄交通灯亮及闪烁时间与顺序。

二设计目的要求和意义2.1设计目的要求1通过单片机最小系统的设计,了解常用单片机应用系统开发手段和过程,进一步熟悉和掌握单片机的结构和工作原理,并能初步掌握一般单片机控制系统的编程和应用,从而进一步加深对单片机理论知识的理解。

2 掌握单片机内部功能模块。

如定时器/计数器、中断系统、存储器、I/O口等;3 掌握单片机的接口及相关外围芯片的特性、使用与控制方法;4 掌握单片机的编程方法,调试方法;5 掌握单片机应用系统的构建和使用,为以后设计和实现单片机应用系统打下良好的基础。

6.学会使用并熟练掌握电路绘制软件Protel99SE(或DXP);7.掌握电路图绘制及PCB图布线技巧。

2.2 系统设计意义1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。

2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。

3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。

4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。

at89c51led闪烁实验汇编语言

at89c51led闪烁实验汇编语言

at89c51led闪烁实验汇编语言1. 简介at89c51是一种经典的单片机芯片,被广泛应用于各种嵌入式系统中。

其中,led闪烁实验是单片机入门的必备实验之一,通过这个实验可以初步了解单片机的基本工作原理和汇编语言的编程方法。

2. 实验原理在at89c51单片机中,led是一种常用的输出设备,可以通过控制引脚的高低电平来实现闪烁效果。

通过学习汇编语言的编程方法,我们可以编写程序控制led引脚的状态,从而实现led的闪烁操作。

3. 实验步骤第一步:搭建硬件实验评台,将at89c51单片机与led灯连接。

第二步:编写汇编语言程序,通过设置端口的高低电平来实现led的闪烁效果。

第三步:将编写好的程序下载到at89c51单片机中,进行调试和验证。

4. 实验代码下面是一个简单的at89c51led闪烁实验的汇编语言程序:```assemblyorg 0h ; 程序从位置区域0开始执行mov P1, #0FFh ; 设置P1端口为输出loop:mov P1, #00h ; 将P1端口输出低电平acall delay ; 调用延时程序mov P1, #0FFh ; 将P1端口输出高电平acall delay ; 调用延时程序sjmp loop ; 无条件跳转至loop标号处delay:mov R1, #0Ah ; 设置延时计数值delay1:mov R2, #0FFh ; 设置内部计数值delay2:djnz R2, delay2 ; 内部计数减1djnz R1, delay1 ; 延时计数减1ret ; 返回end ; 程序结束```在这个程序中,我们首先设置P1端口为输出,并在一个循环中不断地将P1端口输出高低电平,通过调用延时程序来实现led的闪烁效果。

5. 实验总结通过这个实验,我们初步了解了at89c51单片机的基本工作原理和汇编语言的编程方法。

在以后的学习中,我们可以通过不断地深入实践和学习,掌握更多单片机和汇编语言的知识,从而实现更加复杂的功能和应用。

闪烁灯仿真 原理图与程序(汇编+C语言)

闪烁灯仿真 原理图与程序(汇编+C语言)

1闪烁灯仿真(入门级实验)实验介绍:这个实验应该是单片机相关课程的第一个实验,该实验电路简单,学生易于理解。

直接通过单片机的I/O 引脚控制单个LED 灯就可以实现实验效果。

实验控制程序简单,只涉及单片机I/O 引脚的电平的控制,属于单片机编程初学者入门级实验。

学生学习该实验一方面可以了解单片机的基本功能,当学生点亮了LED 灯时,可以在一定程度上可以激发学生的学习兴趣。

另一方面可以为后续的流水灯实验、数码管实验等简单的单片机输出控制实验打好基础。

实验目的:单个闪烁灯实验的主要目的是使学生了解单片机I/O 口的输出功能。

熟悉单片机程序的编写以及下载过程。

熟悉汇编语言子程序以及C 语言子函数的调用方法。

仿真原理图:通过开发板、电子元件或者仿真软件搭建电路图如下图所示。

实验注意事项:1.注意所用“灯”的极性。

在实验室实验或仿真软件仿真时,一般情况下使用发光二级作为输出设备。

因此在连接电路的时候,一定注意极性否则无法点亮。

2.在进行实物实验时,还要根据单片机引脚的特点,进行LED小灯的驱动电路的连接。

由于单片机引脚的灌电流能力比拉电流能力强,因此建议将LED 小灯的负极连接至单片机引脚,如上图所示。

3.在仿真软件Proteus中绘制仿真原理图如上图所示。

LED串联的电阻R2不可过大,如果过大,它上面分压过多,LED将无法被点亮。

根据上述电路图,编写控制程序如下:汇编语言代码:ORG 0HJMP MAINORG 30HMAIN:CLR P2.0CALL DELAYSETB P2.0CALL DELAYJMP MAINDELAY:MOV R2,#20X2:MOV R3,#20X1:MOV R4,#250DJNZ R4,$DJNZ R3,X1DJNZ R2,X2RETENDC语言代码:#include <reg52.h>#include <intrins.h>sbit P20=P2^0;delay(){ unsigned int i,j;for(i=0;i<100;i++)for(j=0;j<1000;j++)_nop_;}main(){while (1)2{P20=1;delay();P20=0;delay();}}在编写程序时注意,要掌握好延时程序(汇编语言中的DELAY子程序以及C语言中的delay()子函数)的延时长度。

51单片机仿真100实例

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)for(i=0;i<7;i++){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此后变红灯,东西向变绿灯,如此重复。

AT89S51单片机的教室灯光智能控制系统设计8981536

AT89S51单片机的教室灯光智能控制系统设计8981536

AT89S51单片机的教室灯光智能控制系统设计8981536(此文档为word格式,下载后您可任意编辑修改!)摘要本课题针对教室灯光的控制,分析了教室灯光智能控制的原理和实现方法,提出了基于单片机设计教室灯光智能控制系统的思路,并在此基础上开发了智能控制系统的硬件模块和相应软件部分。

该系统以AT89S51单片机作为控制模块的核心部件,采用热释红外人体传感器检测人体的存在,采用光敏三极管构成的电路检测环境光的强度;根据教室合理开灯的条件,通过对人体存在信号和环境光信号的识别与判断,完成对教室灯光的智能控制,避免了教室用电的大量浪费。

系统还具有报警功能;同时还采用了软/硬件的“看门狗”等抗干扰措施。

本系统程序部分采用C语言编写,采用模块化结构设计、条理清晰、通用性好,便于改进和扩充。

该系统具有体积小,控制方便,可靠性高,针对性强,性价比高等优点,可以满足各类院校对教室灯光控制的要求,很大程度的达到节能目的。

关键词:智能控制器热释红外传感器单片机引言当前,随着经济的飞速发展,能源短缺问题日益突出,成为一个国家经济发展的“瓶颈”。

作为工业生产和人民生活不可或缺的电力能源更是如此。

尤其现今越来越提倡低碳生活,节约能源已经成为一种全球共识,而作为培养社会精英的高校更应该起到榜样的作用。

但是目前在校园内,教室灯火通明,却空无一人的现象屡见不鲜,这不仅造成了严重的资源浪费,也对高校的形象造成了很坏的影响。

本文所研究的教室灯光控制系统就可以很好地实现节约能源的作用。

1 系统硬件组成整个系统由中央控制电路、2×4按键电路、光敏传感电路、继电器驱动电路、时钟电路、液晶显示电路六个模块组成。

其中,光敏传感电路模块主要完成对教室当前光线明暗程度的判定,时钟电路主要实现时基功能,两者分别提供光照和定时数据供以单片机为核心的中央控制模块进行逻辑判断,单片机最终将运算结果输出到液晶显示屏,同时对教室灯光进行控制。

整个系统的硬件框图如图1所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个 2 2+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 <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();
}。

相关文档
最新文档