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

发布时间: 2024-08-02
来源: 电子工程世界

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

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

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

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

 

现在开始流水灯:

原理图:

 

代码:


#include


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


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();

        }

    }

}

实现效果:


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。