单片机实例之跑马灯

合集下载

51单片机8个跑马灯程序汇编设计思路

51单片机8个跑马灯程序汇编设计思路

【51单片机8个跑马灯程序汇编设计思路】1. 引言在嵌入式系统中,跑马灯程序是一个非常常见且基础的程序设计。

通过控制LED灯的亮灭顺序,实现灯光在一组灯中顺序轮流亮起的效果。

其中,51单片机是一种常用的嵌入式系统开发评台,本文将探讨如何通过汇编语言设计实现8个跑马灯程序的思路和方法。

2. 分析题目我们需要对题目进行细致的分析。

51单片机8个跑马灯程序要求我们设计并实现一个程序,能够控制8个LED灯依次轮流亮起的效果。

这意味着我们需要对LED灯进行控制,并且需要考虑如何实现循环、延时等功能。

3. LED灯控制在实现跑马灯程序时,首先需要考虑如何控制LED灯的亮灭。

一种常见的方法是通过I/O口控制LED灯的高低电平,从而实现灯的亮灭。

我们需要了解51单片机的I/O口控制方式,并结合LED灯的连接方式进行设计。

4. 循环控制跑马灯程序的核心在于实现LED灯的依次轮流亮起。

这就需要我们设计循环控制的程序结构。

在汇编语言中,可以通过跳转指令和计数器来实现循环效果,我们需要考虑如何设计循环的次数和顺序。

5. 延时控制为了让人眼能够观察到LED灯的亮灭效果,我们需要在程序中添加延时控制。

这需要我们了解51单片机的定时器控制和时钟频率,并根据LED灯的亮度要求设计合适的延时程序。

6. 汇编设计思路在进行汇编设计时,可以按照以下步骤进行:1)设置I/O口控制LED灯的引脚,确定LED的连接方式;2)设计循环控制结构,确定LED灯的顺序和次数;3)添加延时程序,控制LED灯亮灭的时间间隔;4)编写中断程序,处理定时器中断等事件;5)调试程序,验证跑马灯效果是否符合要求。

7. 个人观点和理解通过设计这个跑马灯程序,我深切体会到了汇编语言的精妙之处。

通过对硬件的直接控制和对程序结构的精心设计,我感受到了嵌入式系统开发中的乐趣和挑战。

而对于初学者来说,设计跑马灯程序也是一个很好的学习过程,可以加深对于51单片机结构和编程思想的理解。

iar编写stm8跑马灯

iar编写stm8跑马灯

iar编写stm8跑马灯一、介绍STM8跑马灯的背景和意义STM8是一款高性能、低成本的微控制器,广泛应用于各种嵌入式系统中。

跑马灯是一种常见的显示效果,通过STM8实现跑马灯不仅可以展示微控制器的性能,还能为各种应用场景增添趣味性。

本文将详细介绍如何使用STM8编写跑马灯程序,并分享一些实用技巧。

二、硬件电路设计要点1.选择合适的LED灯珠:根据需求选择合适的LED灯珠,如颜色、亮度、间距等。

2.驱动电路:选用合适的驱动电路,如MOSFET、驱动IC等,以满足LED灯珠的电流需求。

3.连接方式:将LED灯珠正确连接到STM8的GPIO端口。

4.电阻配置:根据LED灯珠的电压和电流要求,合理配置限流电阻。

三、软件编程思路与实现1.初始化GPIO:配置GPIO端口为输出模式,设置初始状态。

2.编写主循环:在主循环中,通过移位或循环移位的方式,切换GPIO端口的输出状态。

3.定时器配置:根据需求设置定时器,实现跑马灯的的速度控制。

4.循环次数与速度调整:根据实际效果调整循环次数和速度,以达到最佳效果。

5.优化:根据实际情况,优化程序,提高运行效率和稳定性。

四、调试与优化1.硬件调试:通过观察LED灯珠的显示效果,检查硬件连接和驱动电路是否正确。

2.软件调试:使用串口或其他调试工具,观察程序运行状态,查找问题。

3.优化:根据实际需求和性能指标,对程序进行优化,提高运行效率和稳定性。

五、总结与展望本文详细介绍了如何使用STM8编写跑马灯程序,通过硬件电路设计和软件编程实现了一款趣味性十足的跑马灯。

在实际应用中,可以根据需求调整LED灯珠、驱动电路和程序,实现更多种跑马灯效果。

单片机 跑马灯实验

