网上有关“用arm7做一个流水灯的设计。”话题很是火热,小编也是针对用arm7做一个流水灯的设计。寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
您好:手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,咨询加微信【】很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的
1.手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,通过添加客服微信
2.咨询软件加微信【】在"设置DD功能DD微信手麻工具"里.点击"开启".
3.打开工具.在"设置DD新消息提醒"里.前两个选项"设置"和"连接软件"均勾选"开启"(好多人就是这一步忘记做了)
4.打开某一个微信组.点击右上角.往下拉."消息免打扰"选项.勾选"关闭"(也就是要把"群消息的提示保持在开启"的状态.这样才能触系统发底层接口)
从原理图可以看出,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平就可以;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭方法方法同LED1。因此,要实现流水灯功能,我们只要将LED2~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。
实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。
从上面中文表示看来实现单片机流水灯很简单,但是我们不能说P1.0你变低,它就变低了。因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”机器代码。我们又怎样来使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。这里的“程序语言”目前主要有汇编语言和C语言两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。
实现8个LED流水灯汇编语言源程序?liu01.asm
;-----?主程序开始?-----
START:?CLR?P1.0?;P1.0输出低电平,使LED1点亮
ACALLDELAY;调用延时子程序
SETBP1.0?;P1.0输出高电平,使LED1熄灭
CLR?P1.1?;P1.1输出低电平,使LED2点亮
ACALLDELAY;调用延时子程序
SETBP1.1?;P1.1输出高电平,使LED2熄灭
CLR?P1.2?;P1.2输出低电平,使LED3点亮
ACALLDELAY;调用延时子程序
SETBP1.2?;P1.2输出高电平,使LED3熄灭
CLR?P1.3?;P1.3输出低电平,使LED4点亮
ACALLDELAY;调用延时子程序
SETBP1.3?;P1.3输出高电平,使LED4熄灭
CLR?P1.4?;P1.4输出低电平,使LED5点亮
ACALLDELAY;调用延时子程序
SETBP1.4?;P1.4输出高电平,使LED5熄灭
CLR?P1.5?;P1.5输出低电平,使LED6点亮
ACALLDELAY;调用延时子程序
SETBP1.5?;P1.5输出高电平,使LED6熄灭
CLR?P1.6?;P1.6输出低电平,使LED7点亮
ACALLDELAY;调用延时子程序
SETBP1.6?;P1.6输出高电平,使LED7熄灭
CLR?P1.7?;P1.7输出低电平,使LED8点亮
ACALLDELAY;调用延时子程序
SETBP1.7?;P1.7输出高电平,使LED8熄灭
ACALLDELAY;调用延时子程序
AJMPSTART;8个LED流了一遍后返回到标号START处再循环
;-----?延时子程序?-----
DELAY:?MOV?R0,#255?;延时一段时间
D1:?MOV?R1,#255
DJNZR1,$
DJNZR0,D1
RET;子程序返回
END?;程序结束
在上面主程序中用到了五条汇编语言指令:CLR、ACALL、SETB、LJMP、END。
CLR:?是将其后面指定的位清为0,程序中使对应端口输出低电平
ACALL:是子程序调用指令,程序中调用了DELAY延时子程序
SETB:是将其后面指定的位置成1,程序中使对应端口输出高电平
AJMP:是无条件跳转指令,意思是:跳转到指定的标号处继续运行
END:?是程序结束的伪指令,意思是告诉编译器,程序到此结束。伪指令只告诉编译器此程序到此有何要求或条件,它不参与和影响程序的执行。
在上面源程序中"ACALLDELAY"指令的作用是调用DELAY延时子程序。为什么要使用这指令呢?如果不用该指令能够实现"流水"效果吗?答案是肯定的,一定要用该指令才能看到我们需要的"流水"效果。如果不用该指令,则由于8个LED发光与熄灭的时间都很短,我们肉眼无法看到LED的熄灭与点亮,凭我们肉眼看到的是LED1~LED8都同时亮(半亮),而看不到“流水”效果的!注:初学者可以将上面源程序中所有"ACALLDELAY"指令行删除后再编译后烧写到单片机进行验证一下。
产生这种现象主要是因为单片机执行每条指令的时间很短,我们知道实验板上单片机的时钟高达11.0592MHz,在这个时钟信号(即晶体振荡信号)下,一个“机器周期”仅大约1.08uS(微秒)。本程序中我们用到的SETB?P.x和CLR?P.x均属于单周期指令,也就是说,执行一句?SETB?P.x?用时仅1.08uS(微秒),CLR?P.x?也是1.08uS(微秒);也就是点亮和熄灭时间都为1.08uS(微秒),在如此高速的流水速度下,8个LED发光与熄灭的时间都很短,当然凭我们的肉眼看不到“流水”效果了!
这里需要说明的是,按汇编语法要求,所编制的程序(下称源程序)之格式和书写要求必须依下列原则:?
1、源程序必须为纯文本格式文件,如用Windows“附件”中的“记事本”编写的文本文件或用UltraEdit文本编辑器编辑;
2、源程序的扩展名应是?*.ASM;?
3、一行只能写一条语句,以回车作为本句的结束,每一语句行长度应少于80个字符(即40个汉字)。
4、每行的格式应为:标号:?命令?参数?;注释?。即一行由四部份组成,各部份的顺序不能搞错,依实际要求可以缺省其中的一部份或几部份,甚至全部省去,即空白行。需要使用标号时标号后面必须有“:”(冒号),而命令语句和参数之间必须用空格分开,如果命令有多个参数,则参数与参数之间必须用“,”(逗号)分开,需要注释时注释前必须用“;”(分号),“;”后面的语句可以写任何字符,包括汉字用于解释前面的汇编语句,它将不参与汇编,不生成代码。由于汇编程序对我们还不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于今后源程序的阅读和维护。?
标号是标志程序中某一行的符号名,编译后标号的数值就是标号所在行代码的地址。在宏汇编ASM51中标号的长度不受限制,但标号中不能包含‘:'或其它的一些特殊符号,也不能用汉字,可以用数字作标号,但必须用字母开头。当标号作参数用(如标号作转移地址),在命令后面出现时,必须舍去‘:'(如上面程序中的?AJMP?START中的START是不能再有:)。每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,则汇编时就会出错。由于标号的长度没有限制,可以用有意义的英文或汉语拼音来说明行,使源程序读起来更方便。在源程序中的字母不区分大小写,也就是说?start?和?START?是一样的,请不要用大小写方式去区分不同的标号。
好啦!我们知道了汇编语言程序的规则,现在就动手编辑源程序吧。马上启动Keil单片机集成开发环境,建立新工程liu01.UV2,将上面的源程序liu01.asm导入到工程中,设置好Keil工程的编译参数,编译得到HEX格式的目标文件liu01.hex,用?ISP编程器?将目标文件liu01.hex烧写到AT89S51单片机中,接下来就是将烧写好的AT89S51从编程器上取下,放到“?S51增强型单片机实验板?”上通电,我们就看到了LED1~LED8的"流水"效果了。
到此,我们做的流水灯已成功,工作原理也清楚啦,若你完全掌握了上面程序,那么你就可以将“流水灯”的流向改变一下,可以将从"左向右流"改为从"右向左流",也可以改为"两边向内流"、"内部向外流"......,我想你一定能用前面学到的方法实现这些功能。可能有些高手说,前面的编程方法是最最笨的!不错!但初学单片机初期可以不必讲究语言的简练,只要能实现预先要求就好,最主要的是学好基本指令(111条)的用法,清楚各个指令的功能,这是初学者要知道的。那么还有更好的编程思路吗?当然有!请跟随站长继续学习下面的内容。
在前面学习的程序中我们让LED流水是去逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们就采用新的思路来编程。新的编程思路如下:我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后让这个数据向高位移动不就实现“流水”效果啦?的确如此!8051指令中没有让P1数据移动的指令,但有对累加器ACC中数据左移或右移的指令,ACC在指令中常写为A,累加器A数据左移指令为"RL?A",累加器数据右移指令为"RR?A",累加器在数据传输和数据处理过程中作用十分重要,累加器ACC为8位。他可与片内所有单字节寄存器交换数据,实际上P1和其他端口在单片机中也是一个寄存器。这样我们可以将需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。下面程序就是采用新的编程思路源程序liu02.asm。
实现8个LED流水灯汇编语言程序?liu02.asm
;-----?主程序开始?-----
START:?MOV?ACC,#0FEH?;ACC中先装入LED1亮的数据(二进制的11111110)?
MOV?P1,ACC?;将ACC的数据送P1口?
MOV?R0,#7?;将数据再移动7次就完成一个8位流水过程?
LOOP:RL?A?;将ACC中的数据左移一位
MOV?P1,A;把ACC移动过的数据送p1口显示
ACALLDELAY?;调用延时子程序
DJNZR0,LOOP;没有移动够7次继续移动?
AJMPSTART?;移动完7次后跳到开始重来,以达到循环流动效果
;-----?延时子程序?-----
DELAY:?MOV?R0,#255;延时一段时间
D1:?MOV?R1,#255
DJNZR1,$
DJNZR0,D1
RET;子程序返回
END;程序结束
接下来,我们将上述程序编译,并烧写到实验芯片中,放到实验板上可以看到程序的"流水"效果是一样的,但源程序看起来更加简洁,直观。其实8051单片机有111条指令,有的指令常用,有的指令不常用,只要遵守语法规则,你可以用这些指令“组合”成你想象到的任何程序。当然,有时一条指令可以替代很多条指令,这样会使程序简洁,程序代码减少,在编写较大程序时可以让程序存储器放得下你需要的代码,这也是单片机高手所追求的“程序简洁高效”。当然,初学者不必刻意去追求程序的简洁高效,主要是要全面地掌握各种指令的应用,只要你对基本指令都熟悉了,那么你也就可以编出简洁高效的程序了,不过这编程“内功”是需要你勤学苦练,日积月累的练习、实验才能达到的哦!马上拿起你的实验板,现在就开始动手吧:)
上面我们学习的两个程序都是比较简单的流水灯程序,"流水"花样只能实现单一的"从左到右"流方式。下面介绍一个实用的流水灯程序,程序能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水。只要将下面的程序稍稍修改一下,通过S51增强型单片机实验板的扩展接口连接到霓虹灯高压驱动接口板就可以驱动真正的霓虹灯了。
实用的查表方式多功能流水灯程序?liu03.asm
;-----?主程序开始?-----
ORG?0000H?;上电复位,程序从0000H开始执行
START:?MOV?SP,#60H;堆栈初始化为60H
MOV?DPTR,#LIU_TAB?;流水花样表首地址送DPTR
LOOP:CLR?A
MOVCA,@A+DPTR
CJNEA,#0FFH,SHOW?;检查流水结束标志
AJMPSTART?;所有花样流完,则从头开始重复流
SHOW:MOV?P1,A?;将数据送到P1口
ACALLDELAY
INC?DPTR
AJMPLOOP
;-----?延时子程序?-----
DELAY:?MOV?R0,#255?;延时一段时间
D1:?MOV?R1,#255
DJNZR1,$
DJNZR0,D1
RET;子程序返回
;-----?下面是流水花样数据表?-----
LIU_TAB:?
DB?01111111B?;二进制表示的流水花样数据
DB?10111111B
DB?11011111B
DB?11101111B
DB?11110111B
DB?11111011B
DB?11111101B
DB?11111110B
DB?11111110B
DB?11111101B
DB?11111011B
DB?11110111B
DB?11101111B
DB?11011111B
DB?10111111B
DB?01111111B
DB?7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH?;十六进制表示
DB?0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
DB?7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH
DB?7FH,3FH,1FH,0FH,07H,03H,01H,00H
DB?0FFH;流水花样结束标志0FFH
END?;程序结束
51单片机中怎样用一个按键控制三种模式的流水灯,如控制流水灯流水速率(每按一下加速,到三后返回和第一次
看你的程序,8个LED是接在P0口上的,顺序如下图:
这样,左边的第一个是接在P0.0上的,让它的LED常亮,就保证P0.0一直为0就行了。
另外说明一点,要用一个变量才行。
程序如下,只写一种向左流动的,向右流动你可参考这个程序增加即可。
#include<reg51.h>
#include<intrins.h>
void Delay(unsigned char x)
{
unsigned int j;
while(x--)
for(j=800;j>0;j--);
}
void main()
{
unsigned char light=0x7f;
while(1)
{
P0=light&0xfe;//保证P0.0=0
Delay(15);
light=_cror_(light,1);
}
}
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit anjian = P1^0; //按键位
void delay(uint16 h) //延时程序
{
while(h--);
}
main()
{ uint8 k = 0 , i = 0;
P0 = 0xff;
anjian = 1;
while(1)
{
P0 = ~(1<<k++);
if(anjian == 0)
{
delay(200);
if(anjina == 0) i++;
if(i == 3)
i = 0;
}
switch(i)
{
case 0: delay(10000);break;
case 1: delay(20000);break;
case 2: delay(20000); break;
}
if(k==8) k=0;
}
}
//头一次回答问题,多多支持,全部知识都是自学的,但是我试验过可以符合你的要求运行,谢谢
关于“用arm7做一个流水灯的设计。”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!