首页 > 编程知识 正文

51单片机流水灯论文,51单片机流水灯工作原理

时间:2023-05-05 06:08:42 阅读:45315 作者:1425

首先,介绍原理。 下图是主控芯片和流水灯模块的原理图。 流水灯模块与单片机的P1端口连接,如原理图所示,给P1端口低电平可以点亮LED灯。 相反,为了熄灭LED灯,只要将P1端口的电平设为高电平即可。 要实现流水灯的功能,只要依次点亮、熄灭LED1~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端口各位输出的高低电平,再加上延迟函数,控制各LED灯点亮熄灭的顺序程序结构。 c方案如下:

# includereg 52.h # defineucharunsignedchar # defineuintunsignedintcodeunsignedchartmpled [8]={0x Fe,0xfd,0xfb,0xf 7

{

uint i,j;

for(I=ms; i0; I----)

for(j=114; j0; j----;

返回0;

}

语音主(语音) {unchar i; wile(1) for ) I=0; i8; 循环点亮I//8根LED灯{P1=tmpled[i]; elay_ms(500; //延迟500毫秒}}

二是换挡方法实现流水灯

前者的方法是逐一点亮P1口LED灯实现闲暇,所以程序看起来有点复杂。 想想换挡的方法吧。 用循环程序结构编程。 首先,程序开始时向P1.0端口发送低电平,其他位为高电平。 并且,通过延迟一定时间后将低电平移动到上位,可以得到“流水”的效果。 让我们看看具体的步骤。

# includereg 52.HP rename=' code ' class=' CPP ' # defineucharunsignedchar # defineuintunsignedintprename=' code ' class

{

uint i,j;

for(I=ms; i0; I----)

for(j=114; j0; j----;

返回0;

}

void main () {uchar a,I; wile(1) {a=0xfe;//使第1位的LED灯for点亮(I=0; i8; I () {P1=a; a=a1; //左一位a=a|0x01; //左一位移动后与0x01相位或左一位移动后的最低位为1delay_ms(500 ); } }

三是库函数实现流水灯

C52提供_crol_ (字符循环左移)。 库函数(如_cror_ (字符循环右移) )包含在头文件intrins.h中。 接下来,谈谈班次的小知识点。

向左移动。 在C52中,操作员为“”,每次执行左移指令时,操作数量最多,会移动到单片机PSW寄存器的CY位。 CY位中的原数舍弃,最低位补充0,其他位依次左移1位。 大家都学过c语言吧,在这里不多说。 函数_crol_的作用是循环左移。 那个将最高位向最低位移动,其他位依次向左移动。 用法: x=0xfe; x=_crol_(x,1 ); //循环左移。 让我们来看看具体的步骤:

# includereg 52.h # includeintrins.HP rename=' code ' class=' CPP ' pre name=' code ' class=' CPP '

pre name=' code ' class=' CPP ' pre name=' code ' class=' CPP '/n毫秒延迟函数delay_ms(uintms ) )。

{

uint i,j;

for(I=ms; i0; I----)

for(j=114; j0; j----;

返回0;

} void main () {uint a; a=0xfe; while(1) {P1=a; a=_crol_(a,1 ); elay_ms(500; }

知识点: PSW寄存器。

PSW(programStatusword )全部称为程序状态字标志寄存器,是8位寄存器,位于单片机芯片内的特殊功能寄存器区域,字节地址D0H是运算结果的特征,例如进位汇编编程中PSW寄存器很有用,但用c语言编程时,编译器会自动控制该寄存器。 很少人为操作它,只需简单地理解即可。 各自的具体含义

如图1所示:

图1编程状态(pwd )寄存器

)进位)表示运算中是否存在进位)或借位)的进位标志。 如果操作的结果是最高位有进位(加法)或借位,则该位为1,否则为0。 ) AC )辅助进位标志,也称为半进位标志,指两个8位运算的后4位是否有半进位,即后4位加法(或减法)是否为进位(或借位),有的AC为1,没有则为0 ) f0 )用户使用的状态标志位,软件可以为1或0; 也可以用软件进行测试,控制程序的流程。 RS1、RS0:4组工件寄存器区域选择控制位。 在汇编语言中,这两个人用于选择四对工作寄存器区中哪个组是当前工作寄存器区。 )溢出标志)反映带符号数的运算结果中是否存在溢出。 如果存在溢出,则此位为1,否则为0。 )奇偶校验位反映了累加器的ACC内容的奇偶校验,如果ACC上的运算结果为偶数个l (例如11001100B,其中4个1 ),则p为0,否则p为1。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。