proteus仿真51流水灯和点阵(心形)

Posted xing-2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了proteus仿真51流水灯和点阵(心形)相关的知识,希望对你有一定的参考价值。

使用SDCC,不能简单套用keil环境下的语法,以下是SDCC中8051.h头文件与keil环境下reg51.h头文件的区别:

技术图片

关于如何在proteus上调用在codeblocks上编写好的C51代码:

  • 在proteus上双击51单片机或右击51单片机点击编辑属性

技术图片

浏览到codeblocks编译后的hex文件即可。
 

现在开始流水灯:

原理图:

 技术图片

代码:

#include <mcs51/8051.h>

void delay()

    for(int i=0;i<100;i++)
        for(int j=0;j<100;j++);


int main()

    while(1)
    
    for(P1=0x01;P1<=0x80;P1=P1<<1)
       delay();
    

 

运行结果:只能进行一次流水作用
原因分析:代码运行到P1=0x80时,进行左移后P1=0x00,在进行左移时P1一直为0x00,导致程序一直运行在for循环中。
解决方法(不唯一):
//将for循环改为如下形式 
   for(P1=0x01;P1>0x00;P1=P1<<1)

 

点阵(心形):
点阵:就是LED阵列,点亮通过操作行和列的电平来实现。列为共阳,行为共阴。
原理图:
技术图片
代码:
#include <mcs51/8051.h>

int a[8]=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;
int b[8]=0xf3,0xed,0xdd,0xbb,0xbb,0xdd,0xed,0xf3;

void delay()

    for(int i=0;i<100;i++);


void main(void)

    while(1)
    
        for(int i=0;i<8;i++)
        
            P2=a[i];
            P1=b[i];
            delay();
        
    

实现效果:

技术图片

 

以上是关于proteus仿真51流水灯和点阵(心形)的主要内容,如果未能解决你的问题,请参考以下文章

Proteus仿真51单片机+16X16点阵显示

51单片机 16X16点阵动态显示+Proteus仿真

Proteus仿真51单片机+74HC595驱动8X8点阵位移显示

Proteus仿真51单片机8X8点阵贪吃蛇游戏演示

51单片机8×8LED点阵屏显示数字动态显示+ Proteus仿真

51单片机8×8LED点阵屏动态显示取模汉字+ Proteus仿真