汇编语言跑马灯
汇编语言实现led灯的跑马灯
汇编语⾔实现led灯的跑马灯led实验1.看原理图看设备⼯作的原理(可能需要阅读芯⽚⼿册),看设备与cpu的连接关系GPIO具有输⼊输出功能。
输⼊:cpu想知道io引脚是⾼电平还是低电平那么就是输⼊⽅式输出:cpu想控制io引脚为⾼电平还是低电平那么就是输出⽅式跟电流的⽅向没有任何关系2. cpu的相关章节GPJ2CON control是配置这个引脚是什么功能GPJ2有8个引脚,每个引脚由con寄存器中的4个位进⾏配置GPJ2DAT 如果cpu要输出⾼电平或者低电平,就需要设置该寄存器,只有8位有效When the port is configured as input port, the correspondingbit is the pin state. When the port is configured as outputport, the pin state is the same as the corresponding bit.When the port is configured as functional pin, the undefinedvalue will be read.当配置为输⼊模式的时候,dat寄存器中的某⼀位的值由引脚设置,引脚是⾼电平是,对应的位为1,引脚为低电平时,对应的位为0当配置为输出模式的时候,dat寄存器中的某⼀位控制引脚的电平,对应的位为1时,对应的引脚输出⾼电平,对应的位为0时,对应的引脚输出为低电平其他功能模式时,读到的值是未定义的。
@gec210 light first led.globl _start_start:ldr r0,=0xe0200280mov r1,#1<<4str r1,[r0] @config pin0 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);arm-linux-gcc -c led.S -o led.o //编译不链接arm-linux-ld -Ttext 0x30008000 led.o -o led.elf //链接指定代码段起始位置arm-linux-objcopy -O binary led.elf led.bin //⽣成⼆进制执⾏⽂件arm-linux-objdump -D led.elf > led.dis //⽣成反汇编代码uboot的⼏个常⽤命令printenv 打印显⽰环境变量ipaddr=192.168.1.4 //开发板的ipserverip=192.168.1.2 //tftp服务器的ip设置为各⾃的ip,只是设置到内存,掉电就没有setenv ipaddr 192.168.1.xsetenv serverip 192.168.1.xsaveenv //保存到flash中,再次启动后为刚刚设置的值ping //单向的,只能从开发板ping电脑alive表⽰⽹络是通的,not alive表⽰⽹络不通tftp 30008000 led.bin //下载⼆进制⽂件到内存0x30008000地址go 30008000 //跳转到0x30008000运⾏程序@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);简单的makefileAPP=led$(APP).bin:$(APP).oarm-linux-ld -Ttext 0x30008000 $^ -o $(APP).elf arm-linux-objcopy -O binary $(APP).elf $@ arm-linux-objdump -D $(APP).elf > $(APP).dis cp $@ /home/gec/tftp/%.o:%.sarm-linux-gcc $^ -c -o $@%.o:%.Sarm-linux-gcc $^ -c -o $@%.o:%.carm-linux-gcc $^ -c -o $@clean:@rm -f $(APP).bin $(APP).elf $(APP).dis *.o四个灯同时点亮或者同时熄灭循环闪烁@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output mode loop:mov r1,#0str r1,[r0,#4] @output low levelbl delaymov r1,#0xfstr r1,[r0,#4]bl delayb loopb . @same as while(1);delay:mov r4,#0xff00000delay1:subs r4,r4,#1bne delay1mov pc,lr#define GPJ2CON (unsigned long *)0xe0200280unsigned long *p = (unsigned long *)0xe0200280;p练习:第1个灯到第4个灯依次点亮,第4个灯到第1个灯依次熄灭,循环。
单片机汇编语言跑马灯
实验一跑马灯-亮灯左移右移循环黄天佑 20132301155一、实验目的1、进一步熟悉keil C仿真软件及单片机实验板的使用。
2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
4、了解单片机汇编语言程序的设计和调试方法。
二、实验原理1、实验板硬件电路图2、单片机流水灯程序设计(1)流水灯程序设计思路及程序流程。
实现流水灯的方法有很多,这里介绍一种。
(2)产生流水灯效果程序(逐条程序加注释)start:mov R0,#8 ;设置左移8次mov A,#0FEH;存入开始亮灯的位置LOOP: mov P0,A;传送P0并输出ACALL DELAY;调用延时程序RL A;左移1位DJNZ R0,LOOP;判断移送次数mov R1,#8;设置右移8次LOOP1:RR A;右移1位mov P0,A;传送到P0口并输出ACALL DELAY;调用延时程序DJNZ R1,LOOP1;判断右移次数JMP start;重新设定显示DELAY: mov R5,#10;延时0.1s子程序D1: mov R6,#100;D2:mov R7,#100;DJNZ R7,$;DJNZ R6,D2;DJNZ R5,D1;RET;子程序返回END;程序结束三、实验步骤及调试过程1、汇编语言程序的编写与调试(1)新建一个工程(2)保存文件,设一个文件名(3)找到对应单片机的芯片,这里我们选AT89C51即可接着我们新建一个文本写程序(1)(2)保存文件名,注意文件名的后缀应该为.asm(汇编语言程序的格式)接着把我们的文本导入到工程里面去:(1)(2)点击Add,再Close即可2.汇编语言程序编译及下载(1)这里要设置一个输出.hex文件(2)点击生成工程相应的文件同时可以观察下面的结果:0 Error(s),即可。
3.程序下载考入单片机(1)打开STC-ISP软件,选择对应的单片机型号,(2)点击打开程序,选择写好的.hex文件,(3)选择对应的端口COM3,再点击“Download下载”,同时按下单片机开关,即可。
跑马灯程序大全
LED跑马灯(从右至左)#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<255;i++);}}void main(){P1=0xfe;while(1){ if(P1==0xef)P1=0xfe;elseP1=_crol_(P1,1); DelayMS(80);}} LED跑马灯(从左至右)#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<255;i++);}}void main(){P1=0xef;while(1){ if(P1==0x7f)P1=0xef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#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<255;i++);}}void main(){uchar i;P1=0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P1=0xef;DelayMS(40); }} 单个LED的闪烁#include <reg52.h>#define uchar unsigned char #define uint unsigned int sbit LED = P1^0;void DelayMS(uint x){uchar i;while(x--){for(i=120;i>0;i--);}}void main(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#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<255;i++);}}void main(){P1=0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}WelcomeTo Download!!!欢迎您的下载,资料仅供参考!。
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单片机结构和编程思想的理解。
跑马灯单片机实训报告
一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
为了提高我们的实践能力,加强理论知识与实际操作的结合,我们进行了单片机跑马灯实训。
通过本次实训,我们深入了解了单片机的基本原理,掌握了单片机的编程方法,并能够运用所学知识解决实际问题。
二、实训目的1. 熟悉单片机的硬件结构和工作原理。
2. 掌握单片机的编程方法,包括汇编语言和C语言。
3. 学会使用单片机进行简单的外设控制。
4. 提高动手能力和团队合作能力。
三、实训内容1. 实训设备(1)8051单片机开发板(2)LED灯(3)电阻(4)电源2. 实训步骤(1)搭建电路首先,我们需要搭建跑马灯的电路。
将LED灯串联,然后连接到单片机的P1口。
在LED灯的正极和负极之间串联一个电阻,用于限流。
(2)编写程序接下来,我们需要编写跑马灯的程序。
以下是用C语言编写的跑马灯程序:```c#include <reg51.h>#define LED P1void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 1275; j++);}void main() {while (1) {LED = 0x01; // 第一个LED灯亮 delay(500); // 延时LED = 0x02; // 第二个LED灯亮 delay(500); // 延时LED = 0x04; // 第三个LED灯亮 delay(500); // 延时LED = 0x08; // 第四个LED灯亮 delay(500); // 延时LED = 0x10; // 第五个LED灯亮 delay(500); // 延时LED = 0x20; // 第六个LED灯亮 delay(500); // 延时LED = 0x40; // 第七个LED灯亮 delay(500); // 延时LED = 0x80; // 第八个LED灯亮 delay(500); // 延时LED = 0x00; // 所有LED灯熄灭delay(500); // 延时}}```(3)编译程序将编写的程序导入到单片机开发板中,并下载到单片机中。
跑马灯程序大全
LED 跑马灯(从右至左)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char #defi ne uint un sig ned int void DelayMS(ui nt x){uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0xfe;while(1){ if(P1==0xef)P1=0xfe; void main()elseP1=_crol_(P1,1);DelayMS(80);}}LED跑马灯(从左至右)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intvoid DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}{P仁Oxef;while(1){ if(Pl==0x7f)P仁Oxef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++); }}void mai n(){uchar i;P仁0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P仁}单个LED的闪烁#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int sbit LED = P1A0;void DelayMS(ui nt x) {uchar i;while(x--){for(i=120;i>0;i--);}}void mai n(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}。
跑马灯--动态心形(汇编语言)
DELAY: MOV R3 , #08FH DJNZ R3 , $ DJNZ R2, DELAY MOV P1 , #0 INC R0 CJNE R0 , #8 , KKK MOV R0 , #0 DJNZ R4 , KKK INC DPTR INC R6 CJNE R6 , #08H, III MOV R6,#0 MOV DPTR,#200H SJMP III ORG 200H TAB: DB 0E3H, 0C1H, 081H,03H,03H,081H,0C1H, 0E3H, DB 0E3H, 0C1H ,081H,03H,03H,081H,0C1H, 0E3H END
程序编写:
CJNE R6 , #18H, III MOV R6, #0 MOV DPTR, #200H SJMP III ORG 200H 0FFH, 0FFH, 7DH, 01H, 01H, 7DH, 0FFH, 0FFH 0E3H, 0C1H ,81H, 03H, 03H, 81H, 0C1H, 0E3H 0FFH, 81H, 01H, 3FH, 3FH, 3FH, 01H, 81H 0FFH, 0FFH,7DH, 01H, 01H, 7DH, 0FFH,0FFH
利用IO口实现跑马灯功能: 跑马灯又称为流水灯。简单地说就是一 组灯在控制系统的控制下按照设定的时间和顺序 来发亮或熄灭,组成不同的图形,从而达到一定 的视觉效果。 • 基本跑马灯电路的组成: MCS—51单片机,LED小灯泡,电容电阻, 振荡电路,译码电路,光源电路等。
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 列置高电平 行置低电平
点阵共有64 个二极管每 个发光二极 管是放置在 行线和列线 的交叉点上
当对应的 某一列置 1电平, 某一行置 0电平, 则相应的 二极管就 亮
单片机实例之跑马灯
让LED点亮,需要在引脚上输出低电平,就是 在P1.0引脚上输出0,应使用的命令是:
light=0;(汇编:CLR P1.0) 同理,让LED熄灭,应使用的命令是:
light=1; (汇编:SETB P1.0)
4、延时程序的编写
KEIL 软件开发平台
图3-8 新建工程窗口
KEIL 软件开发平台
图3-9 单片机选择窗口
KEIL 软件开发平台
图3-10 目标1属性设置窗口
KEIL 软件开发平台
图3-11 目标1输出窗口设置
KEIL 软件开发平台
图3-13 软件输入窗口
KEIL 软件开发平台
图3-14 目标1添加窗口
KEIL 软件开发平台
图3-15 目标1添加文件窗口
(二) Keil 程序调试 1.程序调试时的常用窗口 编译文件界面
KEIL 软件开发平台
图3-16 编辑文件界面
调试程序窗口
KEIL 软件开发平台
字母C:代码存储空间 D:直接寻址的片内存储空间 I:间接寻址的片内存储空间 X:扩展的外部RAM空间 “数字”:想要查看的地址。
根据前面的分析,实现任务的思路是:程序 开始时,给某一变量赋初始值0xFE,然后每次将 数据左移后送入P1口直到所有循环次数输出完毕, 再次重复整个过程。根据思路得出的程序框图如 图3-29所示。
图3-29 程序流程图
(1)C语言程序:
#include "reg51.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int void mDelay(unsigned int Delay) { unsigned int i;
单片机整套实验及程序(交通灯_跑马灯等)
实验1 跑马灯实验一、实验目的●初步学会Proteus ISIS和uVision2单片机集成开发环境的使用;●初步掌握采用汇编语言与C语言开发单片机系统的程序结构;●掌握80C51单片机通用I/O口的使用;●掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。
二、实验设备及器件●硬件:PC机,HNIST-1型单片机实验系统●软件:Proteus ISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容●编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管(D1、D2、D3、D4)按照一定的方式点亮。
如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。
●基于Proteus ISIS仿真环境完成上述功能的仿真。
●基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。
四、实验原理图图3.1 跑马灯实验电路原理图电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。
五、软件流程图与参考程序●主程序流程图如下:●参考程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar aa,num,speed,flag;uchar code table[]={0x0e,0x0d,0x0b,0x07};uchar code table1[]={0x0a,0x05,0x09,0x06};uchar codetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00};void delay(uint z)//延时函数{uint x;uchar y;for(x=z;x>0;x--)for(y=200;y>0;y--);}void init()//条件初始化函数{ flag=0;speed=10;//控制跑马灯流水速度TMOD=0x01;//中断方式TH0=(65535-50000)/256;TL0=(65536-50000)%256;//初值EA=1;//打开总中断ET0=1;//打开外中断0TR0=1;}void main(){init();//调用初始化函数while(1){if(flag){delay(2000);//调用延时函数for(num=0;num<4;num++)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=0;num<4;num++)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=0;num<6;num++)//两个,三个,四个跑马灯依次闪烁{P1=table2[num];delay(2000);}for(num=0;num<5;num++)//闪烁5次{P1=0xff;//全暗delay(2000);P1=0X00;//全亮delay(2000);}speed=speed-3;//变速if(speed==4){speed=10;}}}}void timer0() interrupt 1//中断函数{TH0=(65535-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==speed){aa=0;flag=1;}}六、实验思考题●请用汇编指令完成本实验内容,深刻理解汇编语言程序设计结构。
02汇编语言实验——跑马灯
实验时间: 实验时间: 时间
2011-4-7
实验报告提交时间: 实验报告提交时间: 提交时间
2011-4-7
教务处制
实验目的与要求:
1. 初步使用汇编语言进行编程,了解单片机内程序运行情况。 2. 了解汇编语言的指令结构,跳转,子程序调用等功能。 3. 使用汇编语言实现跑马灯功能。
实验仪器: 微机原理试验箱 实验相关电路图:
;延时 100MS 子程序 延时 ;入口参数 入口参数:DelayTimes_100MS,延时多少个 100MS 入口参数 延时多少个 ;-----------------------------------------------------Delay100MS: MOV R7,DelayTimes_100MS Delay100MS_1: MOV R6,#10 Delay100MS_2: MOV R5,#150 Delay100MS_3: MOV R4,#200 Delay100MS_4: DJNZ R4,Delay100MS_4 DJNZ R5,Delay100MS_3 DJNZ R6,Delay100MS_2 DJNZ R7,Delay100MS_1 RET ;子程序返回 子程序返回 ;-----------------------------------------------------;跑马灯子程序 跑马灯子程序 ;让 4 个 LED 以 全灭 亮灭灭灭 亮亮灭灭 亮亮亮灭 亮亮亮亮 灭亮亮亮 灭灭亮 全灭->亮灭灭灭 亮亮灭灭->亮亮亮灭 亮亮亮亮->灭亮亮亮 亮灭灭灭->亮亮灭灭 亮亮亮灭->亮亮亮亮 灭亮亮亮->灭灭亮 让 灭灭灭亮->全灭 亮->灭灭灭亮 全灭 的顺序运行 灭灭灭亮 ;-----------------------------------------------------LEDRUN: ;---全灭 全灭--全灭 SETB LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 CLR LED1 SETB LED2
跑马灯程序大全
LED跑马灯(从右至左)#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<255;i++);}}void main(){P1=0xfe;while(1){ if(P1==0xef)P1=0xfe;elseP1=_crol_(P1,1); DelayMS(80);}} LED跑马灯(从左至右)#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<255;i++);}}void main(){P1=0xef;while(1){ if(P1==0x7f)P1=0xef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#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<255;i++);}}void main(){uchar i;P1=0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P1=0xef;DelayMS(40); }} 单个LED的闪烁#include <reg52.h>#define uchar unsigned char #define uint unsigned int sbit LED = P1^0;void DelayMS(uint x){uchar i;while(x--){for(i=120;i>0;i--);}}void main(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#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<255;i++);}}void main(){P1=0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}WelcomeTo Download!!!欢迎您的下载,资料仅供参考!。
最新单片机汇编语言跑马灯
实验一跑马灯-亮灯左移右移循环黄天佑 20132301155一、实验目的1、进一步熟悉keil C仿真软件及单片机实验板的使用。
2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
4、了解单片机汇编语言程序的设计和调试方法。
二、实验原理1、实验板硬件电路图2、单片机流水灯程序设计(1)流水灯程序设计思路及程序流程。
实现流水灯的方法有很多,这里介绍一种。
(2)产生流水灯效果程序(逐条程序加注释)start:mov R0,#8 ; 设置左移8次mov A,#0FEH; 存入开始亮灯的位置LOOP: mov P0,A; 传送P0并输出ACALL DELAY; 调用延时程序RL A; 左移1位DJNZ R0,LOOP; 判断移送次数mov R1,#8; 设置右移8次LOOP1:RR A; 右移1位mov P0,A; 传送到P0口并输出ACALL DELAY; 调用延时程序DJNZ R1,LOOP1; 判断右移次数JMP start; 重新设定显示DELAY: mov R5,#10; 延时0.1s子程序D1: mov R6,#100;D2: mov R7,#100;DJNZ R7,$;DJNZ R6,D2;DJNZ R5,D1;RET ; 子程序返回END ; 程序结束三、实验步骤及调试过程1、汇编语言程序的编写与调试(1)新建一个工程(2)保存文件,设一个文件名(3)找到对应单片机的芯片,这里我们选AT89C51即可接着我们新建一个文本写程序(1)(2)保存文件名,注意文件名的后缀应该为.asm(汇编语言程序的格式)接着把我们的文本导入到工程里面去:(1)(2)点击Add,再Close即可2.汇编语言程序编译及下载(1)这里要设置一个输出.hex文件(2)点击生成工程相应的文件同时可以观察下面的结果:0 Error(s),即可。
第12课,可编程自动控制跑马灯
RCAP2H =0x10; //赋 T2 的预置值 0x1000,溢出 30 次就是 1 秒钟 RCAP2L =0x00; TR2=1; //启动定时器 ET2=1; //打开定时器 2 中断 EA=1; //打开总中断 while(1) //主程序循环 { if(ldelay) //发现有时间溢出标记,进入处理 { ldelay=0; //清除标记 P1=ledp[ledi]; //读出一个值送到 P1 口 ledi++; //指向下一个 if(ledi==4)
第 12 课,可编程自动控制控制跑马灯 这一颗,我们学习如何让跑马灯自动按照我们预定的顺序进行。这种控制在工控场合 经常用到。 这个程序里,我们预先定义了一个变化的顺序 speedcode,每跑一圈灯就根据预定设置 的表格数据来决定下一圈的跑马速度。这样我们就实现了按照预定的顺序自动变化运行。 请看代码: ----------------------------------#define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一个 52 标准内核的头文件 sbit P10 = P1^0; //头文件中没有定义的 IO 就要自己来定义了 sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; bit ldelay=0; //长定时溢出标记,预置是 0 uchar speed=10; //设置一个变量保存跑马灯的移动速度 uchar code speedcode[10]={3,1,5,12,3,20,2,10,1,4}; //10 个预定义的速度 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的 //可编程自动控制跑马灯 void main(void) // 主程序 { uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入 P1 的值 uchar ledi; //用来指示显示顺序 uchar i;
论文-利用8255实现花式跑马灯
太原工业学院汇编语言与微机原理课程设计报告学生姓名:学号:系部: 计算机工程系专业: 计算机科学与技术题目: 利用8255实现花式跑马灯成绩指导教师2016年6月28日1.设计内容1)设计电路;2)实现6种不同的跑马灯样式;3)跑马灯的运行状态可由开关控制4)要有暂停跑马灯按钮控制即跑马灯的状态切换。
2.总体设计1)设计原理本实验通过循环检测A口数据,判断按得是哪个开关,如开关1按下,则向AL送01h,并送至B口,循环左移AL达到灯的流水下移,调用延时子程序控制灯闪亮时间,通过BH的赋值控制循环次数,达到时间定时效果。
每循环一个周期,CPU都会检测A口的值,从而能即时切换跑马灯花式。
2)设计跑马灯方案a)按下开关1,跑法1,AL初值01H,循环左移,控制一个亮灯自上而下跑动。
b)按下开关2,跑法2,AL初值81H,循环右移,控制一个亮灯自下而上跑动。
c)按下开关3,跑法3,AL初值0AAH,循环左移,控制间隔4个灯同时闪亮。
d)按下开关4,跑法4,AL初值0C0H,循环右移,控制两个亮灯自下而上跑动。
e)按下按键5,跑法5,AL初值05H,循环左移,控制亮暗亮3灯自上而下跑动。
f)按下开关6,跑法6,AL初值0AAH,循环左移,控制间隔4个灯同时闪亮,相比按键3,跑动时间更长,以显示定功能。
g)按下开关7按下,跑马灯暂停工作,再次按下跑马灯继续工作。
3.硬件设计1)Proteus元件清单及功能说明元件名称功能说明8086 微处理器8255A 可编程外设接口电路,主要接收外设的开关状态来判断跑马灯的样式,以及输出所要的结果74LS273 是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存74154 4-16译码器7427 3输入与非门LED-RED 红LED发光管NOT 非门PULLUP 上拉电阻,分压作用BUTTON 按钮式开关,鼠标点击开关后会自动弹起2)电路设计图a)8086微处理机与锁存器、译码器连接b)8255A与跑马灯开关控制连接图c)8255A与跑马灯LED显示灯连接图4. 软件设计1)程序设计思路利用查询式不断循环查询控制跑马灯样式的开关状态,进而编写程序来控制跑马灯的输出样式。
跑马灯程序大全
LED 跑马灯(从右至左)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char #defi ne uint un sig ned int void DelayMS(ui nt x){uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0xfe;while(1){ if(P1==0xef)P1=0xfe; void main()elseP1=_crol_(P1,1);DelayMS(80);}}LED跑马灯(从左至右)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intvoid DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}{P仁Oxef;while(1){ if(Pl==0x7f)P仁Oxef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++); }}void mai n(){uchar i;P仁0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P仁}单个LED的闪烁#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int sbit LED = P1A0;void DelayMS(ui nt x) {uchar i;while(x--){for(i=120;i>0;i--);}}void mai n(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}。