单片机 跑马灯实验
}
void hold(){
n=8;
while(1){
if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯
oldK=K[4];
if(n==-1)n=7;//D0灯亮后点亮D7
while(n>=0){
out=D[n];
n--;
if(delay4(15))break;
}
}
if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯
void hold(){
n=8;
while(1){
if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯
oldK=K[4];
if(n==-1)n=7;//D0灯亮后点亮D7
while(n>=0){
out=D[n];
n--;
if(delay4(15))break;
}
}
if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯
图43键控的流水灯
五、实验思考题
1、采用I/O口作为输出口时要考虑哪些因素?为什么实验装置中LED要串联一个电阻?
当作为输出口时候就是单片机向外发出数据,或者再产生拉电流,单片机的拉电流一般要比灌电流小,基本上就能点亮2,3个LED,功率很有限,所以一般时候必须用驱动芯片来驱动单片机的外围器件。串联电阻是为了保护电路。
while(1){//开机即正序点亮流水灯
forward();
if(P2!=K[0]){
break;
}
}
while(1){
out=AllOff;
if((P2&0x0f)!=0x0f){//检测有键按下
delay10ms();//延时10ms再去检测

51单片机8个跑马灯程序设计思路

51单片机8个跑马灯程序设计思路

51单片机8个跑马灯程序设计思路单片机是一种集成电路,内部包含了计算机的主要组件,如中央处理单元(CPU)、存储器等。

通过编程,可以实现各种不同的功能。

在这里,我将以设计一个8个跑马灯的程序为例,来讲解单片机程序的设计思路。

1.硬件准备首先,我们需要准备一个适用于单片机的开发板,例如STC89C52,以及8个LED灯。

将LED灯连接到开发板的GPIO引脚上,并通过电阻进行限流。

使用跳线将GPIO引脚与LED灯的正极连接。

2.程序结构设计在单片机程序中,我们通常会使用循环结构。

因此,在设计跑马灯程序时,我们可以使用一个无限循环,来实现LED灯的闪烁效果。

具体的程序结构如下所示:```c#include <reg52.h>sbit led0 = P0 ^ 0; //第1个LED灯sbit led1 = P0 ^ 1; //第2个LED灯sbit led2 = P0 ^ 2; //第3个LED灯//...sbit led7 = P0 ^ 7; //第8个LED灯void mainwhile (1)//跑马灯代码}}```在这段代码中,我们首先引入头文件`reg52.h`,它包含了STC89C52的寄存器定义和常用函数的声明。

然后,我们定义了8个宏,用于表示8个LED灯所连接的引脚号。

接下来,在`main(`函数中,我们使用一个无限循环`while(1)`,来实现LED灯的闪烁效果。

3.跑马灯实现思路在无限循环中,我们需要通过对GPIO的控制来实现8个LED灯的闪烁。

具体的实现思路如下:- 首先,我们可以定义一个变量`index`,用于表示当前亮起的LED灯的索引值。

初始时,`index`的值为0,表示第一个LED灯亮起。

- 然后,我们可以使用`switch...case`语句来判断当前的`index`值,从而控制不同的LED灯亮起。

- 在每次循环中,我们可以通过对`index`的递增来实现灯的滚动效果。

单片机 跑马灯实验精选全文

单片机 跑马灯实验精选全文

可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。

每点亮一个LED,采用软件延时一段时间。

2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。

松手后,又按正序点亮流水灯。

3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。

按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。

二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。

所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。

低电平有效输出:P0.0~P0.7-D0~D7。

LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。

按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。

为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。

主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。

单片机内部结构测试报告-跑马灯

单片机内部结构测试报告-跑马灯

单片机内部结构测试报告姓名:苏汉生班别:09机械1班学号:0915020045指导老师:庞志目录1.跑马灯实验12.跑马灯实验23.跑马灯实验34.按键实验、蜂鸣器5.定时器数码管显示6.看门狗实验7.AD数模转换实验程序运行分析一、跑马灯实验11.测试程序名称:跑马灯实验12.程序功能介绍:跑马灯1的程序功能主要是控制LED灯闪亮的顺序,使八个LED灯按照程序设定闪亮。

但对按键和其他元件不起任何控制作用。

3.程序相关的电路图:8位流水灯电路4.程序总体(主函数)流程图:5(1)(3)1ms延时函数:(4)N ms掩饰函数:6.程序涉及的技术解析:unsigned charLED_table[]={0xFE,0x00,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF ,0x7F,0xFF,0x00,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0 xFF,0x00,0xFF,0x7E,0xBD,0xDB,0xE7,0xFF,0x00,0xE7,0xDB,0xBD,0x7 E,0xFF,0x00};上述这个语句用到了一维数组,命名为LED_table,该数组一共有37个元素,每一个元素是一个十六进制的数,这些十六进制的数代表着开发板上的LED灯闪亮的规律(输出1为不亮,输出0为亮)。

PORTA = 0xFF;DDRA = 0xFF;DDRE=0XFF;PORTE=0XFF;上述语句是I/O口(端口A寄存器)的初始化,A口的8个脚控制开发板上的8个LED灯。

初始化A口设置为输出,8个引脚分别为1111 1111,LED等为全灭的状态。

单片机与LED灯之间连接了一个74HC573八进制3态非反转透明锁存器,E口2脚接在74HC573锁存器的使能端。

当锁存使能端为高电平1时,锁存对于数据是透明的(也就是说输出同步);当锁存使能端为低电平0时,符合建立时间和保持时间的数据会被锁存。

最新单片机实例之跑马灯专业知识讲座

最新单片机实例之跑马灯专业知识讲座

文档来源于网络,文档所提供的信息仅供参考之用,不能作为科学依据,请勿模 仿。文档如有不当之处,请联系本人或网站删除。
三、程序设计
P1.0端口的LED闪亮
AT89S51
单片机的 I/O端口
P1.0
+Vcc
图3-3 单片机驱动一只发光二极管的原理电路
文档来源于网络,文档所提供的信息仅供参考之用,不能作为科学依据,请勿模 仿。文档如有不当之处,请联系本人或网站删除。
0.5秒延时的汇编程序:
MOV R6,#5
SS:
MOV R7, #200
LOOP: MOV R5, #249
DJNZ R5, $
DJNZ R7,LOOP
DJNZ R6,SS
整个子程序延时为: {[2μs×249+1+2]×200+2}×5=501010μs
文档来源于网络,文档所提供的信息仅供参考之用,不能作为科学依据,请勿模 仿。文档如有不当之处,请联系本人或网站删除。
文档来源于网络,文档所提供的信息仅供参考之用,不能作为科学依据,请勿模 仿。文档如有不当之处,请联系本人或网站删除。
任务一 一只LED的闪烁
一、课题目标
本课题就是以发光二极管为例,用单片机控制8只发 光二极管,实现逐个点亮、全亮、闪烁等花样显示。
为了便于理解,采用从简单的单只发光二极管的点亮 和熄灭控制开始,到实现八只发光二极管组成的各种样式 闪亮彩灯控制。
文档来源于网络,文档所提供的信息仅供参考之用,不能作为科学依据,请勿模 仿。文档如有不当之处,请联系本人或网站删除。
二、电路原理
图3-1 LED显示电路原理图
文档来源于网络,文档所提供的信息仅供参考之用,不能作为科学依据,请勿模 仿。文档如有不当之处,请联系本人或网站删除。

单片机整套实验及程序交通灯_跑马灯等

单片机整套实验及程序交通灯_跑马灯等

单片机整套实验及程序交通灯_跑马灯等一、单片机整套实验及程序介绍单片机是指一种完整的计算机系统,它是一种将控制器、存储器和输入/输出接口等功能合并在一块芯片上的微处理器。

利用它可以实现各种各样的自动控制系统,广泛应用于工业生产、通讯、计算机硬件系统、军事装备等领域。

在学习单片机时,学习实验是很重要的环节,可以帮助我们更好地理解单片机的原理及其应用。

在此提供一个包含跑马灯和交通灯两个实验的单片机整套实验及程序。

通过这两个实验的学习,可以加深自己对单片机逻辑控制原理的理解,同时也可以提高自己的实际操作能力。

二、跑马灯实验1、实验目的熟悉单片机系统的组成,学习使用单片机的输入/输出口,学习单片机的编程语言,并能用单片机实现跑马灯。

2、实验内容和步骤硬件方面:准备好实验板、单片机、按键、电源等硬件设备,连接好,保证正常工作。

软件方面:利用Keil uVision 4软件建立一个新工程,命名为“跑马灯”。

编写代码:根据单片机的输出口、输入口的接口,进行编程设计。

具体步骤如下:1)设置输入口:设置P32口作为设置跑马灯速度的按键,设置P33口作为开关跑马灯的按键。

2)设置输出口:设置P11~P14口的四个灯,作为跑马灯的显示口。

3)编程:程序的主程序是一个死循环,通过循环控制灯的亮灭,以便达到跑马灯的效果。

按键的实现是通过监测按键输出电平的变化来确定开启、关闭跑马灯的命令,同时还可以通过按键来实现调整跑马灯速度的目的。

3、实验结果通过编写代码,连接相应硬件,完成跑马灯的实验,输出口的LED灯像一个个由左向右、由右向左穿梭的小马跑,实验目的达到。

三、交通灯实验1、实验目的熟悉单片机系统的组成,学习使用单片机的输入/输出口,学习单片机的编程语言,并能用单片机实现交通灯系统。

2、实验内容和步骤硬件方面:准备好实验板、单片机、LED灯等硬件设备,连接好,保证正常工作。

软件方面:利用Keil uVision 4软件建立一个新工程,命名为“交通灯”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SD: DJNZ R1, SD DJNZ R7,loop DJNZ R6,SS ret
end
1、端口的定义
C51使用sfr命令来对单片机这些端口进行定义, 如:
sfr P1 = 0x90;
这条命令的作用就是定义了P1这个名称(也可叫 变量)代表了地址为90H的特殊功能寄存器。
汇编程序直接使用P1就可以,并且不分大小 写。例:MOV P1,#0FFH;MOV P1,#00H。
sbit light=P1^0; 命令定义了light表示P1口的P1.0端。
让LED点亮,需要在引脚上输出低电平,就是 在P1.0引脚上输出0,应使用的命令是:
light=0;(汇编:CLR P1.0) 同理,让LED熄灭,应使用的命令是:
light=1; (汇编:SETB P1.0)
4、延时程序的编写
图3-17 代码查询窗口
工程窗口寄存器页
KEIL 软件开发平台
图3-18 工程寄存器窗口
2.各种窗口在程序调试中的用途 程序调试界面
KEIL 软件开发平台
图3-19 程序调试窗口
I/O端口界面
KEIL 软件开发平台
图3-20 硬件查询窗口
I/O口全部打开界面
KEIL 软件开发平台
图3-21 硬件I/0口查询窗口
void delay05s(void) {
unsigned char i,j,k; for(i=5;i>0;i--)
{ for(j=200;j>0;j--) { for(k=250;k>0;k--) {;} }
} }
整个子程序延时为:2μs×250×200×5=500000μs=0.5s。
近似值,不准确
KEIL 软件开发平台
图3-8 新建工程窗口
KEIL 软件开发平台
图3-9 单片机选择窗口
KEIL 软件开发平台
图3-10 目标1属性设置窗口
KEIL 软件开发平台
图3-11 目标1输出窗口设置
KEIL 软件开发平台
图3-13 软件输入窗口
KEIL 软件开发平台
图3-14 目标1添加窗口
按图3-5所对应的主程序: sbit light=P1^0;
程序开始
void main(void)
输出低电平
{
while(1)
延时0.5秒
{ light=0;
输出高电平
delay05s(); light=1;
延时0.5秒
delay05s();
}
图3-5 1Hz的闪烁程序设计框图
}
C语言程序:
#include <reg51.H> sbit light=P1^0; void delay05s(void) { unsigned char i,j,k;
1.芯片选择:左击界面右面芯片选择窗口的 下拉箭标,选择编程芯片的型号。
2.导入hex文件到缓冲区:左击界面上的 “Open File”按钮,选择本目录下的hex文件。
3.向芯片写入文件:左击界面上的“Write” 按钮,开始编程向芯片写入程序。
4.完成写入编程。
5.退出程序:左击界面右上角的“x”按钮, 退出此程序。
3、程序设计分析
程序开始 输出低电平
在本任务的程序设计框图 就是图3-4。从框图中可看出两 点,一是程序是一个循环结构, 即程序开始后就反复地循环执 行,二是程序包含了端口输出 控制和0.5秒的延时程序。
延时0.5秒 输出高电平 延时0.5秒
图3-4 1Hz的闪烁程序设计框图
在本任务中的引脚定义使用如下命令:
三、程序设计
P1.0端口的LED闪亮
AT89S51
单片机的 I/O端口
P1.0
+Vcc
图3-3 单片机驱动一只发光二极管的原理电路
0.5秒延时的汇编程序:
MOV R6,#5
SS:
MOV R7, #200
LOOP: MOV R5, #249
DJNZ R5, $
DJNZ R7,LOOP
DJNZ R6,SS
课题三(实例) 之跑马灯
任务一 一只LED的闪烁 任务二 跑马灯 任务三 任意变化的彩灯控制
学习目标
知识目标: Keil uVision2 软件的使用和调试
方法。
掌握汇编语言与C语言的编写方法 和技巧。
技能目标: 能根据实际电路要求编写闪烁LED
程序。
任务一 一只LED的闪烁
_crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移 _iror_ 整数循环右移 _lrol_ 长整数循环左移 _lror_ 长整数循环右移 _nop_ 空操作 (相当于8051 NOP 指令) _testbit_ 测试并清零位 (相当于8051 JBC
END
思考题:
1、编写程序实现8个LED指示灯从左到右, 从右到左依次循环点亮。
1.keil C51 windows集成开发平台介绍
菜单栏
工具栏
工程窗口
源文件编辑窗口
输出窗口
图3-6 软件窗口介绍
2.导入需要仿真的程序
➢ 建立一个工程项目 ➢芯片选择 ➢属性设置 ➢建立源程序文件 ➢添加文件到当前项目组中 ➢编译文件
KEIL 软件开发平台
KEIL 软件开发平台
图3-7 新建工程窗口
无符号数最大值为255,也就是说,使用无符号类型 的变量的单个的循环最多为255次,即用一个循环不能完 成所需要的0.5s延时。为了达到0.5s延时,可采用多重循 环的方式完成。为了方便,将其中的每重循环的循环次数 取为0.5s/2μs=25000的因数200、250和5。
下面就是一个完成0.5秒延时的程序。
2、位定义
针对特殊功能寄存器的某一位进行操作, 则需要使用sbit命令定义特殊功能寄存器中 的可寻址位。如要对AT89S51端口P1的 P1.0进行操作,则可以使用下面的命令进 行定义:
sbit P10=P1^0;
然后就能使用“P10=1;”控制P1.0输出 高电平,“P10=0;”控制P1.0输出低电 平。
单片机执行一条指令的执行时间,称为指令周期。 指令周期是以机器周期为单位的,为1~4个机器周期,多 数指令都是单周期指令,也就是执行一条指令的时间为一 个机器周期。在MCS-51单片机规定一个机器周期为单片 机振荡器的12个振荡周期。如果晶振频率为12MHz,则 一个机器周期为1μs。
单片机的指令运行是很快的,要在端口获得一定时间 长度的脉冲信号,就要通过编写程序,使单片运行设计程 序产生时间延迟,实现从单片机输出端口上获得需要频率 的电脉冲信号。
for(i=5;i>0;i--) for(j=200;j>0;j--)
for(k=250;k>0;k--) ; }
void main(void) { while(1) {
light=0; delay05s(); light=1; delay05s(); } }
(一)keil C51 windows集成开发平台的使用
指令)
ORG 0000H START:
MOV R2,#8 MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A DJNZ R2, LOOP SJMP START
delay: mov R6,#5
SS: MOV R7, #200
lp: mov R1,#245
SD: DJNZ R1, SD DJNZ R7,lp DJNZ R6,SS RET
一、课题目标
本课题就是以发光二极管为例,用单片机控制8只发 光二极管,实现逐个点亮、全亮、闪烁等花样显示。
为了便于理解,采用从简单的单只发光二极管的点亮 和熄灭控制开始,到实现八只发光二极管组成的各种样式 闪亮彩灯控制。
二、电路原理
图3-1 LED显示电路原理图
图3-2 八路发光二极管控制电路演示图
for(;Delay>0;Delay--) { for(i=0;i<124;i++)
{;} } } void main() { unsigned char OutData=0xfe; for(;;) { P1=OutData;
OutData=_crol_(OutData,1); //循环左移 mDelay(1000); /*延时1000 毫秒*/ } }
KEIL 软件开发平台
图3-15 目标1添加文件窗口
(二) Keil 程序调试 1.程序调试时的常用窗口 编译文件界面
KEIL 软件开发平台
图3-16 编辑文件界面
调试程序窗口
KEIL 软件开发平台
字母C:代码存储空间 D:直接寻址的片内存储空间 I:间接寻址的片内存储空间 X:扩展的外部RAM空间 “数字”:想要查看的地址。
常用的调试按钮
KEIL 软件开发平台
复位按钮全,速按停运止全进速入跳循运跳过环行出循并单环步并执执单行行到断点处
பைடு நூலகம்
下后,所行有的
系统状态将变
单步执行步执过行程
成初始状态。
图3-27 调试按钮
KEIL 软件开发平台
二、ISP软件的使用
打开下载软件,双击目录下的文件 ISPgm.exe,打开软件进入软件使用界面
整个子程序延时为: {[2μs×249+1+2]×200+2}×5=501010μs
汇编语言程序:
org 0000h LS:
setb p1.0 Lcall delay clr P1.0 Lcall delay sjmp $
delay: mov R6,#5
SS: MOV R7, #200
相关文档
最新文档