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所示。

at89c51单片机_交通灯控制系统(包括源码and仿真图)

at89c51单片机_交通灯控制系统(包括源码and仿真图)

设计任务书设计要求和技术指标1、技术指标:设计一个十字路口的交通灯控制电路,每条道路上各配有一组红、黄、绿交通信号灯,其中红灯亮,表示该道路禁止通行;黄灯亮表示该道路上未过停车线的车辆禁止通行,已过停车线的车辆继续通行;绿灯表示该道路允许通行。

该电路自动控制十字路口两组红、黄、绿交通灯的状态转换,实现十字路口自动化。

2、设计要求(1)要求甲车道和乙车道上的车辆交替运行,每秒通行时间为25秒种;(2)要求黄灯先亮5秒种,才能变换车道;(3)黄灯亮时要求每秒闪亮一次;(4)要求绘出原理图,并用Protel画出印制板图;(5)根据设计要求和技术指标设计好电路,选好元件及参数;(6)拟定测试方案和设计步骤;(7)写出设计性报告。

录` 目一、项目名称................................................................................. 错误!未定义书签。

二、选题背景 (2)2.1 课题背景 (2)2.2 交通灯的历史 (2)三、单片机简介 (3)3.1 单片机的发展历程 (3)3.2 单片机的特点: (4)3.3 AT89C51单片机简介 (4)四、设计基本要求和步骤 (6)4.1 基本要求 (6)4.2 设计步骤 (7)五、硬件和软件设计 (7)5.1 硬件电路图 (7)5.2 程序流程图 (9)主程序 (9)运行过程 (10)LED显示程序 (11)T0中断 (12)INT0中断 (12)5.3 P0、P1口显示状态编码表 (13)5.4 程序源代码 (13)5.5 程序运行效果图 (18)六、心得体会 (20)七、参考文献 (21)摘要本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。

系统包括人行道、左转、右转、以及基本的交通灯的功能。

系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间、违规车辆检测以及根据具体情况手动控制等功能。

AT89S51单片机实例35例汇编+C语言对照带电图及说明-模拟开关灯24

AT89S51单片机实例35例汇编+C语言对照带电图及说明-模拟开关灯24

2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。

2.电路原理图图4.2.13.系统板上硬件连线(1).把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;(2).把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;4.程序设计内容(1).开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。

单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。

(2).输出控制如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。

5.程序框图图4.2.26.汇编源程序 ORG 00HSTART: JB P3.0,LIGCLR P1.0SJMP STARTLIG: SETB P1.0SJMP STARTEND7. C语言源程序#include <AT89X51.H>sbit K1=P3^0;sbit L1=P1^0;void main(void){while(1){if(K1==0){L1=0; //灯亮}else{L1=1; //灯灭}}}。

51单片机C语言实验及实践教程1

51单片机C语言实验及实践教程1

51单片机C语言实验及实践教程第一章:硬件资源模块第二章:keil c 软件使用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅1.闪烁灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅2.模拟开关灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅3.多路开关状态指示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅4.广告灯的左移右移at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅5.广告灯(利用取表方式)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅6.报警产生器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅7.I/O并行口直接驱动LED显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅8.按键识别方法之一at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅9.一键多功能按键识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅10.00-99计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅11.00-59秒计时器(利用软件延时)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅12.可预置可逆4位计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅13.动态数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅14.4×4矩阵式键盘识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅15.定时计数器T0作定时应用技术(一)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅16.定时计数器T0作定时应用技术(二)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅17.99秒马表设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅18.“嘀、嘀、……”报警声at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅19.“叮咚”门铃at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅20.数字钟(★)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅21.拉幕式数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅22.电子琴at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅23.模拟计算器数字输入及显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅24.8×8LED点阵显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅25.点阵LED“0-9”数字显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅26.点阵式LED简单图形显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅27.ADC0809 A/D转换器基本应用技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅28.数字电压表at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅29.两点间温度控制at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅30.四位数数字温度计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅31.6位数显频率计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅32.电子密码锁设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅33.4×4键盘及8位数码管显示构成的电子密码锁at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅34.带有存储器功能的数字温度计-DS1624技术应用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅35DS18B20数字温度计使用第一章AT89S51单片机实验及实践系统板简介AT89S51单片机实验及实践系统板(以后简介系统板)集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者及单片机开发者提供不同的开发环境。

第4章 AT89S51单片机汇编 语言程序设计

第4章  AT89S51单片机汇编 语言程序设计

4.1.2 汇编语言语句和格式
两种基本语句:指令语句和伪指令语句。
8
8
(1)指令语句 已在第3章介绍。每一指令语句在汇编时都产生一个指令代码
(机器代码),执行该指令代码对应着机器的一种操作。
(2)伪指令语句 是控制汇编(翻译)过程的一些控制命令。在汇编时没有机 器代码与之对应。 下面介绍指令语句格式。伪指令语句将在4.1.3节介绍。
单片机原理及应用
第4章 AT89S51单片机汇编 语言程序设计
1
第4章 AT89S51的汇编语言程序设计
4.1 汇编语言程序设计概述
4.2 汇编语言源程序的汇编 4.3 AT89S51汇编语言程序设计举例
2
内容概要
汇编语言能直接控制单片机硬件的编程语言。
因此,要求程序设计者要 “软、硬结合” 。
号、条件汇编、分配存储空间等功能。
16
16
不同汇编语言的伪指令有所不同,但基本内容相同。
介绍常用的伪指令。 1.ORG(ORiGin)汇编起始地址命令 源程序的开始,用一条ORG伪指令规定程序的起始地 址。如果不用ORG,则汇编得到的目标程序将从0000H地
址开始。例如:
ORG START: MOV 2000H A,#00H
(5)子程序可以嵌套,即主程序可以调用子程序,子程序
又可以调用另外的子程序。
29
29
2.子程序的基本结构
MAIN: …… …… LCALL …… …… 子程序 SUB:
子程序的嵌套
典型的子程序的基本结构如下:
;MAIN为主程序入口标号
SUB
;调用子程序SUB
PUSH PSW ;现场保护 PUSH Acc 子程序处理程序段

交通灯C实现--AT89S51单片机--红黄绿灯

交通灯C实现--AT89S51单片机--红黄绿灯

交通灯C语言实现单片机:AT89C51#include<reg52.h>#define uchar unsigned char#define ON 1#define OFF 0sbit NSG=P2^5; //南北绿灯sbit NSY=P2^4; //南北黄灯sbit NSR=P2^3; //南北红灯sbit EWG=P2^2; //东西绿灯sbit EWY=P2^1; //东西黄灯sbit EWR=P2^0; //东西红灯sbit LED_D=P3^7; //南北数码管sbit LED_C=P3^6;sbit LED_B=P3^1; //东西数码管sbit LED_A=P3^0;/*===============倒计时=========================*/uchar EWF=15,NSF=12,X=15,Y=27,Z=30,SHU=30;uchar count;void InitialT1(void){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;}//中断void ISRT1(void) interrupt 1{TMOD=0x01;TH0=(65536-50000)/256; //重装初值TL0=(65536-50000)%256;EA=1;TR0=1;ET0=1;count++;if(count>19) //定时到了1秒{EWF--;NSF--;X--;Y--;Z--;SHU--;count=0;}}/*=================延时=======================*/void Delay10uS(uchar second){uchar x,y;for(x=second;x>0;x--)for(y=110;y>0;y--);}/*==================led控制========================*/ uchar discode[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void display1(uchar num1,uchar num2) //东西方向{P0=discode[num1]; LED_A=ON; Delay10uS(1); LED_A=OFF;P0=discode[num2]; LED_B=ON; Delay10uS(1); LED_B=OFF;}void display2(uchar num3,uchar num4) //南北方向{P0=discode[num3]; LED_C=ON; Delay10uS(1); LED_C=OFF;P0=discode[num4]; LED_D=ON; Delay10uS(1); LED_D=OFF;}main(){int i;/*=============初始状态:东西南北都红灯==================*/ NSR=ON; //南北红灯开NSY=OFF;NSG=OFF;EWR=ON; //东西红灯开EWY=OFF;EWG=OFF;for(i=0;i<500;i++) //~=1s{Delay10uS(20);}NSR=OFF; //南北红灯关EWR=OFF; //东西红灯关while(1){InitialT1(); // 初始化计时器/*=============状态1:东西绿灯(12s) 南北红灯(15s)==================*/ /*=============状态2:东西黄灯(3s) 南北红灯(15s)=================*/ EWG=ON; //东西绿灯开NSR=ON; //南北红灯开while(EWF!=0){display2(EWF/10,EWF%10);// 南北红灯(15s)display1(NSF/10,NSF%10);// 东西绿灯(12s)while(EWF==3){while(X!=0){display2(EWF/10,EWF%10);// 南北红灯(3s)display1(X/10,X%10);// 东西黄灯(3s)EWG=OFF; // 东西绿灯关EWY=ON; //东西黄灯开}}}NSR=OFF; //南北红灯关EWG=OFF; //东西绿灯关EWY=OFF; //东西黄灯关/*=============状态3:东西红灯(15s) 南北绿灯(12s)==================*/ /*=============状态4:东西红灯(15s) 南北黄灯(3s)==================*/ EWR=ON; //东西红灯开NSG=ON; //南北绿灯开while(Z!=0){display1(Z/10,Z%10);// 东西红灯(15s)display2(Y/10,Y%10);// 南北绿灯(12s)while(Z==3){while(SHU!=0){display2(Z/10,Z%10);// 东西红灯(3s)display1(SHU/10,SHU%10);// 南北绿灯(3s)NSG=OFF; //南北绿灯关NSY=ON; //南北黄灯开}}}EWR=OFF; //东西红灯关NSG=OFF; //南北绿灯关NSY=OFF; //南北黄灯关/*=====================重新赋值===============================*/EWF=15,NSF=12,X=15,Y=27,Z=30,SHU=30;}}。

AT89S51单片机实例35例汇编+C语言对照带电说明-两点间温度控制93

AT89S51单片机实例35例汇编+C语言对照带电说明-两点间温度控制93

29.两点间温度控制1.实验任务用可调电阻调节电压值作为模拟温度的输入量,当温度低于30℃时,发出长嘀报警声和光报警,当温度高于60℃时,发出短嘀报警声和光报警。

测量的温度范围在0-99℃。

2.电路原理图图4.29.13.系统板上硬件连线a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。

b) 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。

c) 把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。

d) 把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。

e) 把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。

f) 把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。

g) 把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。

h) 把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。

i) 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。

j) 把“单片机系统”区域中的P3.6、P3.7用导线分别连接到“八路发光二极管指示模块”区域中的L1、L2上。

k) 把“单片机系统”区域中的P3.5用导线连接到“音频放大模块”区域中的SPK IN端口上。

l) 把“音频放大模块“区域中的SPK OUT插入音频喇叭。

4.汇编源程序(略)5.C语言源程序#include <AT89X52.H>unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};unsigned char dispbuf[8]={10,10,10,10,10,10,0,0};unsigned char dispcount;unsigned char getdata;unsigned int temp;unsigned char i;sbit ST=P3^0;sbit OE=P3^1;sbit EOC=P3^2;sbit CLK=P3^3;sbit LED1=P3^6;sbit LED2=P3^7;sbit SPK=P3^5;bit lowflag;bit highflag;unsigned **ta;unsigned **tb;bit alarmflag;void main(void){ST=0;OE=0;TMOD=0x12;TH0=0x216;TL0=0x216;TH1=(65536-500)/256;TL1=(65536-500)%256;TR1=1;TR0=1;ET0=1;ET1=1;EA=1;ST=1;ST=0;while(1){if((lowflag==1) &&(highflag==0)){LED1=0;LED2=1;}else if((highflag==1) && (lowflag==0)) {LED1=1;LED2=0;}else{LED1=1;LED2=1;}}}void t0(void) interrupt 1 using 0 {CLK=~CLK;}void t1(void) interrupt 3 using 0 {TH1=(65536-500)/256;TL1=(65536-500)%256;if(EOC==1){OE=1;getdata=P0;OE=0;temp=getdata*25;temp=temp/64;i=6;dispbuf[0]=10;dispbuf[1]=10;dispbuf[2]=10;dispbuf[3]=10;dispbuf[4]=10;dispbuf[5]=10;dispbuf[6]=0;dispbuf[7]=0;while(temp/10){dispbuf[i]=temp%10;temp=temp/10;i++;}dispbuf[i]=temp;if(getdata<77){lowflag=1;highflag=0;}else if(getdata>153){lowflag=0;highflag=1;}else{lowflag=0;highflag=0;}ST=1;ST=0;}P1=dispcode[dispbuf[dispcount]];P2=dispbitcode[dispcount];dispcount++;if(dispcount==8){dispcount=0;}if((lowflag==1) && (highflag==0)){cnta++;if(cnta==800){cnta=0;alarmflag=~alarmflag;}if(alarmflag==1){SPK=~SPK;}}else if((lowflag==0) && (highflag==1)) {cntb++;if(cntb==400){cntb=0;alarmflag=~alarmflag; }if(alarmflag==1){SPK=~SPK;}}else{alarmflag=0;cnta=0;cntb=0;}}。

  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();
}。

相关文档
最新文档